타겟보드에 접속이 잘 안될 때, 대처법을 적어놓았다.
이번에 새로 주문한 DCU 의 경우, 예전보드(큰 5517 패키지)에서는 접속이 안되는 문제가 있었다.
새 DCU 에 깔린 펌웨어를 예전 것으로 다운그레이드 해보려고 시도했지만, 이 것도 제대로 안되었다.
문제점
접속이 안되는 에러는 크게 두 가지 경우가 있다.
1. reset 에러
C:\STM\DACS1000>gmake run gmake[1]: Entering directory `C:/STM/DACS1000/obj' Running top.lku on c2hw_jei st20run -l C:/STM/DACS1000/config/chip -l C:/STM/DACS1000/config/board -l C:/STM/DACS1000/config/platform -l /chip -l /board -l /platform -l C:/STM/DA CS1000/config/platform -i C:/STM/DACS1000/config/board/mb382_um.cfg -t c2hw_jei top.lku Setup5517
이 후에 더이상 진행되지 않을 때, reset 이 제대로 안되었을 때 생기는 에러이다.
2. kernel loading 에러
C:\STM\DACS1000>gmake run gmake[1]: Entering directory `C:/STM/DACS1000/obj' Running top.lku on c2hw_jei st20run -l C:/STM/DACS1000/config/chip -l C:/STM/DACS1000/config/board -l C:/STM/DACS1000/config/platform -l /chip -l /board -l /platform -l C:/STM/DA CS1000/config/platform -i C:/STM/DACS1000/config/board/mb382_um.cfg -t c2hw_jei top.lku Setup5517 proc setup_clock_gen Clock_gen setup procedure for programmed PLL mode... Device has booted in X1 mode. Programming FS PLL with 540 MHz C200 = 180 MHz SMI = 135 MHz SMI/2 = 67 MHz SMI/4 = 33 MHz Audio = 54 MHz COMMS = 54 MHz STBUS = 90 MHz FLASH = 90 MHz SDRAM = 90 MHz transitioning CLOCKGEN Successfully setup EMIpokes5517 alt settings Testing Phase & lock 0x00000001 0x12345678 SDRAM locked on phase 1 SDRAM init has been successful
얼핏 보기에는 제대로 정상 동작하는 것처럼 보이지만, 실행되지 못하고 dcu poke error 를 뿌린다. 가장 흔히 보는 에러 중 하나.
해결 방법
위의 문제들에 대한 해결 방법을 알아보자!!
일단 문제1 을 분석해보면, 5517 까지는 출력이 되는 것으로 봐서, mb382_um.cfg 파일이 수행이 되었다는 것을 알 수 있다. 그렇다면, 이 후에는 어떤 동작을 수행해야 하는 가?
DCU 와 타겟사이에 뭔가 통신이 제대로 안되고 있음을 알 수 있다. 또한 정상적으로 수행되고 있는 보드의 출력메세지와 비교해보자!!
부팅이라는 것을 하게 되면, DCU 는 타겟보드를 초기화시키기 위해 reset 을 시킨다. 위의 문제는 제대로 reset 이 안된 경우라고 볼 수 있다.
이제 회로도 상에서 DCU 와 타겟보드 사이에 연결되는 부분을 찾아보자!!
회로도 2번째 장에 보면, 있다. 현재는 C210, C202 에 각각 10pF 의 캐패시터가 달려있다. 이것을 좀 더 큰 100pF 로 달아보자!
그리고, 다시 접속해보자! 어떤가??
만일 상황이 나아지지 않았다면, 이번에는 좀 더 큰 캐패시터를 달아보자!! 그래도 나아지지 않는다면, 낮은 것으로 달아보자!!
여기서 중요한 것은 DCU 가 어떤 경로로 해서 보드와 통신을 하는 가 이다.
이번에는 문제2 를 분석해보자!!
좀 난해하다. config 디렉토리 아래에 있는 .cfg 파일을 따라가봤지만, 여기서는 sdram 을 초기화할 뿐이다. 정작 중요한 커널을 로딩하는 부분은 찾을 수 없었다.
내가 생각해볼 때, dcu poke 에러의 경우에는 dcu 의 문제와 타겟보드의 wait 문제일 가능성이 높은 것 같다.
새로 들여온 dcu 의 경우, lan 을 이용해서 접속 했을 때는 거의 dcu poke 에러를 냈었다. 하지만, usb 와 크로스케이블로 연결해서 접속한 결과, 제대로 수행되었다. 또한 예전 dcu 의 경우는 접속 방법에 상관없이 정상 동작 하였다. 이렇게 보면, 분명 dcu 문제라 보여진다.
또한 이런 경우도 있다. 예전에 보드의 wait 세팅을 반대로 해서, 더이상 실행되지 못하고 dcu poke 에러를 낸 적이 있었다.
마치면서
요즘들어 부쩍 하드웨어가 정말 어렵구나 라는 생각을 하게된다. 프로그램을 수행하다가 에러가 나면, 과연 하드웨어인지, 소프트웨어 문제인지, 하드웨어 문제라면 어디를 어떻게 보아야 하는지? 도통 감이 안 잡히기 때문이다.