안녕하세요.
cs8900a와 관련된 질문입니다.
움.. 이솝보드도 cs8900a를 이용하여 u-boot에서 이더넷을 사용하죠?
여기서 cs8900a를 연결하기 위해 세트 하는 코드 부분은 어디 부분인가요?
cs8900a를 제어 하는 간단한 펌웨어를 작성해보려고 하는데 잘 안됩니다.
u-boot의 driver 디렉토리에서 cs8900.c, cs8900.h을 참고 해서 보면
cs8900a의 패킷페이지 아키텍처에 따라 구현한 get_reg()나 put_reg() 함수를
사용하여 칩 내의 레지스터를 세팅하는 것을 알 수 있습니다.
그래서 그 함수들을 이용하여 값을 입력하고 넣어 보았지만 두가지 값만 얻을 수
있더군요. 바로 0x630e와 0x0300입니다.
get_reg나 put_reg() 함수는 내부에서 패킷페이지 포인터 레지스터에 인자로 받은
offset 값을 넣어서 칩 내의 다른 레지스터에 접근하도록 되어 있는데, 이때
패킷페이지 포인터 레지스터에 원하는 값이 들어가지가 않습니다. 만약 0을 집어
넣으면 0x3000이 들어가 있고, 그 외의 다른 값은 0x3101이라는 값이 들어가더군요.
0을 넣었을때의 결과는 확실히 맞는 것 같은데.. 다른 값은 왜 안들어가는지..
아마도 제가 보드의 환경을 설정할때 (GPIO 등..) 무엇인가 빠뜨려서 인것 같은데..
제 보드 같은 경우 cs8900이 0x19000300이 베이스 입니다. 즉 GCS3에 위치하는
데요. 이녀석은 gpa14에 물려 있더군요. 그래서 이 것을 연결하는 코드를 넣어봤습
니다. 하지만 안되요...ㅜ_ㅜ
그래서 혹시 하드웨어를 연결하기 위한 코드가 필요한지 궁금합니다. 혹시 다른
문제 때문인지도 궁금하고요.
고수님들 답변 부탁드립니다.
include/configs/smdk2410.h 를 보면
#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
#define CS8900_BASE 0x19000300
#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
이거 네줄 define하면 동작합니다.
나머지는 코드쪽을 봐야지요.
그리고, timing쪽을 신경써야할겁니다.