WIZnet Developer Forum

[W5500] close()를 할 수 없습니다

안녕하세요. wiznet W5500을 사용 중이고 DNS를 테스트 하는 도중 close함수 내부에서 무한루프에 빠져있는 현상이 나타났습니다.

아래의 코드는 https://github.com/Wiznet/ioLibrary_Driver/blob/master/Ethernet/socket.c의 225번째 줄에서 확인 할 수 있습니다.

	setSn_CR(sn,Sn_CR_CLOSE);
   /* wait to process the command... */
	while( getSn_CR(sn) );

제가 트레이스 해본 결과 이 while문에서 계속 무한루프가 돌고 있습니다.

getSn_CR(sn)의 리턴값은 계속 0x10이 나타나고 있습니다. 무엇이 문제일까요?

추가적으로 기존에 잘 동작하다가 갑자기 안되기 시작했고 동일한 다른 제품에서는 정상동작 중입니다.

chip이 정상 동작하고 있을경우 위와 같은 문제는 발생하지 않습니다.
system clock이 불안정하거나 하드웨어적인 문제가 있는것으로 보여집니다.
system clock 이 정상적으로 W5500으로 들어가고있는지 확인해보시기 바랍니다.

현재 MAC과 IP 등의 설정 값을 할당하고 정상적인 상태를 확인한 다음 DNS를 했을 때는 같은 문제가 발생하지 않았습니다. 하지만 socket close()가 안되는 것과 이 상황이 관련이 있는 것인가요?

칩이 정상적인 상태라면, Sn_CR에 값을 쓴 후 정상동작 후 Sn_CR은 0x00을 리턴하기 되어있습니다.
해당 동작이 발생할경우 Ping packet을 보내거나, Version register를 읽어서 값을 제대로 읽어오는지 확인해야할것 같습니다.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.