W5500 PHY Link 문의

안녕하세요.

W5500을 이용해서 보드를 개발중인데 PHY Link 가 안되서 문의 드립니다.
일단 SPI 통신은 정상적으로 되구요. (IP, GW등 설정 됩니다)

do { if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1) { printf("Unknown PHY Link status.\r\n"); return; } } while (tmp == PHY_LINK_OFF);

PHY 체크 하는 부분에서 PHY_LINK_OFF만 계속해서 나옵니다(무한루프 상태).
케이블은 크로스케이블과 스트레이트 케이블 둘다 사용해봤지만 둘다 반응이 없네요.
정상적으로 연결되었을때 켜지는 LED도 불이 안들어옵니다.

STM32f101 + W5500 으로 만들었으며,
회로는 wizwiki.net/wiki/doku.php?id=pro … fschematic 이 페이지를 참조하였습니다.
(

  • RJ-45 커넥터는 J0011D21B 를 사용하였구요
  • 회로에서 W5500 리셋 하는 부분을 STM32F의 GPIO로 제어 하지 않고 RC 리셋회로를 만들어서 리셋 시켰습니다(10ms).
  • 25MHz 크리스탈 사용했습니다.
    )
    포팅 코드는 blog.cahg.org/wp/?p=40 이 블로그를 참고 했습니다.

전체 소스는 dropbox.com/s/avbq40ohhur2e … t.zip?dl=0 여기서 볼수 있습니다(/Source 폴더)
어떤 부분을 확인하면 될까요

ps. W5500-EVB 를 하나 구매했는데 하루 이틀 잘 되는거 확인하고 2주쯤 안쓰다가
다시 꺼내서 써볼려니 Tcp Connect가(펌웨어 변경 안한상태) 안되는군요. 고장일경우 혹시 수리 맡길려면 어디에 문의 하면 되나요?

안녕하세요.

코드로 보았을 때는 문제가 없어보이는데요…

제작하신 회로도랑 PCB파일이 필요해보입니다.

일단 정상적으로 LINK가 되셨다는 뜻은 PHY가 정상동작한다는 것으로 판단됩니다.

아래 코드는 정상동작하는 코드인데, 비교 한 번 부탁드립니다.

do{//check phy status.
	if(ctlwizchip(CW_GET_PHYLINK,(void*)&temp) == -1){
		printf("Unknown PHY link status.\r\n");
	}
}while(temp == PHY_LINK_OFF);

그리고 보통 GPIO로 핀 전부 선언하고 SPI initialize하고 난 뒤에 아래 코드와 같이

세팅을 하게 되는데요. 이렇게 작성하신 것 맞나요???

void W5500Initialze(void)
{
unsigned char temp;
unsigned char W5500FifoSize[2][8] = {{2,2,2,2,2,2,2,2,},{2,2,2,2,2,2,2,2}};

W5500DeSelect();

/* spi function register */
reg_wizchip_spi_cbfunc(W5500ReadByte, W5500WriteByte);

/* CS function register */
reg_wizchip_cs_cbfunc(W5500Select,W5500DeSelect);

if(ctlwizchip(CW_INIT_WIZCHIP,(void*)W5500FifoSize) == -1)
{
	printf("W5500 initialized fail.\r\n");
}

do{//check phy status.
	if(ctlwizchip(CW_GET_PHYLINK,(void*)&temp) == -1){
		printf("Unknown PHY link status.\r\n");
	}
}while(temp == PHY_LINK_OFF);

}

만약 위 코드대로 하셨는데도 동일한 증상이 나타나신다면 제작하신 회로 확인이 필요할 것 같습니다.

감사합니다.