기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요. 요즘 질문만 계속해서 죄송하네요..
아는게 없어서 아직은 배우고만 있습니다. 조그만 도움이라도 부탁드립니다.
U-BOOT에 LAN91C111 이더넷 드라이버를 추가하여 PXA255 보드에서 동작시킬려고 합니다.
진행사항
1. includ/configs/pxa_test.h (u-boot 소스 트리) 헤어 파일 추가사항
=========================================================================
#define CONFIG_DRIVER_SMC91111 1
#define CONFIG_SMC91111_BASE 0x04000300 ( MSC1 address는 0x4000000 임 )
#define CONFIG_SMC_USE_32_BIT 1
#define CONFIG_CMD_PING 1
=========================================================================
2. GPIO 설정( LAN91C111 관련)
=========================================================================
AEN <--> GPIO_15/nCS1_ETH
nRD <--> nOE
nWR <--> GPIO_49/nPWE
RESET <--> GPIO_5/ETH_RESET
=> 아래와 같이 설정 하였습니다.
AEN : GPDR(OUT설정) , GPCR(LOW로 출력),GAFR(설정해줌)
nWR : GPDR(OUT설정), GPSR(HIGH로 출력), GAFR(설정해줌)
RESET : GPDR(OUT설정) , GPSR(HIGH로 출력) 로 했다가 GPCR(LOW로 출력)으로 해줌.
=========================================================================
3. printenv 라고 치면 아래와 같이 설정되어 있구요
=========================================================================
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttyS0,115200
bootcmd=bootm=0x100000
bootdelay=2
baudrate=115200
ipaddr=192.168.100.10
serverip=192.168.100.50
netmask=255.255.255.0
ethaddr=08:00:3e:26:0a:5b
stdin=serial
stdout=serial
stderr=serial
Environment size: 254/16380 bytes
=========================================================================
4. 이렇게 해주고 "ping 192.168.100.50" 이렇게 ping test를 하였는데 아래와 같이 에러가 납니다.
=========================================================================
testlinux$ ping 192.168.100.50
SMC91111: smc_close
LAN91C111: smc_shutdown
SMC91111: smc_open
SMC91111: smc_reset
SMC91111: smc_enable
SMC91111: smc_program_phy()
smc_write_phy_register(): phyaddr=0,phyreg=0,phydata=8000
BIT#:01234567890123456789012345678901234567890123456789012345678901234
MDOE:11111111111111111111111111111111111111111111110011111111111111110
MDO :11111111111111111111111111111111010100000000000010000000000000000
MDI :00000000000000000000000000000000000000000000000000000000000000000
smc_read_phy_register(): phyaddr=0,phyreg=0,phydata=0
BIT#:0123456789012345678901234567890123456789012345678901234567890123
MDOE:1111111111111111111111111111111111111111111111000000000000000000
MDO :1111111111111111111111111111111101100000000000000000000000000000
MDI :0000000000000000000000000000000000000000000000000000000000000000
smc_write_phy_register(): phyaddr=0,phyreg=13,phydata=ffff
BIT#:01234567890123456789012345678901234567890123456789012345678901234
MDOE:11111111111111111111111111111111111111111111110011111111111111110
MDO :11111111111111111111111111111111010100000100110011111111111111110
MDI :00000000000000000000000000000000000000000000000000000000000000000
smc_read_phy_register(): phyaddr=0,phyreg=1,phydata=0
BIT#:0123456789012345678901234567890123456789012345678901234567890123
MDOE:1111111111111111111111111111111111111111111111000000000000000000
MDO :1111111111111111111111111111111101100000000001000000000000000000
MDI :0000000000000000000000000000000000000000000000000000000000000000
==================== 중략 ====================
smc_read_phy_register(): phyaddr=0,phyreg=1,phydata=0
BIT#:0123456789012345678901234567890123456789012345678901234567890123
MDOE:1111111111111111111111111111111111111111111111000000000000000000
MDO :1111111111111111111111111111111101100000000001000000000000000000
MDI :0000000000000000000000000000000000000000000000000000000000000000
SMC91111: PHY auto-negotiate timed out
Warning: MAC addresses don't match:
HW MAC address: 50:00:01:00:50:3A
"ethaddr" value: 08:00:3E:26:0A:5B
Using MAC Address 08:00:3E:26:0A:5B
SMC91111: smc_hardware_send_packet
SMC91111: memory allocation, try 1 failed ...
SMC91111: memory allocation, try 2 failed ...
SMC91111: memory allocation, try 3 failed ...
SMC91111: memory allocation, try 4 failed ...
SMC91111: memory allocation, try 5 failed ...
SMC91111: smc_rcv
RCV: STATUS a LENGTH 0
Reading 16383 dwords (and 0 bytes)
=========================================================================
위의 빨간 에러 내용을 소스를 찾아봐도 잘 모르겠네요.
도움좀 부탁드립니다.
아~ 추가로 질문 하나만 더 드릴게요. 염치없네요..
Host PC 즉 윈도우 XP상에서 tftp 서버 프로그램을 구동시켰습니다.
이때 시작->설정->네트워크 연결에서 해당 이더넷 카드의 tcp/ip 속성에서 Serverip와 넷마스크를 설정하였는데요 gateway는
설정을 꼭 해야되나요? 아니면 안해도 되는지요?
이상입니다. 좋은 하루되세요.
HW MAC address: 50:00:01:00:50:3A
"ethaddr" value: 08:00:3E:26:0A:5B
Using MAC Address 08:00:3E:26:0A:5B
=> 일단, SMSC91111의 드라이버에서 MAC ADDRESS가 저장되어 있는 ROM이 있는 지를 검사합니다.
만약 ROM이 붙어있지 않을 경우는 0 이 리턴되기 떄문에, 저런 메시지는 나오지가 않습니다.
(해당 부분의 rom_valid() 함수 참조)
하지만, 회로상에서는 ROM이 붙어있지 않은데, HW MAC Address 값이 나왔네요..
뭔가 하드웨어 혹은 S/W 적으로 설정이 잘 못된 것 같습니다. 원래는 "0"이 나와야 정상이거든요..
SMC91111: smc_hardware_send_packet
SMC91111: memory allocation, try 1 failed ...
SMC91111: memory allocation, try 2 failed ...
SMC91111: memory allocation, try 3 failed ...
SMC91111: memory allocation, try 4 failed ...
SMC91111: memory allocation, try 5 failed ...
=> SMSC91111은 패킷을 전송하기전에 내부 FIFO Memory를 초기화 한 후 전송을 수행 합니다.
물론 FIFO Memory가 초기화가 되었는지를 검사하겠죠. 저 메시지는 초기화 검사가 계속 실패했기 때문에 메시지가 나오는 것입니다.
윗 부분에서 MAC 관련 데이터도 제대로 못 뽑아내는 것 같으니, 이 부분도 에러가 나는 것은 당연한 것 같습니다.
저라면 일단 디버깅 장비로 Chip 데이터 시트 보시면서, 하나씩 레지스터를 때려보시면서 값이 Valid 한지 찾아 볼 것 같습니다.
그러면서 H/W 문제인지 아닌지를 우선 판단하고 짚고 넘어갈 것 같습니다. :)
그리고, TFTP의 경우 게이트웨이는 따로 설정하지 않아도 잘 동작하였던 것 같습니다.