单片机以太网控制芯片W7100A数据手册(四)
昨天讲解了如何通过异步收发以及看门狗定时器&TCP/IP内核,今天继续给大家介绍TCP/IP内核的内容,以及功能描述。
本文引用地址:https://www.eepw.com.cn/article/201611/322034.htm8.3.2
Sn_MR(SOCKET n模式寄存器)[R/W][0xFE4000 + 0x100n][0x0000]
该寄存器配置SOCKET n的协议或其他选项.
Sn_CR (SOCKET n命令寄存器)[R/W][0xFE4001 + 0x100n][0x00]
该寄存器用于设置SOCKET n的命令,诸如:打开、连接、监听、发送、接收等操作。当W7100A 确认该命令之后, Sn_CR寄存器自动清零。即使Sn_CR清零,指令仍然在处理中。为了验证命令是否执行完成,可以检查Sn_IR寄存器或Sn_SR寄存器。
下面的命令只用于SOCKET 0且S0_MR(P3:P0) = S0_MR_PPPoE。
详细信息请参考W5100应用笔记”How to use ADSL”。
Sn_IR (SOCKET n中断寄存器)[R/W][0xFE4002 + 0x100n][0x00]
Sn_IR寄存器提供SOCKET n的中断类型信息(比如建立连接、中断连接、收到数据、超时等)。当产生一个中断且中断屏蔽器Sn_IMR对应位为’1’,那么Sn_IR的中断位将置’1’。为了清除Sn_IR位,主机需要向该位写入’1’。当Sn_IR所有位都清除,IR(n)将自动清除。这时它将向MCU发出INT5信号(nINT5:TCPIP内核中断)。
Sn_IMR (SOCKET n中断屏蔽寄存器)[R/W][0xFE402C + 0x100n][0xFF]
它配置SOCKET n的中断类型,以指示给主机。端口的中断屏蔽寄存器Sn_IMR与Sn_IR相对应。如果SOCKET产生中断,Sn_IR相对应的位置’1’,如果Sn_IMR与Sn_IR相对应的位都置’1’,IR(n)置’1’。这时如果IMR(n)也置’1’,将产生中断(‘/INT’引脚电平变低)
Sn_SR (SOCKET n状态寄存器)[R][0xFE4003 + 0x100n][0x00]
该寄存器提供SOCKET n的状态。在对Sn_CR寄存器进行操作或数据包的收发过程中,SOCKET n 的状态将发生改变。
下表描述了SOCKET n的不同状态
下面是Sn_SR在改变过程中的临时状态。
Sn_PORT(SOCKET n源端口号)[R/W][(0xFE4004+0x100n)~(0xFE4005+0x100n)] [0x0000]
设置源端口号。
端口号只有SOCKET n工作在TCP、UDP模式下有效,在其它模式下无效。
端口号必须在OPEN命令之前设置。
例:设置SOCKET 0的端口号为5000(0x1388),配置如下:
0xFE4004 | 0xFE4005 |
0x13 | 0x88 |
Sn_DHAR (SOCKET n目的物理地址寄存器)[R/W][(0xFE4006 + 0x100n) – (0xFE400B + 0x100n)][FF.FF.FF.FF.FF.FF]
它设置、或被设置为SOCKET n的目的端物理地址。如果SOCKET 0用于PPPoE模式,S0_DHAR则设置为PPPoE服务器的物理地址,这个物理地址是已经知道的。
在UDP或IPRAW模式使用SEND_MAC命令时,需要将它设置为SOCKET n的目的物理地址。在TCP、UDP、IPRAW模式,使用CONNECT命令或SEND命令时,Sn_DHAR是通过ARP过程获得目的物理地址。在成功运行CONNECT或SEND命令后,主机可以通过Sn_DHAR获得目的物理地址。
当使用W7100A的PPPoE时,不需要设置PPPoE服务器的物理地址。
然而,即使不用W7100A的PPPoE处理,而是使用MACRAW模式,为了传输和接收PPPoE数据包,PPPoE服务器的物理地址(通过PPPoE过程获得)、PPPoE服务器的IP地址、PPP会话的ID值都需要设置,MR(PPPoE)也需要设置为’1’。
S0_DHAR在OPEN命令之前就设置为PPPoE服务器的物理地址。由S0_DAHAR设置的PPPoE服务器的物理地址在OPEN命令之后应用于PDHAR。PPPoE的配置信息属于内部信息,即使在CLOSE命令之后仍然有效。
例:SOCKET 0的目的端的物理地址为:00.08.DC.01.02.10,配置如下:
0xFE4006 | 0xFE4007 | 0xFE4008 | 0xFE4009 | 0xFE400A | 0xFE400B |
0x00 | 0x08 | 0xDC | 0x01 | 0x02 | 0x10 |
Sn_DIPR (SOCKET n目的IP地址寄存器)[R/W][(0xFE400C + 0x100n) – (0xFE400F + 0x100n)][00.00.00.00]
它设置、或被设置为SOCKET n的目的IP地址。如果SOCKET 0用于PPPoE模式,S0_DIPR0将设置为已知的PPPoE服务器的IP地址。
只有在TCP、UDP、IPRAW或PPPoE模式下有效,在MACRAW模式下无效。
当SOCKET工作在TCP客户端时,在运行CONNECT命令之前,它必须设置为TCP服务器的IP地址。而当工作在TCP服务器模式时,当成功建立连接以后,它内部自动设置为TCP客户端的IP地址。
在UDP或IPRAW模式,为了传输UDP或IPRAW数据包,在使用SEND或SEND_MAC命令之前,必须将目的端的IP地址设置到Sn_DIPR中。
在PPPoE模式,S0_DIPR设置为已知的PPPoE服务器的IP地址。
例:SOCKET 0的目的端的IP地址为:192.168.0.11,设置如下:
0xFE400C | 0xFE400D | 0xFE400E | 0xFE400F |
192 (0xC0) | 168 (0xA8) | 0 (0x00) | 11 (0x0B) |
Sn_DPORT (SOCKET n目的端口号寄存器)[R/W][(0xFE4010 + 0x100n) – (0xFE4011 + 0x100n)][0x0000]
SOCKET n的目的端口号由Sn_DPORT设置。如果SOCKET 0工作在PPPoE模式,Sn_DPORT0设置为已知的会话ID。
只有在TCP、UDP和PPPoE模式下有效,其它模式下无效。
在TCP客户端模式时,在运行CONNECT命令之前,必须先将Sn_DPORT设置为TCP服务器的侦听端口。
在UDP模式下,在SEND命令或SEND_MAC命令之前,需要先设置好UDP数据包的目的端口号Sn_DPORT。
在PPPoE模式下,S0_DPORT设置为已知的PPP会话ID。PPP会话ID在OPEN命令之后应用于PSIDR。
例:设置SOCKET 0的目的端口号为5000(0x1388),配置如下:
0xFE4010 | 0xFE4011 |
0x13 | 0x88 |
Sn_MSSR(SOCKET n最大分段长度寄存器)[R/W][(0xFE4012 + 0x100n) – (0xFE4013 + 0x100n)][0x0000]
它设置SOCKET n的最大传输单元(MTU),或指示MTU已经设置。它支持TCP或UDP模式。当使用PPPoE(MR(PPPoE)=1),TCP或UDP的最大传输单元(MTU)是由PPPoE的MTU范围确定的。
在IPRAW和MACRAW模式下,MTU不是由内部处理的,但是使用默认的MTU。因此当传输的数据比默认的MTU大,主机需要手动进行分段使其在默认的MTU范围内。
在SOCKET初始化过程中,复位值是0,但是MSSR会变成用户设置值和默认值之间较小的那个。如果没有用户设置值,MSSR则变成默认值。
在TCP和UDP模式下,如果传输的数据字节数比MTU大,W7100会自动将数据分段在MTU范围内。
在TCP模式,MTU就是我们所知道的MSS。通过选择主机写入的值和对端的MSS,在TCP连接过程中MSS自动选择较小的值。
在UDP模式下,没有TCP的连接过程,只使用主机写入的值。当与不同MTU的对端通信时,W7100可以接收到ICMP(分段的MTU)数据包。当IR(FMTU)=1时,无法实现与对端的UDP通信。因此用户必须关闭SOCKET,将Sn_MSSR设置为FMTU,然后再试着用OPEN命令打开端口进行通信。
Sn_PROTO (SOCKET n协议号寄存器)[R/W][0xFE4014 + 0x100n][0x00]
这是一个1字节的寄存器,用于设置IP层数据包中IP包头的协议号字段。
只有在IPRAW模式下有效,而在其它模式下都无效。Sn_PROTO必须在OPEN命令之前设置。当SOCKET n以IPRAW模式打开时,它发送和接收的是由Sn_PROTO设置的协议号的数据。Sn_PROTO的赋值范围在0x00 ~ 0xFF之间。但W7100不支持TCP(0x06)和UDP(0x11)的协议号。协议号由IANA(互联网编号分配机构)定义。详细内容请参考在线信息:
http://www.iana.org/assignments/protocol-numbers
例:网络控制信息协议(ICMP)的协议号为0x01,网络分组管理协议的协议号为0x02。
Sn_TOS(SOCKET n服务类型(TOS)寄存器)[R/W][0xFE4015 + 0x100n][0x00]
它设置服务类型(TOS),这是IP层数据包中IP包头中的一个字段。必须在OPEN命令之前
进行设置。
请参考:http://www.iana.org/assignments/ip-parameters.
Sn_TTL(SOCKET n生存时间(TTL)寄存器)[R/W][0xFE4016 + 0x100n][0x80]
它设置IP层数据包中IP包头中的生存时间(TTL)字段。必须在OPEN命令之前进行设置。
请参考:http://www.iana.org/assignments/ip-parameters
Sn_RXMEM_SIZE(SOCKET n接收存储器大小寄存器) [R/W][0xFE401E + 0x100n][0x02]
它用于配置每一个SOCKET的RX存储器的大小。每个SOCKET的RX存储器大小可配置为1、2、4、8、16K字节。复位后默认为2K字节。8个SOCKET的Sn_RXMEM_SIZE的总和为16K字节。

评论