그 동안 W3150+를 오랜동안 사용해왔었는데, 보다 빠른 전송속도를 위해 W5300으로 새로이 설계를 해 보았습니다.
Controller는 STM32F429를 사용중입니다.
기본적인 동작모드는 16bit bus의 Indirect 모드로 설계하였습니다.
회로는 다음과 같습니다.
STM32의 bus는 16bit로 설정했기 때문에 0x02 번지이면 (EA1 = ‘0’, EA0 = ‘1’)이 되고
0x04 번지이면 (EA1 = ‘1’, EA0 = ‘0’) 이 됩니다.
-
초기화 과정에서 setMR() 및 getMR()을 이용하여 MR register를 write/read는 정상적으로 이루어 집니다.
-
getIDR()을 통해 DeviceID를 읽어보면 MR register의 값만 읽혀옵니다.
예를 들어 setMR(0xBC01)을 이후 getMR()의 값은 당연히 0xBC01으로 읽혀집니다.
그리고 나서 getDR()을 하면 0xBC01로 읽혀집니다.
#define IDM_AR ((WIZCHIP_IO_BASE + 0x0002))
#define IDM_DR ((WIZCHIP_IO_BASE + 0x0004))
#define W5300_IO_BASE 0x0000
#define setIDM_AR(ar) (**((uint16_t )IDM_AR) = (uint16_t)((ar) & 0xFFFF))
#define getIDM_AR() (((uint16_t **)IDM_AR))
(위에서 **은 더블포인터가 아니고 그냥 포인터 입니다. ‘*’ 표시되지 않아)
위 선언후, 예를 들어
setIDM_AR(0x024A) 이후 getIDM_AR()을 하면 0x004A로 읽혀집니다.
어떤 부분이 잘못되면 이러한 문제가 발생할 수 있는지 도움 요청드립니다.