W5500寄存器描述

时间:2024-04-05 18:09:27

寄存器描述 

 

4.1 通用寄存器 

MR (模式寄存器 - Mode Register) [R/W] [0x0000] [0x00]2 2 注脚符号 : 【可读/写】【内存地址】【默认值】 - [Read/Write] [Address] [Reset value] 

该寄存器用于 S/W 复位,ping block模式和PPPoE模式。 

W5500寄存器描述

表格 6 通用寄存器描述 

W5500寄存器描述

W5500寄存器描述

 

GAR (网关IP地址寄存器) [R/W] [0x0001 – 0x0004] [0x00] 

该寄存器用来设置默认网关地址。 

例) 例如:“192.168.0.1” 

W5500寄存器描述

 

SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00] 

该寄存器用来设置子网掩码地址. 

例) 例如: “255.255.255.0” 

W5500寄存器描述

 

SHAR (源MAC地址寄存器) [R/W] [0x0009 – 0x000E] [0x00] 

该寄存器用来设置源MAC地址。 

例) 例如:“00.08.DC.01.02.03” 

W5500寄存器描述

 

SIPR (源IP地址寄存器) [R/W] [0x000F – 0x0012] [0x00] 

该寄存器用来设置源IP地址。 

例)例如:“192.168.0.2” 

W5500寄存器描述

 

INTLEVEL (低电平中断定时器寄存器) [R/W] [0x0013 – 0x0014] [0x0000] 

该寄存器用于设置中断生效等待的时间(IAWT)。当下一个中断触发,中断引脚将会在INTLEVEL时间后,拉低中断引脚(INTn)。 

W5500寄存器描述

图 21 INTLEVEL 时序

 

 A. 当Socket 0的超时中断被触发,在INTn引脚被拉低后,S0_IR[3] & SIR[0]设置为‘1’。

 B. 当Socket 1的连接中断在前一个中断未处理完成之前被触发,则INTn引脚仍然位低,S1_IR[0] & SIR[1]位设置为‘1’。

 C. 如果主机完全是通过清理S0_IR[3]位来完成之前的中断,则INTn引脚拉高,但是S1_IR[0] & SIR[1]仍然为‘1’。 

 D. 即使S1_IR[0] & SIR[1]位被设置为‘1’,但是在INTLEVEL期间,INTn不能被拉低。只有过了INTLEVEL时间,INTn才能被拉低。

 

IR (中断寄存器) [R/W] [0x0015] [0x00] 

中断寄存器(IR)指明了中断的状态。IR的每一位都是‘0’,直到被主机写为‘1’.如果IR不等于‘0x00’,INTn引脚将会被拉低。直到其变为‘0x00’时,INTn才会被拉高。 

W5500寄存器描述

表格 7 IR说明

 

W5500寄存器描述

 

IMR (中断屏蔽寄存器) [R/W][0x0016][0x00] 

中断屏蔽寄存器(IMR)用来屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR)中的一个位。 

 

如果中断屏蔽位被置“1”时,无论何时IR对应的位也置”1”,中断即会产生。换而言之,当IMR中屏蔽位被清“0”。即使对应的IR中断位置“1”,也不会产生中断。 

W5500寄存器描述

表格 8 IMR说明

 

W5500寄存器描述

 

SIR (Socket中断寄存器) [R/W] [0x0017] [0x00] 

SIR指明了Socket的中断状态。该寄存器的每一位直到被主机置‘1’前均为‘0’。如果Sn_IR不等于‘0x00’, 那么意味着SIR对应的第n位为‘1’。INTn只有在SIR为‘0x00’时才能被拉低。 

W5500寄存器描述

表格 9 SIR描述 

W5500寄存器描述

 

SIMR (Socket 中断屏蔽寄存器) [R/W] [0x0018] [0x00] 

 

SIMR寄存器中的每一位都对应SIR的相应位。当SIMR的一位为‘1’,而SIR的对应位为‘1’时,中断将被触发。换而言之,如果SIMR的一位为‘0’,那么即使SIR对应位为’1’,中断将不会被触发。 

W5500寄存器描述

表格 10 SIMR描述 

W5500寄存器描述

 

RTR (重试时间值寄存器) [R/W] [0x0019 – 0x001A] [0x07D0] 

