单片机寄存器.docx
- 文档编号:17152440
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:26.64KB
单片机寄存器.docx
《单片机寄存器.docx》由会员分享,可在线阅读,更多相关《单片机寄存器.docx(23页珍藏版)》请在冰点文库上搜索。
单片机寄存器
端口(SOCKET)寄存器
1)Socketn的模式寄存器Sn_MR[R/W][0x4000+0x0n00][0x00]
该寄存器用于设置每个端口(SOCKET)的功能选项和协议类型。
各位定义如下:
B7
B6
B5
B4
B3
B2
B1
B0
MULT1
MF
ND/MC
Reserved
P3
P2
P1
P0
B7(MULTI):
多播方式控制位,只有在UDP模式下有效(P3~P0:
0010)。
0:
禁止多播;1:
允许多播。
为了使用多播,在打开SOCKET之前,应将多播分组的IP地址写到SOCKETn的目的IP寄存器,将多播分组的端口号写到SOCKETn的目的端口号寄存器。
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端口的工作模式协议设置
P3
P2
P1
P0
意义
0
0
0
0
端口关闭
0
0
0
1
TCP
0
0
1
0
UDP
0
0
1
1
IPRAW
注:
SOCKET0可工作在MACRAW模式和PPPoE模式,其设置方法如表6-10所示。
表6-10SOCKET0的工作模式协议设置
P3
P2
P1
P0
意义
0
1
0
0
MACRAW
0
1
0
1
PPPoE
也就是说,S0_MR_MACRAW和S0_MR_PPPoE只能在SOCKET0工作。
S0_MR_PPPoE是临时用于与PPPoE服务器的连接和中断,连接建立以后,该端口可以用于其它协议。
2)Socketn命令寄存器Sn_CR[R/W][0x4001+0x0n00][0x00]
该寄存器用于设置SOCKETn的命令,诸如:
打开、关闭、连接、侦听、发送、接收等动作。
W5200确认该命令以后,Sn_CR寄存器自动清零(0x00)。
即使Sn_CR清零,指令仍然在处理中。
为了验证命令是否执行完成,可以检查Sn_IR寄存器或Sn_SR寄存器。
该寄存器不同的取值所代表的含义如表6-11所示。
表6-11Socketn命令寄存器不同取值所代表的含义
值
符号
描述
0x01
OPEN
根据Sn_MR(P3~P0)所选择的协议初始化并打开SOCKETn。
与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)
0x02
LISTEN
该命令只有在TCP模式(Sn_MR(P3~P0)=Sn_MR_TCP)下有效。
在这种模式下,SOCKETn配置为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的状态不变。
0x04
CONNECT
该命令只有在TCP模式下有效,且SOCKETn设置为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_CLOSED。
0x08
DISCON
该命令只有在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_CLOSED。
0x10
CLOSE
关闭SOCKET。
Sn_SR的状态改变为SOCK_CLOSED。
0x20
SEND
SEND命令将TX数据存储器中的所有数据都发送出去。
详细信息请查看SOCKETn的TX剩余空间大小寄存器(Sn_TX_FSR),SOCKETn的TX写指针寄存器(Sn_TX_WR)和SOCKETn的TX读指针寄存器(Sn_TX_RD)。
0x21
SEND_MAC
该命令只有在UDP模式有效。
其基本操作与SEND相同。
但SEND操作需要通过ARP(地址解析协议)过程获得目的硬件物理地址。
SEND_MAC不需要通过ARP获得目的硬件物理地址,由用户设置SOCKETn的目的硬件物理地址
0x22
SEND_KEEP
该命令只有在TCP模式下有效。
通过发送一个字节的数据检查连接的状态。
如果没有对端的响应或中断,将产生超时中断。
0x40
RECV
RECV命令通过RX读指针寄存器(Sn_RX_RD)处理数据的接收。
详细信息请参考服务器模式接收处理:
SOCKETn的RX接收数据长度寄存器(Sn_RX_RSR),SOCKETn的RX写指针寄存器(Sn_RX_WR),SOCKETn的RX读指针寄存器(Sn_RX_RD)。
表6-12中的命令只用于SOCKET0和S0_MR(P3~P0)=S0_MR_PPPoE。
表6-12只用于SOCKET0和S0_MR(P3~P0)=S0_MR_PPPoE的命令
值
符号
描述
0x23
PCON
发送PPPoE搜寻数据包,开始ADSL连接。
0x24
PDISCON
关闭PPPoE连接。
0x25
PCR
在每一个阶段发送REQ信息。
0x26
PCN
在每一个阶段发送NAK信息。
0x27
PCJ
在每一个阶段发送REJECT信息。
3)Socketn中断寄存器Sn_IR[R][0x4002+0x0n00][0x00]
Sn_IR寄存器提供Socketn的中断类型信息,如建立连接、断开连接、接收数据和超时。
当SCOCKET产生中断且Sn_IMR相对应的屏蔽位为‘1’时,Sn_IR的中断位将会变成‘1’。
为了清除Sn_IR位,主机应该相应的位写‘1’。
当所有Sn_IR的位被清零后,IR(n)将会自动清零。
各位的定义如下:
B7
B6
B5
B4
B3
B2
B1
B0
PRECV
PFAIL
PNEXT
SEND_OK
RIMEOUT
RECV
DISCON
CON
B7(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)Socketn状态寄存器Sn_SR[R][0x4003+0x0n00][0x00]
该寄存器提供Socketn的状态。
当使用Sn_CR寄存器,或在传输/接收数据包时,Socket的状态将会更改。
不同Socketn的状态如表6-13所示。
表6-13不同Socketn的状态
值
符号
描述
0x00
SOCK_CLOSED
这是SOCKETn的资源被释放的状态。
不管以前的状态值是什么,当执行DISCON或CLOSE命令,或产生ARP超时或TCP超时时,它的数值都将会更改为SOCK_CLOSED。
0x13
SOCK_INIT
如果Sn_MR设置为TCP,且给Sn_CR写入OPEN命令,状态寄存器将会改变为SOCK_INIT状态。
这是建立TCP连接的第一步。
这时,可以运行LISTEN命令将端口设置为TCP服务器模式,或运行CONNECT命令进入TCP客户端模式。
这是SOCKETn在TCP服务器模式下等待TCP客户端连接请求的状态。
0x14
SOCK_LISTEN
SOCKETn运行在TCP服务器模式下,等待从TCP客户端的连接请求。
当执行了LISTEN命令,状态则改变为SOCK_LISTEN。
成功建立连接后,SOCKETn的状态将从SOCK_LISTEN改变为SOCK_ESTABLISHED。
但是,如果连接失败,将产生TCP超时(Sn_IR(TIME_OUT)=1),且状态将转换为SOCK_CLOSED。
0x17
SOCK_ESTABLISHED
它指示TCP的连接成功建立。
在SOCK_LISTEN状态下,当来自TCP客户端的SYN数据包成功处理,或者是成功执行CONNECTS命令,它的状态都将会转变成SOCK_ESTABLISHED。
在该状态下可以进行数据传送,也就是说,可以使用SEND或RECV命令。
0x1C
SOCK_CLOSE_WAIT
这是当端口收到来自对端的断开连接请求的一个状态,TCP连接是半关闭的,它仍然可以传送数据。
所以,如想完成整个TCP的断开连接,必须执行DISCON命令。
没有经过断开连接的过程而关闭SOCKETn时,应当执行CLOSE命令。
0x22
SOCK_UDP
这是打开SOCKETn并设置为UDP模式的一个状态。
当Sn_MR(P3~P0)设置为Sn_MR_UDP,且执行了OPEN命令时,端口的状态改变为SOCK_UDP。
不同于TCP模式,在UDP模式下,不需要进行连接就可以进行数据传送。
0x32
SOCK_IPRAW
端口工作在IPRAW模式下。
当Sn_MR(P3~P0)置Sn_MR_IPRAW且执行OPEN命令时,端口的状态将改变为SOCK_IPRAW。
与UDP模式相似,IP数据包可以在无连接的情况下传送。
0x42
SOCK_MACRAW
如果S0_CR=OPEN且S0_MR(P3~P0)=S0_MR_MACRAW,端口的状态将改变为SOCK_MACRAW。
MACRAW数据包(以太网帧)的传送与UDP模式相似。
0x5F
SOCK_PPPOE
这是SOCKET0以PPPoE模式打开的一种状态。
如果S0_CR=OPEN,且S0_MR(P3~P0)=S0_MR_PPPoE,状态将改变为SOCK_PPPoE。
这是一种暂时的状态,用于PPPoE的连接。
状态转换过程中的状态如表6-14所示。
表6-14状态转换过程中的状态
值
符号
描述
0x15
SOCK_SYNSENT
该状态表示一个连接请求(SYN数据包)发送到TCP服务器。
它显示因执行CONNECT命令引起的状态由SOCK_INIT到SOCK_ESTABLISHED的一个转换过程。
在此状态下,如果收到TCP服务器的连接授权(SYN/ACK数据包),它会自动更改为SOCK_ESTBLISHED。
如果在TCP超时(Sn_IR(超时)=1)出现之前,还没有收到TCP服务器发出的SYN/ACK数据包,它便会更改为SOCK_CLOSED。
0x16
SOCK_SYNRECV
此状态表示已收到一个从TCP客户端发出的连接请求(SYN数据包)。
当W5200成功发出连接授权(SYN/ACK数据包)到TCP客户端时,它就会自动更改为SOCK_ESTABLISHED。
如果失败则产生TCP超时,并更改为SOCK_CLOSED。
0x18
SOCK_FIN_WAIT
这些状况表示SOCKETn已关闭。
它们出现在断开连接过程中的“主动关闭”或“被动关闭”时期。
当断开连接过程成功完成,或产生TCP超时(Sn_IR(TIMEOUT)=1)时,它便会改变为SOCK_CLOSED。
0x1A
SOCK_CLOSING
0X1B
SOCK_TIME_WAIT
0X1D
SOCK_LAST_ACK
0x01
SOCK_ARP
此状态表示已经发送ARP请求,以获取目的硬件地址。
在SOCK_UDP或SOCK_IPRAW模式下执行SEND命令,或在SOCK_INIT状态时执行CONNECT命令时,将显现这种状态。
如果成功获取目的硬件地址(收到ARP响应),它便会更改为SOCK_UDP、SOCK_IPRAW或SOCK_SYNSENT。
如果失败,将产生ARP超时。
如发生在UDP或IPRAW模式,它便会返回到以前的状态(SOCK_UDP或SOCK_IPRAW)。
如发生在TCP模式,它便会转到SOCK_CLOSED状态。
在SOCK_UDP或SOCK_IPRAW模式下,当先前Sn_DIPR和当前的Sn_DIPR的值不同时,便会启动ARP过程。
如果先前的和当前的Sn_DIPR值相同,将不回启动ARP,因为目标硬件的地址已经获得了。
5)Socketn本机端口号寄存器Sn_PORT[R/W][0x4004+0x0n00~0x4005+0x0n00][0x0000]
在TCP和UDP模式下,该寄存器用于设置源端口的端口号,必须在OPEN命令之前设置好该寄存器。
例:
Socket0的端口号=5000(0x1388),配置如下:
0x4004
0x4005
0x13
0x88
6)Socketn目的硬件地址寄存器Sn_DHAR[R/W][0x4006+0x0n00~0x400B+0x0n00][0xFFFFFFFFFFFF]
该寄存器为SOCKETn设置目的硬件地址。
如果SOCKET0用于PPPoE连接,S0_DHAR设置为一个已知的PPPoE服务器的硬件地址。
在UDP或IPRAW模式下使用SEND_MAC命令时,它为Socketn设定目的硬件地址。
在TCP、UDP和IPRAW模式时,Sn_DHAR会根据定从CONNECT或SEND命令中的ARP过程获取的目的硬件地址设定。
当成功执行CONNECT或SEND命令后,主机可以通过Sn_DHAR取得目的硬件地址。
使用W5200的PPPoE过程时,PPPoE服务器的硬件地址不需要进行设置。
然而,即使W5200不需要使用PPPoE过程,仍然需要自己实现MACRAW模式。
如果想要发送或接收PPPoE的数据包,那么必须设置PPPoE服务器硬件地址(从PPPoE程序中取得)、PPPoE服务器的IP地址和PPPsessionID。
此外,MR(PPPoE)也应设置为‘1’。
S0_DHAR在OPEN命令之前设置PPPoE服务器硬件地址。
PPPoE服务器硬件地址是由S0_DHAR执行OPEN命令后,在PDHAR里使用的。
而已经配置的PPPoE信息,即使是在CLOSE命令后,对于内部运作依然是有效的。
例:
Socket0目的硬件地址=08.DC.00.01.02.10,配置如下:
0x4006
0x4007
0x4008
0x4009
0x400A
0x400B
0x08
0xDC
0x00
0x01
0x02
0x0A
7)Socketn目的IP地址寄存器Sn_DIPR[R/W][0x400C+0x0n00~0x400F+0x0n00][0x00000000]
该寄存器设置SOCKETn的目的IP地址。
如果Socket0用于PPPoE模式,那么S0_DIPR会设置为已知的PPPoE服务器的IP地址。
它只有在TCP、UDP、IPRAW或PPPoE模式下才有效,在MACRAW模式下被忽略。
在TCP模式下,当作为TCP客户端的时候,在执行CONNECT命令之前,将该寄存器设置为TCP服务器的IP地址。
而当作为TCP服务器的时候,则将在成功建立连接之后,该寄存器会在内部自动设置为TCP客户端的IP地址。
在UDP或IPRAW模式下,Sn_DIPR会设置为目标IP地址,它会在执行SEND或SEND_MAC命令之前,用作传输UDP或IPRAW数据包。
例:
Socket0的目的IP地址=192.168.0.11,配置如下:
0x400C
0x400D
0x400E
0x400F
192(0xC0)
168(0xA8)
0(0x00)
11(0x0B)
8)Socketn目的端口号寄存器Sn_DPORT[R/W][0x4010+0x0n00~0x4011+0x0n00][0x00]
Socketn的目标端口号在Sn_DPORT设置。
如果Socket0已用于PPPoE模式,那S0_DPORT0会为PPPsessionID设置一个已知的号码。
它只有在TCP、UDP或PPPoE模式下才有效,而在其他模式下会被忽略。
在TCP模式下,当作为TCP客户端时,它在运行CONNECT命令之前侦听TCP服务器的端口号。
在UDP模式下,在执行SEND或SEND_MAC命令之前,在Sn_DPORT中设置目标端口号,用作于传输UDP数据包。
在PPPoE模式,S0_DPORT设置为已知的PPPsessionID。
运行OPEN命令之后,PPPsessionID(由S0_DPORT0设置)在PSIDR里应用。
例:
Socket0目的端口号为=5000(0x1388),配置如下:
0x4010
0x4011
0x13
0x88
9)Socketn最大分片大小寄存器Sn_MSS[R/W][0x4012+0x0n00~0x4013+0x0n00][0x0000]
该寄存器用于TCP的最大分片大小MSS(MaximumSegmentSize)。
当TCP是在被动模式下启动,该寄存器会显示MSS的设置。
它只是支持TCP或UDP模式。
当使用PPPoE(MR(PPPoE)=1)的时候,TCP或UDP模式的最大传输单元MTU将被分配在PPPoE的MTU范围。
各种模式下的分片大小如表6-15所示。
表6-15各种模式下的分片大小
模式
通常(MR(PPPoE)=0)
PPPoE(MR(PPPoE)=1)
默认MTU
范围
默认MTU
范围
TCP
1460
1~1460
1451
1~1452
UDP
1472
1~1472
1464
1~1464
IPRAW
1480
1472
MACRAW
1514
在IPRAW或MACRAW模式下,MTU不在内部处理,但会使用默认的MTU值。
因此,当传输的数据长度大于默认的MTU时,主机应该以手动方式将数据长度划分成默认MTU单位。
在TCP或UDP模式下,如果传输的数据长度大于MTU时,W5200会自动将数据划分成MTU的单位。
在TCP模式下,MTU被称之为MSS。
在主机写入的数值和对端的MSS数值当中,MSS会在TCP的连接过程中选择较小的值。
例:
Socket0的MSS=1460(0x05B4),配置如下:
0x4012
0x4013
0x05
0xB4
10)Socketn的IP协议寄存器Sn_PROTO[R/W][0x4014+0x0n00][0x00]
这是一个单字节的寄存器,用于设置IP层中IP字头中的协议号字段。
它只有在IPRAW模式下有效,在其他模式下会被忽略。
Sn_PROTO在执行OPEN命令之前设置。
当Socketn在IPRAW模式下打开时,会发送和接收在Sn_PROTO中设置的协议号数据。
Sn_PROTO可以在0x00~0xFF的范围内分配,但W5200不支持TCP(0x06)和UDP(0x11)的协议号。
协议号由IANA(Internetassignednumbersauthority)定义,详细信息请参考:
http:
//www.iana.org/assignments/protocol-numbersU
例:
因特网控制信息协议(ICMP)=0x01,因特网分组管理协议(IGMP)=0x02
11)Socketn的IP服务类型寄存器Sn_TOS[R/W][0x4015+0x0n00][0x00]
该寄存器设置IP层的IP头中的服务类型TOS字段。
它必须在执行OPEN命令之前设置。
详细信息请参考:
http:
//www.iana.org/assignments/ip-parametersU
12)Socketn的IP生存时间寄存器Sn_TTL[R/W][0x4016+0x0n00]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 寄存器
![提示](https://static.bingdoc.com/images/bang_tan.gif)