By:liu guo qing
3.3.3 SOCKET数据通信
3.3.3.1
接收数据
检测是否接收到对端发送过来的数据,并做相应处理。 1) 检测是否接收到数据
方法一:检测SOCKETn中断寄存器Sn_IR[2]是否被置为?1?,如果为?1?,则确认为接收到对端发送过来的数据。
方法二:检测OCKETn接收数据的字节长度寄存器(Sn_RX_RSR)是否等于零,如果不等于零,则确认为接收到对端发送过来的数据。
? Sn_RX_RSR寄存器地址:
2) 接收数据处理
步骤一:读取OCKETn接收数据的字节长度寄存器(Sn_RX_RSR),获取当前RX memory中的数据长度。
步骤二:根据步骤一中获取的数据长度,通过SOCKETn RX FIFO寄存器(Sn_RX_FIFOR)获取RX memory中的数据。
? Sn_RX_FIFOR寄存器地址:
步骤三:向SOCKETn命令寄存器(Sn_CR)写入RECV命令:0x40; 3) 是否清楚接收中断
接收数据处理完成后,再次检查OCKETn接收数据的字节长度寄存器(Sn_RX_RSR)是否等于零,如果为零,则清除SOCKETn中断寄存器Sn_IR[2]的中断,否则不清除。 3.3.3.2
发送数据
将数据通过Sn_TX_FIFOR写入到内部TX存储器后,W5300将试着把数据发送到对端。发送数据的大小不能比分配给该SOCKETn 的内部TX存储器空间大。
为了下一次数据的发送,主机必须检查上次SEND 命令是否执行完毕。如果上一次的SEND 命令还没有执行完而又开始下一次的SEND 命令,将可能产生各种各样的错误。数据越大,执行SEND 命令所需要的时间就会越长。所以要想提高发送效率,适当将数据分为合适的大小发送。
1) 在检测到有数据发送请求后,需要获取SOCKETn剩余存储空间寄存器
(Sn_TX_FSR)和SOCKETn中断寄存器(Sn_IR)。 当Sn_IR[0]等于?1?,且Sn_IR[4]等于?1?时(第一次发送数据除外),读取SOCKETn剩余存储空间寄存器(Sn_TX_FSR)中的剩余存储空间,并清除Sn_IR[4]的中断(第一次发送数据除外)。
? Sn_TX_FSR寄存器地址:
2) 通过SOCKETn TX FIFO寄存器(Sn_TX_FIFOR)发送待发数据,发送的数据量
不能超过Sn_TX_FSR中的剩余存储空间。
3) 待发数据写入TX memory后,向SOCKETn命令寄存器(Sn_CR)写入SEND命
令:0x20;
16 / 27
By:liu guo qing
3.3.4 SOCKET关闭
3.3.4.1
断开链接处理
当接收到有对端的断开连接的请求(接收到FIN数据包),或者接收到上层应用的断链请求后,需要做断开链接处理。
1) 检测到SOCKETn中断寄存器(Sn_IR)的Sn_IR[1]等于?1?时,确认为接收到接收
到对端的FIN数据包或者接收到对端的FIN/ACK 数据包,可以进行断开链接处理,并将中断标志清除。
2) 向SOCKETn命令寄存器(Sn_CR)写入DISCON命令,进行断开链接处理。 3.3.4.2
超时
超时可能发生在TCP 数据包传输过程中,如连接请求(SYN数据包)或其响应数据包(SYN/ACK数据包)、数据(DATA数据包)或其响应数据包(DATA/ACK 数据包)、断开连接请求(FIN数据包)或其响应数据包(FIN/ACK 数据包)等等。
如果以上的数据包在RTR和RCR设定的时间内没有发送出去,那么将产生TCP 超时,且Sn_SSR 将改变为SOCK_CLOSED状态。
当检测到SOCKETn中断寄存器(Sn_IR)的Sn_IR[3]等于?1?时,既可以确认为数据通信产生了超时。 3.3.4.3
端口关闭
当接收到上层应用的关闭(复位)请求后,做SOCKET关闭处理。
1) 初始化Sn_IR,即向Sn_IR写入初始值(为中断屏蔽寄存器的初始值)。 2) 向SOCKETn命令寄存器(Sn_CR)写入CLOSE命令,进行端口关闭处理
4 逻辑实现方案
根据上述的流程控制,及实际的应用要求,基于纯逻辑的W5300控制器的实现方案。
4.1 逻辑架构
如下图4.1-1所示,整个实现逻辑可分为4模块:接口控制模块(Interface Control)、网络主控模块(Ethernet Main Control)、初始化配置模块(Initial Config)和端口驱动模块(SOCKETn Driver)。
17 / 27
By:liu guo qing
RSTNW5300W5300INTControl busUserControlUserControlADDRDATAConfigparameterInterface Interface ControlControlFifo_intercaceFifo_intercaceTX_fifoTX_fifoRX_fifoRX_fifoFifo_intercaceFifo_intercaceConfig_fifo_TX_interfacevaild/respConfig_fifo_RX_interfaceInitial Initial ConfigConfigEthernetMainControlSocketn_fifo_TX_interfaceDataDataBufferBuffervaild/resprdemptySocketn_fifo_RX_interfaceDATA_fifo_interface(rx_tx)SOCKETnSOCKETnDriverDriver图4.1-1 逻辑实现架构图
4.2 接口控制模块
接口控制模块,Interface Control 主要完成对控制器读写W5300的操作信号进行时序转
换,以满足W5300的读写时序要求。
4.2.1 读时序实现
4.2.1.1 时序要求
下图4.2.1.1-1为W5300读时序图:
图4.2.1.1-1 W5300读时序图
18 / 27
By:liu guo qing
下表为读时序要求说明:
表4.2.1.1-1 W5300读时序要求 名称 tADDRs tADDRh tCS tCSn tRD tDATAs tDATAh 说明 Address Setup Time after /CS and /RD low Address Hold Time after /CS or /RD high /CS Low Time /CS Next Assert Time /RC Low Time DATA Setup Time after /RD low DATA Hold Time after /RD and /CS high 最小 - - 65 ns 28 ns 65 ns 42 n s - - 最大 7 ns - - - - - 7 ns 2XPLL_CLK tDATAhe DATA Hold Extension Time after /CS high 4.2.1.2 逻辑实现时序
下图4.2.1.2-1为接口控制模块在逻辑中实现读时序(通过100M时钟实现):
图4.2.1.2-1 W5300读时序实现图
4.2.2 写时序实现
4.2.2.1 时序要求
下图4.2.2.1-1为W5300写时序图:
图4.2.2.1-1 W5300写时序图
下表为写时序要求说明:
19 / 27
By:liu guo qing
表4.2.2.1-1 W5300写时序要求 名称 说明 最小 - - 50 ns 28 ns 50 ns 7 ns 14 ns 7 ns 最大 7 ns - - 7ns+7XPLL_CLK tWR - tDATAs - tADDRs Address Setup Time after /CS and /WR low tADDRh Address Hold Time after /CS or /WR high tCS tCSn tWR tDATAs tDATAf tDATAh /CS Low Time /CS Next Assert Time /WR low time DATA Setup Time after /WR low Data Fetch Time Data Hold Time after /WR high 4.2.2.2 逻辑实现时序
下图4.2.2.2-1为接口控制模块在逻辑中实现写时序(通过100M时钟实现):
图4.2.2.2-1 W5300写时序图
4.2.3 实现状态机
接口控制模块的实现状态机如下图:
CMD_rdfifo_judgeCMD_rdfifo_judgetiming_idletiming_idlerd_CMD_fiford_CMD_fifoCMD_wr_rd_outCMD_wr_rd_out 图4.2.3-1 接口控制模块的实现状态机
状态机各状态说明:
1. timing_idle:状态机初始化,复位后后进入的状态,160ns后跳出。
2. CMD_rdfifo_judge:判断需要写入W5300的数据缓存fifo是否有数据,并寄存当前
fifo中的数据量。
3. rd_CMD_fifo:读取数据缓存fifo中的数据,该状态维持时间需要满足?tCSn?的时间
(如果时钟为100M,则该状态需要维持时间必须为30ns)。
20 / 27