EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 5명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·Sorting Algorithm Animation (2)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

임베디드! - Processor Anomaly List 또는 Silicon Errata
글쓴이: EzDoum 글쓴날: 2006년 01월 20일 오후 05:44
하드웨어



임베디드! - Processor Anomaly List 또는 Silicon Errata

요즘 진행하는 프로젝트에서 이것 때문에 당했다.


블랙핀에서 cmos sensor로 부터 ppi port로 이미지를 받는 작업을 하는데 여기서 ppi dma가 사용된다. 문제는 이 ppi dma가 진행되는 동안 코어가 외부 메모리(SDRAM,Flash..)를 접근하면, ppi 동기가 망가져서 이미지가 엉망이 되는 것이다.

처음엔 dma나 ppi를 설정을 잘못했나 싶어서, 설정하는 레지스터를 이래저래 막 바꿔가면서 가능한 조합을 테스트 해봤는데, 그러다가 ppi_status 비트중 over 비트가 종종 활성화 되는 것을 발견했다. 어라 ppi fifo가 overflow가 발생하는 건데 왜 그러지 가능성에 대해서 가설을 세우고 검증을 해나가기 시작했다.

1) dma, ppi 동작 클럭이 sclk/2 이다. 개발중이라 sclk을 좀 낮게 설정해서(66Mhz) 사용했는데, ppi로 쏟아지는 데이터는 27mhz이다. 마진이 아슬아슬 한듯(sclk의 절반이 33mhz) 보여서 이것을 100mhz나 133mhz로 설정을 해봤다. 마찬가지로 영상의 동기가 망가졌다.

2) dma 동작을 방해하는 요소가 있나??
보드에서 다른 기능들을 거의 제거하고 동작을 시켜보니, 잘되는게 아닌가. 증상이 눈에 띄게 나타난것이 timer0에서 값을 가공하는게 있었는데 이 부분을 막으니까 영상 깨짐이 덜했다. 추가로 확인해 본 것은 타이머는 그대로 두고 그 데이터 가공하는 부분을 막았더니(sdram에 로딩되는 데이터이다.) 아까와 같은 정도의 안정성을 보였다.

그래서 아에 dma와 ppi가 동작하는 중에 sdram을 읽어오는 것을 최소화하 하는 쪽으로 소스를 고쳐봤다. 결과는 영상은 아주 잘 받아졌다. 하지만 이건 우리가 원하는 답은 아니다. cmos센서로 부터 초당 60장을 규칙적으로 수신해서 데이터를 처리 하려면 dma의 동작과 코어의 동작이 동시에 이루어 져야 하는데, 블랙핀이 bus 제어를 제대로 못하고 있는듯 보였다.

좀 더 자세히 보기 위해 h/w reference의 Memory Architecture ,Chip Bus Hierarchy , Direct Memory Access ,Parallel Peripheral Interface 를 정독했다. 요 것들을 자세히 보다보면, dma가 사용하는 버스와 dma를 방해하는 요소가 core의 L1캐쉬 채우기나 비우기가 문제가 된다는 것을 알게 되었고, External Bus Interface Unit을 설정하는 레지스터 중 EBIU_AMGCTL에서 CDPRIO란 비트가 있는데 dma 제어기와 core가 경쟁을 했을때 CDPRIO의 설정값에 따라 우선순위를 정하게 된단다. 기본 값은 core가 우선하도록 되어 있는데, 이 비트를 설정하면 괜찮겠다 싶어서 설정을 해봤다. 그런데 값을 아무리 설정을 해도 jtag에서 레지스터 값을 보면 다시 초기화 되는게 아닌가!! 구글 검색을 좀 해봤더니 실리콘 0.1,0.2에서는 저 비트가 동작을 하지 않는단다.

우리가 작업하는게 0.2인데!!

해결책은 0.3으로 테스트 해보는 것과 ppi,dma동작을 line interrupt로 바꿔서 내부 메모리에 핑퐁 라인 버퍼에 임시로 받았다가 수평 블랭킹때 sdram으로 전송해보는 것을 해볼만 하겠다. 또 지금 10비트로 데이터를 받아서 한 픽셀당 16비트를 사용하게 되는데 다음 보드에선 이걸 8비트로 받으면 16비트로 Packed 전송이 가능하니까 여유가 좀더 생길듯!!

그런데 정작 Silicon Errata에는 이 오류가

57.05000173 - DMA vs Core accesses to external memory:

Description: The CDPRIO bit in the EBIU_AMGCTL register selects the priority of core vs. DMA accesses to external memory. This bit is not functional and set to zero. Therefore, core accesses have always priority over DMA accesses, when the two requests occur simultaneously.

Workaround: None.

Applies to revision(s): ADSP-BF531-0.1, ADSP-BF531-0.2


이렇게 밖에 안나오는데 부작용은 엄청나네.


[분류: 하드웨어 인쇄용 페이지 본문 email로 보내기 ]

<  ASP.NET 인증 방법, 그리고 FormsAuthenticationTicket | 임베디드! - 블랙핀 강의자료  >

답장 쓰기
글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

검색
Google

분류
·공지 (6)
·인터넷 (87)
·하드웨어 (260)
·C/C++ (65)
·어셈블리 (7)
·리눅스 (136)
·리눅스 커널 (67)
·윈도우즈 (25)
·데이터베이스 (20)
·보안 (16)
·.NET (25)
·그래픽 (13)
·책소개 (42)
·호기심 천국 (80)
·잡담 (111)
·사랑 (3)

전체 본문수: 963
전체 답장수: 525


분류 : 하드웨어
최근글
최근글
가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
뜨거운 감자
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

EzDoum투표
이지도움 어때요?
이게 뭐야. 다시 안올란다. --;
아이 좋아라~ +_+;
관심없다.
먼가는 있는거 같은데 뭐하는 곳이지?
기타 (자유게시판에 글로 남겨 주세요)
[ 결과 | 투표 ]

랜덤 링크
http://kldp.net


 Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
 Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum