
单片机寄存器.docx
11页端口(SOCKET)寄存器1)Socket n 的模式寄存器 Sn_MR [R/W] [0x4000+0x0n00] [0x00]该寄存器用于设置每个端口(SOCKET)的功能选项和协议类型各位定义如下:B7B6B5B4B3B2B1B0MULT1MFND/MCReservedP3P2P1P0B7(MULTI):多播方式控制位,只有在UDP模式下有效(P3〜P0: 0010) 0:禁止多播;1:允许多播为了使用多播,在打开SOCKET之前,应将多播分组的IP地址写到SOCKET n的目的 IP寄存器,将多播分组的端口号写到SOCKET n的目的端口号寄存器B6 (MF): MAC地址过滤控制位,只用于MACRAW (P3〜P0: 0100)模式0:禁止MAC地址过滤;1:允许MAC地址过滤当该位置‘1'时, W5200 只接收属于自己的数据包和广播的数据包;当该位为‘0 ' 时,W5200接收以太网上所有的数据包当使用混合TCP/IP协议栈时,建议将该位置‘1' 以免主机过渡接收数据包B5 (ND/MC):使用无延迟的应答(ACK)控制位0:禁止无延迟ACK选项;1:允许无延迟ACK选项。
只有在TCP模式(P3~P0: 0001)下有效如果该位设置为'1'在收到对端的数据包 后马上响应一个ACK数据包如果该位清'0' ACK将根据内部时间溢出机制进行响应在MULTI置'1'且使用UDP模式(P3~P0: 0010)时,该位为多播版本号选择控制 位(MC功能)0:使用IGMP版本2; 1:使用IGMP版本1另外,多播也可以在诸如/离开/报告给多播分组等的IGMP信息中发送版本号B4:保留位B3~B0:设置端口的工作模式协议,如表6-9所示表 6-9 端口的工作模式协议设置P3P2P1P0意义0000端口关闭0001TCP0010UDP0011IPRAW注:SOCKET 0可工作在MACRAW模式和PPPoE模式,其设置方法如表6-10所示表6-10 SOCKET 0的工作模式协议设置P3P2P1P0意义0100MACRAW0101PPPoE也就是说,S0_MR_MACRAW 和 S0_MR_PPPoE 只能在 SOCKET0 工作S0_MR_PPPoE 是临时用于与PPPoE服务器的连接和中断,连接建立以后,该端口可以用于其它协议2) Socket n 命令寄存器 Sn_CR [R/W] [0x4001+0x0n00] [0x00]该寄存器用于设置SOCKET n的命令,诸如:打开、关闭、连接、侦听、发送、接收等 动作。
W5200确认该命令以后,Sn_CR寄存器自动清零(0x00)即使Sn_CR清零,指令仍 然在处理中为了验证命令是否执行完成,可以检查Sn_IR寄存器或Sn_SR寄存器该寄存 器不同的取值所代表的含义如表 6-11 所示表 6-11 Socket n 命令寄存器不同取值所代表的含义值符号描述0x01OPEN根据Sn_MR (P3~P0)所选择的协议初始化并打开SOCKET n与Sn_MR对 应的Sn_SR的值如下:Sn_MR_CLOSE (0x00):无效Sn_MR_TCP(0x01): SOCK_INIT (0x13)Sn_MR_UDP(0x02): SOCK_UDP(0x22)Sn_MR_IPRAW(0x03): SOCK_IPRAW(0x32)S0_MR_MACRAW(0x04): SOCK_MACRAW(0x42)S0 MR PPPoE (0x05): SOCK PPPoE (0x5F)0x02LISTEN该命令只有在TCP模式(Sn_MR(P3~P0)=Sn_MR_TCP)下有效在这种 模式下,SOCKET n配置为TCP服务器,等待其它TCP客户端的连接请求(SYN 数据包)。
Sn_SR寄存器从SOCK_INIT状态改变为SOCK_LISTEN状态当客户端的连接请求成功建立,Sn_SR寄存器的状态将从SOCK_LISTEN变 为 SOCK_ESTABLISHED,且 Sn_SR(0)的值置'1'如果连接失败(SYN/ACK 数据包发送失败),Sn_SR (3)置'1'且Sn_SR变为SOCK_CLOSED如果在连接请求过程中TCP客户端的目标端口号不存在,W5200将发送一个 RST数据包,且 Sn SR的状态不变0x04CONNECT该命令只有在TCP模式下有效,且SOCKET n设置为TCP客户端端口向 TCP服务器发出连接请求(SYN数据包)TCP服务器的IP地址和端口号由目的 IP地址寄存器(Sn_DIPR0)和目的端口号寄存器(Sn_DPORT0)确定客户端的连接请求成功建立后,Sn_S将改变为SOCK_ESTABLISHED,且 Sn_IR (0)改变为'1'在下面几种情况下,连接请求失败:•当一个ARP超时异常发生(Sn_IR (s) =1),表明没有能够通过ARP过 程获得目的硬件地址;•没有接收到SYN/ACK数据包,且产生TCP超时异常(Sn_IR (3) =1;•接收到RST数据包而不是SYN/ACK数据包。
在以上这些情况下,Sn SR状态改变为SOCK CLOSED0x08DISCON该命令只有在TCP模式下有效不管是在TCP服务器还是TCP客户端, 该命令做断开连接的处理,有两种方式:主动关闭:发送一个断开连接的请求(FIN数据包)到连接的对端 被动关闭:当收到对端的FIN数据包时,回复一个FIN数据包到对端当收到FIN/ACK数据包时,Sn_SR的状态改变为SOCK_CLOSED如果没 有收到断开连接的请求,将产生TCP超时(Sn_IR (3) =1),且Sn_SR的状态改 变为 SOCK_CLOSED例如:如果用CLOSE命令代替DISCON,Sn_SR的状态将变成CLOSED, 但不会有断开连接的过程(不产生断开连接的请求)如果在通信过程中接收到 RST数据包,Sn SR无条件地改变为SOCK CLOSED0x10CLOSE关闭SOCKETo Sn SR的状态改变为SOCK CLOSED o0x20SENDSEND命令将TX数据存储器中的所有数据都发送出去详细信息请查看SOCKET n的TX剩余空间大小寄存器(Sn_TX_FSR),SOCKET n的TX写指针 寄存器(Sn TX WR) 和 SOCKET n的TX读指针寄存器(Sn TX RD)。
0x21SEND_MAC该命令只有在UDP模式有效其基本操作与SEND相同但SEND操作需 要通过ARP (地址解析协议)过程获得目的硬件物理地址SEND_MAC不需要 通过ARP获得目的硬件物理地址,由用户设置SOCKET n的目的硬件物理地址0x22SEND_KEEP该命令只有在TCP模式下有效通过发送一个字节的数据检查连接的状态 如果没有对端的响应或中断,将产生超时中断0x40RECVRECV命令通过RX读指针寄存器(Sn_RX_RD)处理数据的接收详细信息请 参考服务器模式接收处理:SOCKET n的RX接收数据长度寄存器(Sn_RX_RSR), SOCKET n的RX写指针寄存器(Sn_RX_WR),SOCKET n的RX读指针寄存器(Sn RX RD)o表 6-12 中的命令只用于 SOCKET 0 和 S0_MR(P3~P0 )=S0_MR_PPPoE表 6-12 只用于 SOCKET 0 和 S0_MR ( P3~P0 ) =S0_MR_PPPoE 的命令值符号描述0x23PCON发送PPPoE搜寻数据包,开始ADSL连接0x24PDISCON关闭PPPoE连接0x25PCR在每一个阶段发送REQ信息。
0x26PCN在每一个阶段发送NAK信息0x27PCJ在每一个阶段发送REJECT信息3) Socket n 中断寄存器 Sn _IR [R] [0x4002+0x0n00] [0x00]Sn_IR 寄存器提供 Socket n 的中断类型信息,如建立连接、断开连接、接收数据和超时 当SCOCKET产生中断且Sn_IMR相对应的屏蔽位为 T 时,Sn_IR的中断位将会变成 T为了清除 Sn_IR 位,主机应该相应的位写‘1'当所有 Sn_IR 的位被清零后, IR(n) 将会自动清零各位的定义如下:B7B6B5B4B3B2B1B0PRECVPFAILPNEXTSEND OKRIMEOUTRECVDISCONCONB7 (PRECV): Sn_IR (PRECV)中断只有在“ SOCKET=0”且“S0_MR (P3〜P0) =S0_MR_PPPoE”时有效当接收到一个不支持的选项时,产生PPP接收中断B6( PFAIL): Sn_IR( PFAIL)中断只有在“ SOCKET=0 ”且“ S0_MR( P3~P0) =S0_MR_PPPoE”时有效当PAP认证失败时产生PPP失败中断B5(PNEXT): Sn_IR(PNEXT)中断。
只有在“ SOCKET=0”且“S0_MR(P3~P0) =S0_MR_PPPoE”时有效在ADSL连接过程中,当状态发生改变时产生下一个状态的中断B4 (SEND_OK): Sn_IR (SENDOK)中断当数据包发送完成时产生SEND_OK中断B3 (TIMEOUT): Sn_IR (TIMEOUT)中断当发生 ARP超时或TCP超时时,产生 TIMEOUT 中断B2 (RECV): Sn_IR (RECV)中断当接收到对端的数据时,产生接收数据中断B1 (DISCON): Sn_IR (DISCON)中断当从对端接收到FIN/ACK数据包的FIN时, 产生断开连接中断B0 (CON): Sn_IR (CON)中断当连接建立时产生连接中断4) Socket n 状态寄存器 Sn _SR [R] [0x4003+0x0n00] [0x00]该寄存器提供 Socket n 的状态当使用 Sn_CR 寄存器,或在传输/接收数据包时, Socket 的状态将会更改不同 Socket n 的状态如表 6-13 所示表 6-13 不同 Socket n 的状态值符号描述0x00SOCK_CLOSED这是SOCKET n的资源被释放的状态。
不管以前的状态值是什 么,当执行DISCON或CLOSE命令,或产生ARP超时或TCP超时 时,它的数值都将会更改为SOCK CLOSEDo0x13SOCK_INIT如果Sn_MR设置为TCP,且给Sn_CR写入OPEN命令,状态 寄存器将会改变为SOCK_INIT状态这是建立TCP连接的第一步 这时,可以运行LISTEN命令将端口设置为TCP服务器模式,或运行 CONNECT命令进入TCP客户端模式这是SOCKET n在TCP服务 器模式下等待TCP客户端连接请求的状态0x14SOCK LISTENSOCKET n运行在TCP服务器模式下,等待从TCP客户端的连接请求当执行了 LISTEN命令,状态则改变为SOCK。