RTR 配置了重传超时的时间值。每一单位数值为100 微秒。初始化时值设为2000(0x07D0),即相当于200 毫秒(100us X 2000)。 

 

在RTR配置的时间内,W5500等待Sn-CR(CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command)传输后,来自对方的回应。如果在RTR时间段内没有回应,W5500进行包重传或触发超时中断。 

例) 当超时周期别设置为400ms时,RTR = (400ms / 1ms) X 10 = 4000(0x0FA0) 

W5500寄存器描述

 

RCR (重试计数寄存器) [R/W] [0x001B] [0x08] 

该寄存器是设置重新传送的次数。当第‘RCR+1’次重传时,超时中断就会置‘1’。(中断寄存器(Sn_IR)的 ‘中断’位(‘TIMEOUT’ bit)设置为'1')。 

例) RCR = 0x0007 

W5500寄存器描述

W5500的超时可以用RTR和RCR来配置。W5500的超时包括地址解析协议(ARP)和TCP重新传送超时。 

 

在ARP的重新传送超时(请参阅 RFC 826 http://www.ietf.org/rfc.html),W5500会自动发 送ARP请求去对方(peer)的IP地址,从而获取MAC地址信息(IP、UDP或TCP用于通信)。至 于等待对方(peer)的ARP 响应方面,如在RTR中设置了重新传送时间时,对方(peer)的ARP没 有响应,超时发生和ARP将会请求重新传送。一直重复此步骤达'RCR+1'次。 如果在ARP重复请求重新传送次数达到'RCR+1'次时,仍然没有得到ARP响应,就会触发最终超时中断,Sn_IR(TIMEOUT)会变为'1'。

 

ARP请求的最终超时值(ARPTO)如下: 

W5500寄存器描述

 

在配置了RTR和RCR期间,发生TCP数据包重传超时,W5500就会发送 TCP 数据包(SYN、FIN、RST、数据包)和等待确认(ACK)。如果没有对方(peer)的ACK响应,就会触发一个临时超时中断且TCP数据包(较早前传送的)会重新传送。直到重新传送'RCR+1'次。即使TCP数据包重新传送'RCR+1'次,如果对方(peer)仍然没有的ACK回应,就会触发最终超时中断且同一时间Sn_IR(TIMEOUT)='1'。 

W5500寄存器描述

 

例) 当 RTR = 2000(0x07D0), RCR = 8(0x0008), 

ARPTO = 2000 X 0.1ms X 9 = 1800ms = 1.8s 

TCPTO = (0x07D0+0x0FA0+0x1F40+0x3E80+0x7D00+0xFA00+0xFA00+0xFA00+0xFA00) X 0.1ms 

= (2000 + 4000 + 8000 + 16000 + 32000 + ((8 - 4) X 64000)) X 0.1ms 

= 318000 X 0.1ms = 31.8s 

 

PTIMER (PPP 连接控制协议请求定时寄存器) [R/W] [0x001C] [0x0028] 

LCP Echo请求的期限。PTIMER的值为1时,大约是25毫秒(ms) 。 

 

例) 如果 PTIMER是 200, 

例) 如果 PTIMER 为 200, 

200 * 25(ms) = 5000(ms) = 5 seconds 

 

PMAGIC (PPP 连接控制协议幻数寄存器) [R/W] [0x001D] [0x00] 

该寄存器配置了用于LCP回应请求的4字节幻数(Magic number)。 

例) PMAGIC = 0x01 

W5500寄存器描述

 

LCP Magic number = 0x01010101 

 

PHAR (PPPoE模式下目标MAC寄存器) ß[R/W] [0x001E-0x0023] [0x0000] 

PHAR需要在PPPoE连接过程中写入PPPoE服务器所需的MAC地址。 

 

例) 例如目标MAC地址为00:08:DC:12:34:56 

W5500寄存器描述

 

PSID (PPPoE模式下会话ID寄存器) [R/W] [0x0024-0x0025] [0x0000] 

PSID需要填入PPPoE连接过程中需要的PPPoE服务器会话ID。 

例) 例如会话ID为0x1234 

W5500寄存器描述

 

PMRU (PPPoE模式下最大接收单元) [R/W] [0x0026-0x0027] [0xFFFF] 

PMRU规定了PPPoE模式下的最大接收单元。 

例) 例如PPPoE模式下最大接收单元为0x1234 

 

W5500寄存器描述

 

UIPR (无法抵达IP地址寄存器) [R] [0x0028-0x002B] [0x00000000] 

UPORTR (无法抵达端口寄存器) [R] [0x002C-0x002D] [0x0000] 

 

当W5500发送数据给一个未开启或不可抵达的端口号时,接收到一个ICMP包(目的地址无法抵达),IR变为‘1’,UIPR & UPORTR会分别记录下目的IP地址和端口号。 

例) 例如“192.168.0.11” 

W5500寄存器描述

 

例) 例如“0x1234” 

W5500寄存器描述

 

PHYCFGR (W5500 PHY配置寄存器) [R/W] [0x002E] [0b10111XXX] 

PHYCFGR配置PHY的工作模式及PHY重启。此外,PHYCFGR指明了PHY的状态,比如:全/办双工,速度,链接状态。 

 

表格 11 PHYCFGR 描述 

W5500寄存器描述

W5500寄存器描述

VERSIONR (W5500 芯片版本寄存器) [R] [0x0039] [0x04] 

W5500的版本寄存器默认为0x04. 

4.2 Socket端口寄存器 

Sn3_MR (Socket n模式寄存器) [R/W] [0x0000] [0x00] 

 

该寄存器用于配置所有SOCKET的选项或协议类型 

W5500寄存器描述

表格 12 Sn_MR描述 

W5500寄存器描述

3n 是Socket 编号(0,1,2,3,4,5,6,7).n 设置了SNUM[2:0]控制位集 

n is Socket number (0, 1, 2, 3, 4, 5, 6, 7). n is set ‘SNUM[2:0]’ in Control Bits sets. 

 

W5500寄存器描述

 

Sn_CR (Socket n 配置寄存器) [R/W] [0x0001] [0x00] 

该寄存器用于设置Socket n的配置命令如OPEN、CLOSE、CONNECT、LISTEN、END和RECEIVE。经W5500识别这一命令后,Sn_CR寄存器会自动清零为 0x00。尽管 Sn_CR被清零为 0x00,但命令仍在处理中。为了验证该命令是否完成,请检查Sn_IR或Sn_SR寄存器。 

 

表格 13 Sn_CR 描述 

W5500寄存器描述

W5500寄存器描述

 

Sn_IR (Socket n 中断寄存器) [R] [0x0002] [0x00] 

Sn_IR寄存器用于提供给Socket n中断类型信息,如建立(Establishment)、终止(Termination)、接收数据(Receiving data)和超时(Timeout)。当触发一个中断即Sn_IMR的对应位是'1'的时候,Sn_IR的对应位也将会变成‘1’。 

 

如果想把Sn_IR位清零的话,主机应该将该位置‘1’。 

W5500寄存器描述

表格 14 Sn_IR 描述 

 

W5500寄存器描述

 

Sn_SR (Socket n 状态寄存器) [R] [0x0003] [0x00] 

Sn_SR指示了Socket n的状态,并根据Sn_CR或者一些TCP模式下的特殊控制包,如SYN,FIN包而改变。 

 

表格 15 Sn_SR 状态描述 

W5500寄存器描述

 

下表显示了Socket n状态改变时的临时状态。 

 

表格 16 Sn_SR 临时状态描述 

W5500寄存器描述

 

Sn_PORT (Socket n 源端口寄存器) [R/W] [0x0004-0x0005] [0x0000] 

该寄存器配置了Socket n的源端口号。当Socket n工作在TCP或UDP模式下,该寄存器生效。注意:必须在OPEN命令生效前,完成对该寄存器的设置。 

 

例) 如SOCKET 0 的端口=5000(0x1388),配置应如下, 

W5500寄存器描述

Sn_DHAR (Socket n 目的MAC地址寄存器) [R/W] [0x0006-0x000B] [0xFFFFFFFFFFFF] 

 

Sn_DHAR寄存器指示的为:UDP模式下,使用Send_MAC配置命令,配置Socket n的目标主机MAC地址;或者CONNECT/SEND配置命令,ARP过程获取到的MAC地址。 

 

例) 如Socket 0的目标MAC地址 = 08.DC.00.01.02.10,配置应如下, 

W5500寄存器描述

 

Sn_DIPR (Socket 目标IP地址寄存器) [R/W] [0x000C-0x000F] [0x00000000] 

Sn_DIPR配置或指示的为Socket n的目标主机IP地址,在TCP/UDP模式下生效。 

 

在TCP客户端模式下,在CONNECT配置命令前,该寄存器设置了TCP服务器的IP地址。 

 

在TCP服务器模式下,他显示了在成功建立连接后,TCP客户端的IP地址; 

 

在UDP模式下,他配置了对方主机的IP地址以供SEND或SEND_MAC配置命令后接收UDP包。

 

例) 如Socket 0的目标IP地址= 192.168.0.11, 配置应如下, 

W5500寄存器描述

 

Sn_DPORT (Socket n目标端口寄存器) [R/W] [0x0010-0x0011] [0x00] 

Sn_DPORT 配置或指示了Socket n的目标主机端口号,在TCP/UDP模式下生效。 

 

在TCP客户端模式下,在CONNET配置命令前,该寄存器配置了TCP Server监听的端口号。

 

在TCP服务器模式下,他显示了在成功建立连接后,TCP客户端的端口号; 

 

在UDP模式下,他配置了对方主机的端口号以供SEND或SEND_MAC配置命令后接收UDP包。 

 

例) 如Socket 0的目标端口号 = 5000(0x1388) ,配置应如下, 

W5500寄存器描述

 

Sn_MSSR (Socket n-th最大分段寄存器) [R/W] [0x0012-0x0013] [0x0000] 

该寄存器配置或显示了Socket n的最大传输单元MTU(Maximum Transfer Unit)。 

 

在TCP/UDP模式下,默认该寄存器设定的最大传输单元生效。 

 

然而,在PPPoE模式下(MR[PPPoE] = ‘1’),该寄存器将取决于PPPoE的最大传输单元。 

 

表格 17 Sn_MSSR描述 

W5500寄存器描述

 

当Socket n处于MACRAW模式时,由于MTU不在内部处理,默认的MTU将会生效,因此,当传输的数据比默认的MTU大时,主机需要手动的将数据划分成默认MTU大小单元进行传输。 

 

当Socket n处于TCP/UDP模式,而传输的数据比MTU大时,数据将会被自动的划分成默认MTU单元大小传输。 

 

在UDP模式下,由于不像TCP模式那样涉及到一些连接过程,所以使用了MTU配置。当不同大小的MTU数据传输给对方是时,可能会收到ICMP包(MTU分片)。这样的话IR(FMTU)置‘1’,对方的信息如MTU大小以及IP地址将分别由FMTUR和UIPR指定。如果IR[MTU] = ‘1’,用户不能发送数据到对方。如果要重新恢复与对方的通讯,可以按照以下操作: 

 1. 通过CLOSED配置命令关闭Socket。 

 2. 设置 Sn_MSS指定FMTUR中的MTU。 

 3. 通过OPEN配置命令打开Socket n。 

 4. 重新与对方通信 

 

例) 如Socket 0的MSS = 1460(0x05B4) , 配置应如下, 

W5500寄存器描述

Sn_TOS (Socket IP服务类型寄存器) [R/W] [0x0015] [0x00] 

该寄存器设置在IP层里IP header的TOS(Type of Service - 服务类型) 字段。它应在执行OPEN命令之前设置。请参考 http://www.iana.org/assignments/ip-parameters. 

 

Sn_TTL (Socket IP生存时间寄存器) [R/W] [0x0016] [0x80] 

该寄存器设置在IP层里IP 头的TTL(Time-To-Live - 生存时间) 字段。它应在执行OPEN命令之前设置。请参考Uhttp://www.iana.org/assignments/ip-parametersU. 

 

Sn_RXBUF_SIZE (Socket n接收缓存大小寄存器 - Socket n RX Buffer Size Register) [R/W] [0x001E] [0x02] 

 

Sn_RXBUF_SIZE配置了Socket n的接收缓存大小。Socket n 接收缓存区大小可以配置为1,2,4,8和16Kbytes。如果配置为其他大小,则W5500不能正常的从对方主机接收数据。 

 

