W5500 ipraw 관련

안녕하세요.
W5500 관련 사용자 입니다.

IPRAW 프로그램을 구동시 PING TEST 되지 않아 문의 드립니다.
PING 테스트 시에 ARP 프로토콜로 보내기는 하나 수신은 되지 않는 것 같습니다.
원래는 ICMP프로토콜로 보내는 것으로 알고 있는데 무엇이 문제 일까요?
회로구성에 문제가 있는지 회로를 첨부하였습니다. 그리고 수신이 되는지 확인 할 방법은 없는지요?(레지스터 확인 방법)

수고하십시오.
Eth.pdf (58.9 KB)

안녕하세요.

저희가 제공해드리는 IPRAW API를 사용하신건가요?

먼저, PING 테스트를 할때 확인하셔야 할 사항이 있습니다.

  • ICMP Ping packet을 전송하기 전에 ARP request packet이 나가야 합니다.
    만약 ARP response packet이 수신되지 않는다면 ICMP Ping packet은 전송되지 않습니다.

첨부파일은 wireshark프로그램을 통해 Packet을 캡쳐한 것입니다.

감사합니다
Ek :slight_smile:


ARP 수신이 되어야 하는 군요~~
저도 WIRE SHARK로 확인을 해보니 수신이 안되는 것 같습니다.
첨부한 그림과 같이 1번과 2번 처럼 ARP 패킷을 뿌려주지만 ICMP 패킷은 안보이네요.

잘못된 패킷이라도 들어오는지 확인할 방법은 없는 것인가요?
수신 데이터에 어떤 데이터가 들어오는지 확인하고 싶은데요? 어떤 레지스터를 읽어보면 될까요?

안녕하세요.

제공해드리는 IPRAW source code로 사용하신건가요??

3번째의 ICMP Packet이 보이지 않는다는 것은 socket이 IPRAW모드로 open되지 않은것으로 판단됩니다.
socket 함수전에 socket레지스터 0x0014번지에 값을 IPRAW(0x03)으로 써주셨나요?

sendto함수를 사용한후 S0_IR를 보면 SEND_OK(0x10)가 확인되시나요?

감사합니다.
EK:)

네. 현제 제공하는 IPRAW 프로그램으로 확인하고 있습니다.
socket 함수전에 socket레지스터 0x0014번지에 값을 IPRAW(0x03)로 설정은 되어 있는것 같습니다.

그런데 SEND_OK가 안되는 것으로 보입니다.
SEND_OK가 되는지 확인하고자 sendto 함수내에 Printf문을 추가하여 확인하였으나
sendfail만 나타납니다.
무엇을 더 확인해 보아야 할까요?
while(1)
{
tmp = getSn_IR(sn);

  if(tmp & Sn_IR_SENDOK)
  {
     setSn_IR(sn, Sn_IR_SENDOK);
     Printf("sendok");
     break;
  }
  //M:20131104
  //else if(tmp & Sn_IR_TIMEOUT) return SOCKERR_TIMEOUT;
  else if(tmp & Sn_IR_TIMEOUT)
  {
     setSn_IR(sn, Sn_IR_TIMEOUT);
     Printf("send fail");
     return SOCKERR_TIMEOUT;
  }
  ////////////

}
return len;

답변이 늦어 죄송합니다.

Sn_CR(SENDOK)에 값이 제대로 써졌다면, Sn_IR(SENDOK)가 interrput로 뜨게 됩니다.
먼저, Timeout 발생 원인은 다음과 같습니다.

  1. Timeout interrupt
  2. ARP Timeout
  3. TCP Timeout

1번은 RTR과 RCR로 Data재전송의 시간과 횟수를 설정하여 Timeout을 발생합니다.
3번 TCP로 동작하기 때문에 상관없습니다.
2번은 ARP Response의 수신을 기다리다 난 Timeout입니다.
동작원리는 다음과 같습니다.

통신시 상대방의 IP address 로 MAC address 를 알기 위해 자동으로 ARP-request 를 전송합니다.
이때 상대방의 ARP response 수신을 기다리는데, RTR 의 설정 대기 시간 동안 ARP-response 의 수신이없으면, Timeout 이 발생하고 ARP-request 를 Retransmission 합니다. ‘RCR + 1’만큼 반복하게 되며, ‘RCR + 1’개의 ARP-request retransmission 이 일어나고, 그에 대한 ARP-response 가 없다면, Final timeout 이 발생하게 되고, Sn_IR(TIMEOUT) = ‘1’ 됩니다.

혹시 제가 코드를 한번 봐야할것 같은데, 코드를 보내주실수 있나요?

감사합니다.
ekkim :slight_smile:

ekkim :slight_smile: