Data Sheet
© Copyright 2013 WIZnet Co.,Ltd. All rights reserved.
49
iEthernet
W5200
ESTABLISHMENT : Check received data
Confirm the reception of the TCP data.
First method :
{
if (Sn_IR(RECV) == ‘1’) Sn_IR(RECV) = ‘1’; goto Receiving Process stage;
/* In this case, if the interrupt of Socket n is activated, interrupt occurs. Refer to IR, IMR
Sn_IMR and Sn_IR. */
}
Second Method :
{
if (Sn_RX_RSR0 != 0x0000) goto Receiving Process stage;
}
The First method: set the Sn_IR(RECV) to ‘1’ whenever you receive a DATA packet. If
the host receives the next DATA packet without setting the Sn_IR(RECV) as ‘1’ in the
prior DATA packet, it cannot recognize the Sn_IR(RECV) of the next DATA packet. This is
due to the prior Sn_IR(RECV) and next Sn_IR(RECV) being overlapped. So this method is
not recommended if the host cannot perfectly process the DATA packets of each
Sn_IR(RECV).
ESTABLISHMENT : Receiving process
In this process, it processes the TCP data which was received in the Internal RX
memory. At the TCP mode, the W5200 cannot receive the data if the size of received
data is larger than the RX memory free size of Socket n . If the prior stated condition
is happened, the W5200 holds on to the connection (pauses), and waits until the RX
memory’s free size is larger than the size of the received data.
{
/* first, get the received size */
len = Sn_RX_RSR; // len is received size
/* calculate offset address */
src_mask = Sn_RX_RD&gSn_RX_MASK; // src_mask is offset address
/* calculate start address(physical address) */
src_ptr = gSn_RX_BASE + src_mask; // src_ptr is physical start address
/* if overflow SOCKET RX memory */
If((src_mask + len) > (gSn_RX_MASK + 1))
{
/* copy upper_size bytes of source_ptr to destination_address */
upper_size = (gSn_RX_MASK + 1) – src_mask;
memcpy(src_ptr, dst_ptr, upper_size);