即使Socket n的接收缓存大小初始默认为2Kbytes。用户仍然可以使用Sn_RXBUF_SIZE重新定义。但是所有Socket接收缓存(Sn_RXBUF_SIZE)的总大小不能超过16Kbytes。否则,将会使得接收异常。 

 

当所有的Sn_RXBUF_SIZE配置完成后,就会按照Socket 0 到7 的顺序依次将16Kbytes的接收内存分配给各个Socket作为接收缓存使用。 

不论Socket n的接收缓存配置的大小如何,都可以被16位的偏移地址寻址找到。(寻址范围:0x0000到0xFFFF) 

W5500寄存器描述

 

例) Socket 0 RX Buffer Size = 8KB 

W5500寄存器描述

 

Sn_TXBUF_SIZE (Socket n 发送缓存大小寄存器) [R/W] [0x001F] [0x02] 

Sn_TXBUF_SIZE配置了Socket n的发送缓存大小。Socket n 发送缓存区大小可以配置为1,2,4,8和16Kbytes。如果配置为其他大小,则W5500不能正常给对方主机发送数据。 

 

即使Socket n的发送缓存大小初始默认为2Kbytes。用户仍然可以使用Sn_RXBUF_SIZE重新定义。但是所有Socket发送缓存的总大小不能超过16Kbytes。否则,将会使得发送异常。 

 

当所有的Sn_TXBUF_SIZE配置完成后,就会按照Socket 0 到7 的顺序依次将16Kbytes的发送内存分配给各个Socket作为发送缓存使用。 

 

不论Socket n的接发送存配置的大小如何,都可以被16位的偏移地址寻址找到。(寻址范围:0x0000到0xFFFF) 

W5500寄存器描述

例) Socket 0 TX Buffer Size = 4KB 

W5500寄存器描述

Sn_TX_FSR (Socket n 空闲发送缓存寄存器) [R] [0x0020-0x0021] [0x0800] 

Sn_TX_FSR 显示了Socket n发送缓存的空闲空间大小。该寄存器初始化配置为Sn_TXBUF_SIZE大小。当传输数据比Sn_TX_FSR大时,将不能保存到Socket n的发送缓存中。因为多出来的数据会覆盖之前未传输完成的数据。因此在向Socket n发送缓保存数据之前,需要先检查一下数据大小是否等于或小于其剩余空间,然后再保存数据到发送缓存并通过SEND/SEND_MAC配置命令发送。如果数据比检查到的剩余空间大,需要将数据划分成小于或等于剩余空间的大小之后,再保存数据到Socket n发送缓存。 

 

如果Sn_MR(P[3:0])不是TCP模式(‘0001’),W5500将计算发送写指针(Sn_TX_WR)和Socket n 发送读指针之间的空间,并自动将数据划分成相应大小。 

 

如果Sn_MR(P[3:0])是TCP模式(‘0001’),W5500将计算发送写指针(Sn_TX_WR)与内部ACK指针(指示已经从连接对方接收数据的节点位置)之间的空间。 

 

例) 如2048(0x0800) 在S0_TX_FSR时, 

例) In case of 2048(0x0800) in S0_TX_FSR, 

W5500寄存器描述

 

Sn_TX_RD (Socket n 发送读指针寄存器) [R] [0x0022-0x0023] [0x0000] 

Sn_TX_RD寄存器可以通过OPEN配置命令进行初始化。然而,如果Sn_MR(P[3:0])是TCP模式(‘0001’),该寄存器将会在TCP连接期间,重新进行初始化。 

 

该寄存器初始化之后,会根据SEND配置命令自增。SEND配置命令传输的是Socket n发送缓存中,当前Sn_TX_RD到Sn_TX_WR之间保存的数据。在传输完保存的数据之后,SEND配置命令会使得Sn_TX_RD等于Sn_TX_WR。当Sn_TX_RD增加的值超出最大值0xFFFF(大于0x10000并产生进位),Sn_TX_RD会忽略进位,仅使用低16位的值。 

 

Sn_TX_WR (Socket n 发送写指针寄存器) [R/W] [0x0024-0x0025] [0x0000] 

Sn_TX_WD寄存器可以通过OPEN配置命令进行初始化。然而,如果Sn_MR(P[3:0])是TCP模式(‘0001’),该寄存器将会在TCP连接期间,重新进行初始化。 

 

