WIZnet Developer Forum

w7500의 tx, rx buffer 관련하여 질문이 있습니다.

안녕하세요

현재 w7500의 loopback 예제를 활용을 통해 tcp client로 동작하는 코드를 작성하고 있습니다.

총 2개의 tcp client를 작성하여
w7500이 DSP와 통신하고(socket 0)
w7500이 PC의 프로그램과 통신(socket 1)하고 있습니다.

여기서 문제가 하나 발생하는데

통신을 시작하고 한 5분정도 지나니 통신이 끊어져버리는 현상이 발생하네요

각 소켓의 status(Sn_SR)을 확인해보았는데 SOCK_INIT 상태로 변경되버립니다…

혹시나 해서 소켓 0, 1의 TX, RX buffer size를 확인해보니 2KB로 설정되어 있어 이걸 16KB로 변경해서 동작을 시켜 보았습니다.

TX,RX buffer size를 2KB->16KB 변경 후 통신을 시작해 보니 30분 정도 지속되다가 끊어지고 다시 바로 통신이 시작되더라구요…

RX buffer나 TX buffer의 경우도 overflow가 발생하여 이로인해 통신이 두절될 가능성이 있는건가요?

제가 이해하기로 RX, TX buffer는 send, recv 동작을 수행하면 이전 수행때 써져있던 값 위에 써지는 것으로 이해를 하고있었고, 통신으로 보내는 byte로 기껏해야 50byte정도밖에 되지 않아 문제 없을 것으로 생각했었는데… TX,RX buffer size 에 따라 통신 두절되는 기간이 달라져서 혼란스럽습니다…

혹시 TX,RX buffer 의 overflow로 인한 문제라면 이를 reset시켜야 하는 동작이 추가적으로 필요하게 되는건가요???

답변좀 부탁드립니다.ㅠㅠ

감사합니다.

안녕하세요 연결이 끊기는 경우는 매우 다양한 케이스가 있어 해당 정보로만은 어떤 문제인지 알기가 어렵습니다.

소켓을 2개 사용한다고 하셨는데 혹시 둘다 16KB로 설정 하셨는지요?

Tx와 Rx버퍼는 최대 16KB 지만 모든 소켓의 버퍼 합이 16KB가 넘어가면 같은 메모리를 공유하게 되어 정상적인 통신이 되지 않을 수 있습니다.

만약 socket0와 socket1의 버퍼를 16KB 16KB로 설정하셨다면 8KB 8KB로 설정 하시기 바랍니다.

하지만 2KB일때도 통신이 끊긴다는걸로 보아 이 문제는 아닐것으로 보이며 패킷을 봐야 알 수 있을 것 같습니다.

PC와 W7500이 주고 받는 패킷을 wireshark라는 프로그램을 이용하여 캡쳐해 주시기 바랍니다.

감사합니다.

안녕하세요.

첨언을 좀 하자면
loopback 예제와 AX1 tool을 사용해서 1시간 이상 송수신 시험한 결과로는 이상이 없네요.
하기 링크의 소스로 client mode 송신 시험을 52bytes/500ms 두 2시간 이상 해도 이상이 없습니다.

원인을 여러 각도로 검토해 보시기 바랍니다.
일단 통신이 일정 부분 된다고 하니
-. MAC address는 정상적인 address 인가요?
-. static IP를 사용하고 있다면 IP 충돌을 피하기 위해 DHCP 사용을 권장합니다.
-. getSn_SR(sn) 값이 SOCK_CLOSE_WAIT 로 원격에서 disconnect 하는지 확인 필요.
-. aging 시험이 완료된 소스를 base로 다시 작업해 보시길 권장합니다.

감사합니다.

답변 감사합니다… 지금 다양한 각도로 해결하려고 하고있습니다…
하나 질문이 있는데요… 현재 debug창의 command에 다음과 같은 에러창이떠 통신이 안되는 상황이 발생하는데… 이유 및 해결방안에 대해 여쭤볼 수 있을 까요??

[Debug 창의 command]
image

justinkim 님께서 조언해주신대로 socket0, 1를 각각 8KB로 설정하여 동작해보았습니다.

아래는 W7500 2기와 컴퓨터간의 통신이 원활하게 진행되는 상태일때의 wireshark 캡쳐 화면입니다.

아래는 W7500이 컴퓨터에 데이터를 쓸때의 캡쳐이구요

아래는 컴퓨터에서 W7500으로 데이터를 쓸때의 캡쳐입니다.

이와 같이 정상동작 수행하다가 한 3분 정도 있다가 통신이 끊기고 그때의 wireshark 캡쳐는 다음과 같네요…

이때 W7500 2기의 데이터 주고받는건 아래와 같네요…


무슨 문제로 끊기는지 도통 모르겠습니다… ㅠㅠ

-현재 공유기로 네트워크를 구성하여 테스트를 하고있구요 W7500 2기를 사용합니다. W7500_1의 MAC address는 loopback 예제에 있는 것을 그대로 사용하였구요 {0x00, 0x08, 0xDC, 0x01, 0x02, 0x03};
W7500_2의 MAC address는 임의로 변경 후 사용하고있습니다. {0x00, 0x08, 0xDC, 0x02, 0x03, 0x04};
test 중이라… 임의로 변경 하여 사용하고 있는데 이게 문제가 될 소지가 있을까 궁금합니다.

  • 컴퓨터 프로그램과 W7500이 TCP 통신을 하고있는데 컴퓨터 프로그램에서 peer의 socket이 reset되었다고 알림이 발생하고, keil debug로 확인을 해보면 socket_status가 초기화된 상태입니다. w7500에서 tcp timeout이 발생하면 socket이 close되는것으로 알고있는데 이 부분도 의심을 해보아야 할까요?

H/W를 자체 제작했다면 H/W 이슈일 수도 있으니 support@wiznet.io 로 회로도, 거버파일 등을 검토 요청하시기 바랍니다.

감사합니다.

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