eloiz
1
안녕하세요.
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가(펌웨어 변경 안한상태) 안되는군요. 고장일경우 혹시 수리 맡길려면 어디에 문의 하면 되나요?
Edward
2
안녕하세요.
코드로 보았을 때는 문제가 없어보이는데요…
제작하신 회로도랑 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);
}
만약 위 코드대로 하셨는데도 동일한 증상이 나타나신다면 제작하신 회로 확인이 필요할 것 같습니다.
감사합니다.