W5200 에서 w5500으로 마이그레이션

#1

안녕하세요,

기존에 STM32F407 에 연결된 w5200으로 TCP/IP통신을 정상적으로 수행해오고 있었는데 이번에
보드 리뉴얼을 진행하면서 w5500을 사용하게 되었습니다.
마이그레이션 코드를 보니 특별히 달라진건 없고
setSUBR(); 함수가
void setSUBR(uint8 * addr) 이렇게 바뀌었더군요.
그래서 w5200.c, w5200.h만 추가해서 컴파일 해보았더니 컴파일은 정상적으로 됩니다.
그런데 전혀 연결이되지 않고 ping도 나오지 않습니다.
혹시 어딘가 놓친 부분이 있을까요?

#2

W5500은 3가지의 버전의 드라이버를 제공합니다.

  1. ioLibrary_BSD (Official)
  2. ioLibrary (Non-BSD )
  3. W5200 user driver (BSD)
    정확히 어떤 버전을 Porting하였는지 궁금합니다.

참고로
W5200과 W5500은 통신 규약은 SPI로 동일하나 spi로 운용되는 Protocol frame은 전혀 다릅니다.

#3

[quote=“midnightcow”]W5500은 3가지의 버전의 드라이버를 제공합니다.

  1. ioLibrary_BSD (Official)
  2. ioLibrary (Non-BSD )
  3. W5200 user driver (BSD)
    정확히 어떤 버전을 Porting하였는지 궁금합니다.

참고로
W5200과 W5500은 통신 규약은 SPI로 동일하나 spi로 운용되는 Protocol frame은 전혀 다릅니다.[/quote]

아래 페이지의
wizwiki.net/wiki/doku.php?id=pro … 0_to_w5500

w5500_cortexm3_firmware_for_legacy.zip 파일의 내용을 기준으로 porting 하였습니다.
일단 현상을 보면
getSn_SR(s); 여기에서 값이 리턴되지 않습니다.

#4

VERSION Register를 한번 읽어서 0x04가 나오는지 확인바랍니다.
spi interface가 제대로 동작하는지 확인 필요합니다.

#5

[quote=“midnightcow”]VERSION Register를 한번 읽어서 0x04가 나오는지 확인바랍니다.
spi interface가 제대로 동작하는지 확인 필요합니다.[/quote]

회로문제가 있어서 수정하였더니 이제 IP어드레스는 할당되서 Ping은 제대로 갑니다.
그런데 여전히 포트로 연결하려고 하면 연결이 되지 않습니다.
getSn_SR(s) 은 항상 0이 반환되는군요.

#6
void WIZ_Network_Init(void) {
	uint8 i, reg=0;
	
	for (i = 0 ; i < 6 ; i++) {
		Config_Msg.MAC[i] = WIZ_MAC[i];		// MAC ADDRESS
	}

	for (i = 0 ; i < 4 ; i++) {
		Config_Msg.LIP[i] = WIZ_IP[i];			// Local IP ADDRESS
		Config_Msg.GW[i] = WIZ_GateWay[i];		// GateWay ADDRESS
		Config_Msg.SUB[i] = WIZ_SubNet[i];		// Subnet Mask ADDRESS
	}
	
	setSHAR(Config_Msg.MAC);
#ifdef USE_WIZNET_5200
	saveSUBR(Config_Msg.SUB);
#elif defined USE_WIZNET_5500
	setSUBR(Config_Msg.SUB);
#endif
	setGAR(Config_Msg.GW);
	setSIPR(Config_Msg.LIP);
	
	// Set DHCP
	Config_Msg.DHCP = WIZ_Enable_DHCP;
	//Destination IP address for TCP Client
	for (i = 0 ; i < 4 ; i++) {
		Chconfig_Type_Def.DestIP[i] = WIZ_Dest_IP[i];
	}
	Chconfig_Type_Def.Port = WIZ_Dest_Port;
	
	//Set PTR and RCR register	
	setRTR(6000);
	setRCR(3);
	//Init. TX & RX Memory size
	sysinit(WIZ_TX_Size, WIZ_RX_Size);
	reg  = IINCHIP_READ(VERSIONR);

}
#7

VERSIONR Read 값이 0x04가 되는지 확인이 되었는지 궁금합니다.
상기 소스 코드 결과를 알려주세요.