该寄存器需要读取或更新如下。 

 1. 读取发送缓存中将要保存传输数据的首地址。 

 2. 从Socket n的发送缓存对应的首地址开始,保存需要传输的数据; 

 3. 在保存完传输数据之后,将Sn_TX_WR的值增加到传输数据大小。如果增加后,超过最大值0xFFFF(比0x10000大且产生进位),那么将自动忽略进位,并自动更新为低16位的值。 

 4. 通过使用SEND命令发送保存在Socket n发送缓存中的数据。 

 

Sn_RX_RSR (Socket n 空闲接收缓存寄存器) [R] [0x0026-0x0027] [0x0000] 

W5500 数据手册 版本 1.0 (2013 八月) 57 / 67 

Sn_RX_RSR显示了Socket n接收缓存中已接收和保存的数据大小。 

 

Sn_RX_RSR不会超过n_RXBUF_SIZE大小,且计算的为Socket n接收写指针(Sn_RX_WR)和Socket n接收读指针之间的空间大小。 

 

例) 如2048(0x0800) 在S0_RX_RSR时, 

W5500寄存器描述

 

Sn_RX_RD (Socket n 接收读指针寄存器) [R/W] [0x0028-0x0029] [0x0000] 

Sn_RX_RD寄存器可以通过OPEN配置命令进行初始化。请确保该寄存器按照以下步骤读取并更新: 

 1. 读取保存在接收缓存中数据的首地址; 

 2. 从保存在Socket n接收缓存中数据的首地址开始读取数据; 

 3. 在读取完毕接收数据,将Sn_RX_RD的值更新为所读数据大小。如果增加后的值超过最大值0xFFFF,即超过0x10000并产生进位,将会忽略进位,只取低16位值。 

 4. 在接收到RECV命令后,将更新后的Sn_RX_RD值告知W5500. 

 

例) 如2048(0x0800) 在S0_RX_RD时, 

W5500寄存器描述

 

Sn_RX_WR (Socket n 接收写指针寄存器) [R] [0x002A-0x002B] [0x0000] 

Sn_RX_WR寄存器可以通过OPEN配置命令进行初始化。并且随着数据接收自动增加。 

 

如果Sn_RX_WR的值增长到超过最大值0xFFFF(即超过0x10000并产生进位),那么将自动忽略进位,并自动更新为低16位的值。 

 

例) 如2048(0x0800) 在S0_RX_WR时, 

W5500寄存器描述

 

Sn_IMR (Socket n 中断屏蔽寄存器) [R/W] [0x002C] [0xFF] 

Sn_IMR 负责屏蔽Socket n的中断。每一位都对应了Sn_IR寄存器的相应位。Socket n的中断触发并且Sn_IMR的对应位为‘1’时,Sn_IR的对应位变为‘1’。如果Sn_IMR和Sn_IR的对应位均为‘1’且IR寄存器的相应为‘1’,INTn引脚便会拉低并使主机产生中断。 

 

表格 18 Sn_IMR 描述 

W5500寄存器描述

 

Sn_FRAG (Socket n 分段寄存器) [R/W] [0x002D-0x002E] [0x4000] 

它设置了IP 层中IP 报头的分段字段。 

 

例) Sn_FRAG0 = 0x4000 (不要分段) 

W5500寄存器描述

 

Sn_KPALVTR (Socket 在线时间寄存器) [R/W] [0x002F] [0x00] 

Sn_KPALVTR配置了SOCKET n 的‘KEEP ALIVE(KA)’在线验证心跳包传输时间。他只在TCP模式下生效,在其他模式下将会被忽略。单位时间为5秒。 

 

KA包会在Sn_SR变为SOCK_ESTABLISHED且与对方至少进行过一次收或发的通讯后进行传输。如果‘Sn_KPALVTR > 0’,W5500在一定时间周期会自动传输KA包以检查TCP的连接状态(自动在线验证)。如果‘Sn_KPALVTR = 0’,将不会启动自动在线验证,主机可以通过SEND_KEEP配置命令发送KA包(手动在线验证)。在‘Sn_KPALVTR > 0’时,将会无视手动在线验证。 

 

例)Sn_KPALVTR = 10(会每50秒自动发送一次在线验证包) 

 

W5500寄存器描述