수고많으십니다.
현재 STM32F407ZGT를 사용하여 W5100 시험 중에 있습니다.
시험중에 수신부분을 확인하고자 W5100 설정 후, 수신 루프에서
한번만 수신을 하고 그 다음부터는 수신을 하지 않는 현상이 발생하였습니다.
*노트북에서 수신 받는 데이터크기는 16byte 입니다.
-
아래 소스의 recv_size 변수가 처음에는 24로 수신되고, 두 번째부터는 0으로 표시됩니다.
-
그리고 DBWrite8(S0_CR,0x40); //RECV 를 주석처리하면 recv_size는 24씩 증가를 합니다.
이런 문제가 왜 발생하는지 알 수 있을까요??
아래는 수신 소스 입니다.
=================================================================
recv_size = (DBRead8(S0_RX_RSR1) << 8) + DBRead8(S0_RX_RSR2);
printf(“recv size : %d\r\n”,recv_size);
if(recv_size > 0)
{
ptr = (DBRead8(S0_RX_RD1) << 8) + DBRead8(S0_RX_RD2);
memcpy(g_iRecvData_W5100,(uint8_t *)(0x60006000+ptr),24);
ptr += recv_size;
ptr1 = (ptr & 0xff00) >> 8;
ptr2 = ptr & 0x00ff;
DBWrite8(S0_RX_RD1,ptr1);
DBWrite8(S0_RX_RD2,ptr2);
DBWrite8(S0_CR,0x40); //RECV
}
================================================================
W5100 설정 부분
DBWrite8(0x0000,0x80); //W5100 Reset
DBWrite8(S0_MR,0x02); //Socket Register Mode Setting(UDP)
DBWrite8(SUBNETMASK1,0xff); //SubnetMask Setting, SUBR (Subnet Mask Register)
DBWrite8(SUBNETMASK2,0xff); //255.255.255.0
DBWrite8(SUBNETMASK3,0xff);
DBWrite8(SUBNETMASK4,0x00);
DBWrite8(0x040c,0xc0); //Destination IP Setting, Sn_DIPR (Socket n Destination IP Address Register)
DBWrite8(0x040d,0xa8); //192.168.0.201
DBWrite8(0x040e,0x00);
DBWrite8(0x040f,0xc9);
DBWrite8(0x0410,0x07); //Destination Port Setting, Sn_DPORT (Socket n Destination Port Register)
DBWrite8(0x0411,0xd0); //2000
DBWrite8(S0_CR,0x01); //Socket Open
DBWrite8(Source_IP1,0xc0); //IP Setting, SIPR (Source IP Address Register)
DBWrite8(Source_IP2,0xa8); //192.168.0.200
DBWrite8(Source_IP3,0x00);
DBWrite8(Source_IP4,0xc8);
DBWrite8(S0_PORT1,0x0b); / Port Setting(3000)
DBWrite8(S0_PORT2,0xb8);