云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > W5300控制器详细设计及使用说明文档 - 图文

W5300控制器详细设计及使用说明文档 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 7:46:37

By:liu guo qing

命令之前设置。

? Sn_PORTR寄存器地址: 0x20A(0x24A、0x28A) ? Sn_PORTR寄存器配置值: 2) SOCKETn目的端口号寄存器(Sn_DPORTR)用于设置SOCKETn 的目的端口号。

在TCP 客户端模式下运行CONNECT 命令之前,需要将它设置为处于TCP 服务器模式下的侦听端口的端口号。而在TCP 服务器模式,当成功建立连接以后,它被W5300自动配置为TCP 客户端的端口号。

? Sn_DPORTR寄存器地址:0x212(0x252、0x252) ? Sn_DPORTR寄存器配置值:

3.3.2 SOCKET建链

基于TCP模式的SOCKET建链,建链过程中需要配置及查询SOCKETn命令寄存器(Sn_CR)、SOCKETn中断寄存器(Sn_IR)和SOCKETn 状态寄存器(Sn_SSR)。

? SOCKETn命令寄存器地址:0x202(0x242、0x282) ? SOCKETn中断寄存器地址:0x206(0x246、0x286) ? SOCKETn 状态寄存器地址:0x208(0x248、0x288) 下表3.3.2-1为SOCKETn命令寄存器说明:

表3.3.2-1 SOCKETn命令寄存器

值 0x01 0x02 命令 OPEN 侦听 LISTEN 说明 打开端口 它根据Sn_MR(P3~P0)所定义的协议类型初始化端口并打开端口 只有在TCP 模式下有效(Sn_MR(P3:P0)=Sn_MR _TCP) 它将SOCKETn 设置为TCP 服务器模式。 它将改变Sn_SSR 寄存器的SOCK_INIT为SOCK_LISTEN,以等待其它TCP 客户端的连接请求(SYN数据包) 当Sn_SSR 为SOCK_LISTEN 且成功处理了其它TCP 客户端的连接请求时,Sn_IR(0)将置?1 ?,而Sn_SSR 变为SOCK_ESTABLISHED。如果没有处理连接请求(SYN/ACK 传输失败),TCP 产生超时(Sn_IR(3)=1)且Sn_SSR 变为SOCK_CLOSED 0x04 连接 CONNECT 它将端口设置为TCP 客户端模式 它发送连接请求到由Sn_DIPR和Sn_DPORTR 指定的TCP 服务器。 当连接请求被成功处理(收到SYN/ACK数据包),Sn_IR(0) 置?1?,且Sn_SSR的状态变为SOCK_ESTABLISHED 。 如果连接失败,可能有三种情况 1. ARP 产生超时,因为目标硬件地址无法获得 2. 没有收到SYN/ACK数据包而产生超时(Sn_IR(3)=1) 3. 收到RST 数据包而不是SYN/ACK数据包 以上三种情况Sn_SSR 都将变为SOCK_CLOSED状态 0x08 断开连接 不论是TCP 服务器还是客户端,它都将执行断开连接的处理。 DISCON 1. 主动关闭:它发送断开连接的请求(FIN 数据包)到连接的对端 2. 被动关闭:当收到对端的断开连接请求(FIN 数据包)时,它发送FIN数据包。 如果断开连接成功( 收到对端的FIN/ACK 数据包) ,Sn_SSR 的状态将变为SOCK_CLOSED。 13 / 27

By:liu guo qing

如果断开连接失败,产生TCP 超时(Sn_IR(3)=1) 且Sn_SSR 的状态变为 SOCK_CLOSED。 另外,如果直接使用CLOSE命令而不是DISCON 命令,只有Sn_SSR 的状态变为SOCK_CLOSED,不产生断开连接的处理(断开连接的请求)。如果在通信过程中收到对端发送来的RST 数据包,Sn_SSR 无条件变为SOCK_CLOSED状态。 0x10 0x20 端口关闭 关闭端口,Sn_SSR 的状态变为SOCK_CLOSED。 CLOSE 发送数据 启动数据发送,发送的字节长度由Sn_TX_WRSR确定。 SEND 当发送过程结束,Sn_IR(SENDOK)将置1,主机检测到Sn_IR(SENDOK)=1 后,可以进行下一次的传输。 如果通过SEND 命令数据包成功传输到对端(当收到对端的DATA/ACK数据包),Sn_TX_FSR根据传输的数据长度自动增加。如果没有传输成功(没有收到DATA/ACK 的数据包),将产生超时(Sn_IR(3)=1),且Sn_SSR 进入SOCK_CLOSED状态。 另外,主机在使用SEND 命令发送数据之前,首先通过Sn_TX_FIFOR寄存器将数据写入到TX存储器,然后写入要发送数据的字节数到Sn_TX_WRSR。 0x40 接收数据 它表示主机接收到SOCKETn 的数据 在使用RECV 命令前,主机需要RECV 通过Sn_RX_FIFOR 寄存器从RX存储器读取接收的数据。

下表3.3.2-2为SOCKETn状态寄存器中与TCP模式相关的说明:

表3.3.2-2 SOCKETn状态寄存器

