Tx 메모리 Free Size가 0로 읽히는 문제


#1

안녕하세요, 담당자님:

W5300 사용자로 FPGA 기반으로 드라이버를 구성하였습니다. 현재 Socket 0를
사용하여 MACRAW 프로토콜로 통신하며 전송명령이 있을 때 마다(테스트는 1ms
주기로) 1024바이트를 원격지로 전송하고 있습니다.

문제는 전송이 잘 되다가 중간에 교착상태에 빠져 버립니다. 예를 들면 1000회
전송을 명령하면 200번 정도는 정상으로 전송되다가 어느 순간 교착상태에 빠집니다.
디버깅 결과 해당번지인 TX_FREE_SIZE가 한번 0으로 읽히기 시작하면 계속 0으로
읽혀, 조건(TX_FREE_SIZE > PACKET_LEN)이 충족되지 않아 무한루프로 돌아가고
있습니다.

제 질문은 어떤 때 이러한 현상이 일어날 수 있을까요? 또한 이렇게 동작할 때 초기화
외에 교착상태를 빠져나오기 위한 어떤 좋은 방법이 있는지요? 답변 부탁 드립니다.

감사합니다.


#2

안녕하세요 고객님.

TX memory free size가 0이라면 메모리에 저장된 데이터를 정상적으로 send하지 못한 것으로 판단됩니다.

Send 명령어를 내린후 Sn_IR(SENDOK)=1을 확인한 후 다음 send명령어를 내려서 메모리에 쌓여있는 데이터를

정상적으로 보낸 후 보내려는 데이터를 메모리에 입력 해보시기 바랍니다.

감사합니다.


#3

안녕하세요, 담당자님:

예, 답변 감사합니다. 문제가 해결되었습니다.

FPGA로 코딩한 W5300 드라이버라 그런지 전송명령을 내리는 신호가 불안정하여
발생한 문제로 판단합니다. 로직 자체에는 문제가 없었던 것 같고 FPGA 클럭과
Ethernet 드라이버 클럭(80MHz 사용)이 이종 클럭이라 해당 명령신호를 조건문
내에서 직접 사용하지 않고 80MHz Ethernet 드라이버 클럭으로 Latch를 한 후
사용해야 했었는데 그렇지 않아서 발생한 문제네요.

답변 감사드리며 추후에도 많은 도움 부탁 드립니다.