W5100 송신 문제

안녕하세요.

수신 다음으로 송신에 관하여 문의드립니다.

송신에서 발생한 문제점이 SEND 명령을 수행하면

PC와 보드간의 Ping이 끊어지는데요. PC에서는 아무런 Data도 받지 않고 있습니다(와이어샤크로 확인중)

Sn_SR의 값도 0x22로 출력됩니다.

혹시 다른 부분을 봐야할 곳이 있을까요??

아래는 송신쪽 코드입니다.

void write_data(uint8_t * buff, uint16_t len)
{
uint16_t size;
uint16_t src_mask;
uint32_t * src_ptr;
uint16_t ptr;
uint8_t ptr1,ptr2;


ptr1=DBRead8(S0_TX_WR1);
ptr2=DBRead8(S0_TX_WR2);
ptr = (ptr1 << 8) + ptr2;

src_mask = ptr & MASK;
src_ptr = (uint32_t *)(0x60004000 + src_mask);

if( (src_mask + len) > (uint16_t)SIZE )
{
	size = (uint16_t)SIZE - src_mask;
	memcpy((uint32_t *)src_ptr, buff, size);

	buff += size;
	size = len - size;
	src_ptr = (uint32_t *)(0x60004000);
	memcpy((uint32_t *)src_ptr, buff, size);
}
else
{
	memcpy((uint32_t *)src_ptr, buff, len);
}

ptr += len;				//write point update
ptr1 = (ptr & 0xff00) >> 8;
ptr2 = ptr & 0x00ff;
DBWrite8(S0_TX_WR1,ptr1);
DBWrite8(S0_TX_WR2,ptr2);

DBWrite8(S0_CR,SEND);
printf("\r\nS0_CR: 0x%x   S0_SR: 0x%x   S0_IR: 0x%x\r\n",(uint8_t)DBRead8(S0_CR),(uint8_t)DBRead8(S0_SR),(uint8_t)DBRead8(S0_IR));
}

출력은
S0_CR: 0x0 S0_SR: 0x22 S0_IR: 0x4
이렇게 나타납니다.

#define MASK			0x07FF		//0x03FF  0x07FF   0x0FFF   0x1FFF
#define SIZE			2048		//1024    2048     4096     8192

SEND 명령을 수행하면 Ping 끊어진다는게 무슨뜻인지 모르겠습니다.

지난번 수신때와 마찬가지로,
Source IP, Port, Destination IP, Port 한번 확인해보시기바랍니다.
수신때 Port가 바뀌는 문제는 해결되셨나요?
port를 계속 새로 write해주는것은 궁극적인 해결방법은 아닌듯합니다.

1 Like

PC에서 핑테스트로 연결확인을 하는데 SEND 이후에 연결이 안되는것으로 나타납니다.

이상한점은 보드에서는 수신은 계속해서 잘 받고 있네요.

Src IP와 Port, Dest IP와 Port는 SEND 이후, 출력하였는데

Des IP : 192.168.0.201 Port : 0x014 Src IP : 192.168.0.200 Port : 0x01e

정상적인 것으로 확인하였습니다.

port를 계속해서 write하는 부분은 포트 값을 3000 → 30, 2000 → 20으로 하여 해결하였습니다.

  • 상위 비트만 이상해지는 것으로 확인되어 하위비트로만 포트를 설정하였습니다.

그리고 SEND 이후에, TX_WR과 TX_RR을 출력해보았습니다.
S0_TX_WR1: 0x1 S0_TX_WR2: 0xc0
S0_TX_RR1: 0x0 S0_TX_RR2: 0x0
S0_CR: 0x0 S0_SR: 0x22 S0_IR: 0x4

RR 값이 갱신이 안되는 것 같은데, SEND 명령 이후에는 TX_WR과 같은 값이 되어야 되는게 정상인거죠?

아~ 해결했습니다.

초기화 설정하는 부분을 수정했습니다.

초기설정에 Des IP와 Port를 설정했었는데 그 부분을 주석처리하고

write하는 부분에 설정하는 것으로 하니 송신이 잘되네요.