值 0x00 符号 SOCK_CLOSED SOCKETn 端口资源释放状态 说明 当执行DISCON 或CLOSE命令,或产生ARP、TCP 超时,不管以前是什么状态,此时它都变为SOCK_CLOSED状态 0x13 SOCK_INIT SOCKETn 以TCP 模式打开时的状态 当Sn_MR(P3~P0)为Sn_MR_TCP 且执行OPEN 命令时,它变为SOCK_INIT状态。它是建立TCP 连接的第一步。 这时可以使用LISTEN命令设置TCP 服务器模式,或CONNECT 命令设置TCP客户端模式 0x14 SOCK_LISTEN 它是SOCKETn 在TCP 服务器状态 等待TCP 客户端的连接请求(SYN 数据包)当运行LISTEN命令时,它改变为SOCK_LISTEN 状态。 当成功处理了TCP 客户端的连接请求(SYN 数据包) ,SOCK_LISTEN 变为SOCK_ESTABLISHED。如果失败,将产生超时中断(Sn_IR(TIMEOUT)= 1) ,且状态改变为SOCK_CLOSED 0x17 SOCK_ESTABLISHED 它是TCP 建立连接的状态 在SOCK_LISTEN 状态,收到TCP 客户端SYN数据包并成功处理,它将变成SOCK_ESTABLISHED,或CONNECT命令成功运行。在这种状态,可以进行数据传输,即可以运行SEND 或RECV 命令。 0x1C SOCK_CLOSE_WAIT 该状态是收到对端断开连接请求(FIN 数据包) 由于TCP 连接处于半关闭状态,但可以进行数据传输。为了彻底断开TCP 连接,必须执行DISCON 命令。如果关闭SOCKEn而没有断开连 14 / 27

By:liu guo qing

接的处理,可以只运行CLOSE命令 0x15 SOCK_SYNSENT 该状态表示连接请求(SYN 数据包)发送到TCP 服务器 该状态显示CONNECT 命令从SOCK_INIT到SOCK_ESTABLISHED的状态改变过程 在这种状态,如果收到TCP服务器允许连接信息(SYN/ACK 数据包) ,状态自动转换为SOCK_ESTABLISHED 。如果在产生TCP 超时 (Sn_IR(TIMEOUT)=1)之前没有收到TCP 服务器的SYN/ACK数据包,那么它自动转变为SOCK_CLOSED 0x16 SOCK_SYNRECV 该状态表示收到TCP 客户端的连接请求(SYN 数据包) 当W5300向TCP 客户端发出允许连接(SYN/ACK 数据包)信息后,它自动变换为SOCK_ESTABLISHED。如果失败,将产生超时 (Sn_IR(TIMEOUT)=1),且改变为SOCK_CLOSED 0x18 0X1B 0X1D SOCK_FIN_WAIT SOCK_TIME _WAIT SOCK_LAST_ACK SOCKETn 被关闭的状态 当SOCKET完成主动关闭或被动关闭的断开连接处理时出现这种状态。当成断开连接处理或TCP 超时(Sn_IR (TIMEOUT)=1),它的状态将改变为SOCK_CLOSED 3.3.2.1 SOCKET打开

运行OPEN命令将所操作的SOCKET打开。

1) 打开设置

向SOCKETn命令寄存器(Sn_CR)写入OPEN命令:0x01; 2) 打开状态查询

读取SOCKETn 状态寄存器(Sn_SSR),如果寄存器值为0x13(SOCK_LISTEN), SOCKET即处于打开状态。 3.3.2.2

SOCKET侦听

运行LISTEN命令将W5300设置为TCP 服务器模式。 1) 侦听设置

向SOCKETn命令寄存器(Sn_CR)写入LISTEN命令:0x02; 2) 侦听状态查询

读取SOCKETn 状态寄存器(Sn_SSR),如果寄存器值为0x14(SOCK_LISTEN),SOCKET即处于侦听状态。 3.3.2.3

SOCKET链接

运行CONNECT命令将W5300设置为TCP 服务器模式。 1) 链接设置

向SOCKETn命令寄存器(Sn_CR)写入CONNECT命令:0x03; 2) 链接状态查询

读取SOCKETn 状态寄存器(Sn_SSR),如果寄存器值为

0x17(SOCK_ESTABLISHED),或者检测到SOCKETn中断寄存器Sn_IR[0]被置为?1?,则SOCKET即处于链接状态。链接成功后,需要将Sn_IR[0]的中断标识清除。

15 / 27

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

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

By:liu guo qing 命令之前设置。 ? Sn_PORTR寄存器地址: 0x20A(0x24A、0x28A) ? Sn_PORTR寄存器配置值: 2) SOCKETn目的端口号寄存器(Sn_DPORTR)用于设置SOCKETn 的目的端口号。在TCP 客户端模式下运行CONNECT 命令之前,需要将它设置为处于TCP 服务器模式下的侦听端口的端口号。而在TCP 服务器模式,当成功建立连接以后,它被W5300自动配置为TCP 客户端的端口号。 ? Sn_DPORTR寄存器地址:0x212(0x252、0x252) ? Sn_DPORTR寄存器配置值: 3.3.2 SOCKET建链 基于TCP模式的SOCKET建链,建链过程中需要配置及查询SOCKETn命令寄存器(Sn_CR)、SOCKETn

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com