W5200 Errata Sheet Document History Ver 1.0.0 (Feb. 23, 2012) First release (erratum 1) Ver 1.0.1 (Mar. 28, 2012) Add a solution for erratum 1, 2 Ver 1.0.2 (Apr. 03, 2012) Add a solution for erratum 3 Ver 1.0.3 (Feb. 31, 2013) Modified phenomenon and condition for erratum 1 Ver 1.0.4 (Jun. 5, 2013) Fixed typos in erratum 1 (W5300 -> W5200) Ver 1.0.5 (Oct. 28, 2013) Add a description of solution for erratum 1 Ver 1.0.6 (JUL. 8, 2014) Modify a description of solution for erratum 2 1/8
2012 WIZnet Co., Inc. All Rights Reserved. For more information, visit our website at http://www.wiznet.co.kr Erratum 1 Phenomenon Condition Source IP 주소가 0.0.0.0 인 Node 에서 W5200 칩에 ARP Request 패 킷을전송하면 W5200 칩은올바른 Target IP 주소인 0.0.0.0 가아닌저 장된 Gateway IP 주소를 Target IP 주소로 ARP Reply 패킷을전송하는문 제가있다. Solution & Recommendat ion W5200 칩내부의 ARP 처리과정에서통신할 Target IP 주소가 0.0.0.0 일 때, Subnet 계산의오류로인해 Target IP 주소인 0.0.0.0 을다른 Subnet 에 존재하는 IP 주소로잘못판단하여 Target IP 주소를저장된자신의 Gateway IP 주소로변경해서 ARP reply 패킷을전송하는오류가발생한다. Before applying(without solution) W5100 Initialization set GW : 192.168.1.254 set IP : 192.168.1.2 set SN : 255.255.255.0... After applying(with solution) W5100 Initialization set GW : 192.168.1.254 set IP : 192.168.1.2 set SN : 255.255.255.0... TCP Connect Get SIPR If SIPR = 0.0.0.0 Clear SN : 0.0.0.0 Else to maintain previous SN value after"execute connect command"... UDP Send Get SIPR If SIPR = 0.0.0.0 Clear SN : 0.0.0.0 Else to maintain previous SN value after"execute connect command"... 이 Erratum 을피하기위해 TCP 의 Connect 명령과 UDP 의 SEND 명령을 제외하고항상설정한값으로 subnet mask register 값을유지한다. TCP connect 명령과 UDP send 명령은 ARP 패킷을송신하기때문에위그림처럼 유효한 subnet mask 값을전역변수에저장해두고 TCP connect 와 UDP send 명령을수행할때만 subnet mask register 값을 0 으로설정하고명령이완료 되면다시 subnet mask register 값을저장해놓은값으로변경한다. 2/8
위의내용을적용했을경우에는 Subnet broadcasting이되지않는다. Example pseudo code: /* Global variable declaration for subnet mask value */ unsigned char subnet_val[4]; /* W5100 initialization function */ Function Initialize_W5100( ) /* Clear the subnet mask register */ IINCHIP_WRITE(SUBR0, 0); IINCHIP_WRITE(SUBR1, 0); IINCHIP_WRITE(SUBR2, 0); IINCHIP_WRITE(SUBR3, 0); /* Save the right subnet mask value if the subnet is 255.255.255.0 */ subnet_val[0] = 255; subnet_val[1] = 255; subnet_val[2] = 255; subnet_val[3] = 0; /* TCP connect function */ Function TCP_Connect( ) /* Clear the subnet mask register again and keep it */ IP_Val[0] = IINCHIP_READ(SIPR0); IP_Val[1] = IINCHIP_READ(SIPR0+1); IP_Val[2] = IINCHIP_READ(SIPR0+2); IP_Val[3] = IINCHIP_READ(SIPR0+3); If( IP_Val[0]==0 && IP_Val[1] ==0&& IP_Val[2] ==0&& IP_Val[3] ==0) IINCHIP_WRITE(SUBR0, 0); IINCHIP_WRITE(SUBR1, 0); IINCHIP_WRITE(SUBR2, 0); 3/8
IINCHIP_WRITE(SUBR3, 0); /* Execute TCP connect command */ IINCHIP_WRITE(Sn_CR(socket), Sn_CR_CONNECT); /* Wait for command done */ while(sn_cr(socket)); /* Set the subnet mask register to the right value using the variable */ IINCHIP_WRITE(SUBR0, subnet_val[0]); IINCHIP_WRITE(SUBR1, subnet_val[1]); IINCHIP_WRITE(SUBR2, subnet_val[2]); IINCHIP_WRITE(SUBR3, subnet_val[3]); /* UDP sendto function */ Function UDP_Sendto( ) /* Clear the subnet mask register again and keep it */ IP_Val[0] = IINCHIP_READ(SIPR0); IP_Val[1] = IINCHIP_READ(SIPR0+1); IP_Val[2] = IINCHIP_READ(SIPR0+2); IP_Val[3] = IINCHIP_READ(SIPR0+3); If( IP_Val[0]==0 && IP_Val[1] ==0&& IP_Val[2] ==0&& IP_Val[3] ==0) IINCHIP_WRITE(SUBR0, 0); IINCHIP_WRITE(SUBR1, 0); IINCHIP_WRITE(SUBR2, 0); IINCHIP_WRITE(SUBR3, 0); /* Execute UDP send command */ IINCHIP_WRITE(Sn_CR(socket), Sn_CR_SEND); /* Wait for command done */ 4/8
while(sn_cr(socket)); /* Set the subnet mask register to the right value using the variable */ IINCHIP_WRITE(SUBR0, subnet_val[0]); IINCHIP_WRITE(SUBR1, subnet_val[1]); IINCHIP_WRITE(SUBR2, subnet_val[2]); IINCHIP_WRITE(SUBR3, subnet_val[3]); 5/8
Erratum 2 Phenomenon W5200 칩에서자신의 IP주소는 0.0.0.0 으로설정되어있으며, Gateway IP 주소와 Subnet mask 정보가 0이아닌값으로설정되어있는상황에서네트워크상의다른 Node에게 ARP Request패킷을전송할때, Target IP address로상대방 IP주소를정확히설정했음에도불구하고 ARP 패킷의 Target IP address는설정한상대방 IP주소가아닌 Gateway IP주소로설정된 ARP Request 패킷을송신하는문제가있다. Condition Solution & Recommendat ion W5200 칩내부의 ARP 처리과정에서자신의 source IP주소가 0.0.0.0 일때, Subnet계산오류로인해설정된 Target IP 주소를보내지못하고 Target IP주소를자신의저장된 Gateway IP주소로변경하여 ARP request 패킷을전송하기때문에전달되어야할 Normal node로 ARP Request 패킷이전달되지않는다. 또한같은상황에서 Gateway IP 주소가 0.0.0.0 일경우, Target IP 주소가현재 Gateway 주소인 0.0.0.0 으로변경되어 ARP request 패킷을전송하게되어 Target IP 주소로패킷이전달되지않는문제가발생하게된다. Erratum2의원인은 Erratum1와동일하기때문에 Erratum1의솔루션과동일하다. 6/8
Erratum 3 Phenomenon W5200칩의 macraw mode를사용하는경우, 간혹패킷수신사이즈가실제패킷사이즈보다크게들어오는현상이있다. 이현상으로수신된패킷사이즈가실제칩내부의최대수신사이즈보다작은경우에도발생하며, 이때수신된패킷은최대수신사이즈보다크게되어버려지는현상도존재한다. -수신패킷사이즈가실제패킷사이즈보다증가한경우 MACRAW data의구조는아래와같고, PACKET-INFO(data packet 길이 ) 가실제패킷사이즈보다크게들어오는현상이있다. 이때, 실제패킷사이즈에서 PACKET-INFO길이까지는 Dummy data가존재한다. Figure The received MACRAW data Format Solution & Recommendat ion -수신사이즈가최대수신사이즈보다크게되어수신패킷이버려지는경우칩내부에서 1514 바이트가최대수신사이즈로지정되어있어그이상의수신데이터사이즈의패킷은버리게되는경우가존재한다. -수신사이즈가크게들어오는경우실제패킷사이즈보다크게들어오는오류상황을피하기위한방법으로 IP Header 의 Total length Filed 를이용하여 Packet 의실제사이즈를확인하여패킷의올바른수신사이즈를판단할수있다. MACRAW data 의 Payload 내부에 IP Header 가존재하며, 이 IP Header 에는전체패킷사이즈정보를가진 Filed 가존재한다. 따라서, Software stack 을사용하는경우 Software stack 이 IP Header 의 Total length 를이용하여수신된 Packet 의실제사이즈를확인하도록설정해야한다. -수신사이즈가최대수신사이즈보다크게되어수신패킷이버려지는경우 1514 바이트가최대사이즈로지정되어있어최대사이즈이상의패킷을버리는경우를피하기위해 TCP/UDP 이용시패킷이최대사이즈로송수신되지않도록버퍼사용을제한해야한다 TCP 의경우는간단하게 Windows 사이즈 ( 수신버퍼 ) 를 1459byte 이하로조절해야한다. UDP 의경우 Application 7/8
Layer 에서한번에전송할수있는패킷의사이즈를 1452 바이트미만으로 제한한다. 단, W5200 의 Hardwired TCP/UDP 모드를사용할경우 Erratum3 의현상이 발생하지않는다. 8/8