高性能以太网芯片W5500 数据手册 V1.0(二)
继续给大家介绍W5500 数据手册。
2.4 固定数据长度模式(FDM)
在外设主机不能控制 SCSn 时,可以使用固定数据长度模式。
此时,SCSn 必须连接到低电平(保持接地)。与此同时,SPI 接口不能与其他 SPI 设备 共享。(如图 5 所示)
在可变数据长度模式(VDM)中,数据段长度右 SCSn 控制。 但是在固定长度模式(FDM)中,数据长度由 SPI 工作模式位的控制段的值控制((OM [1:0])=‘01’/‘10’/‘11’)。
由于除了 SCSn 信号和工作模式位(OM[1:0])设置之外,FDM 模式下 SPI 数据帧与 VD M 模式下的相同,所以此时具体的描述就省略了。
除非特殊情况,一般不提倡使用 FDM 模式。此外,如‘2.4.1 章节’及‘2.4.2 章节’ 所述,我们只能使用 1/2/4 字节 SPI 数据帧。使用其他长度数据帧会导致 W5500 功能问 题。
2.4.1 写访问——FDM 模式
1 字节写访问
图 14 在 FDM 模式下,1 字节写访问 SPI 数据帧
2 字节写访问
图 15 在 FDM 模式下,2 字节写访问 SPI 数据帧
4 字节写访问
图 16 在 FDM 模式下,4 字节写访问 SPI 数据帧
2.4.2 读访问——FDM 模式
1 字节读访问
图 17 在 FDM 模式下,1 字节读访问 SPI 数据帧
2 字节读访问
图 18 在 FDM 模式下,2 字节读访问 SPI 数据帧
4 字节读访问
图 19 在 FDM 模式下,4 字节读访问 SPI 数据帧
3 寄存器和内存构成
W5500 有 1 个通用寄存器,8 个 Socket 寄存器区,以及对应每个 Socket 的收/发缓存区。
每个区域均通过 SPI 数据帧的区域选择位(BSB[4:0])来选取。图 20 显示了区域选择位
(BSB[4:0])选择的区域以及收/发缓存区的可用偏移地址范围。每一个 Socket 的发送 缓存区都在一个 16KB 的物理发送内存中,初始化分配为 2KB。每一个 Socket 的接收缓 存区都在一个 16KB 的物理接收内存中,初始化分配为 2KB。
无论给每个 Socket 分配多大的收/ 发缓存,都必须在 16 位的偏移地址范围内(从
0x0000 到 0xFFFF)。
关于 16KB 收/发内存的构成及访问方式的更多信息,请参考‘3.3 章节’。
图 20 寄存器及内存构成
3.1 通用寄存器区
通用寄存器区配置了 W5500 的基本信息,例如:IP 及 MAC 地址。该区域可以通过 SPI
数据帧的区域选择位(BSB[4:0])的值选定。表 3 描述了该区域寄存器的偏移地址。对 于每个寄存器的详细信息,请参考‘4.1 章节’。
3.2 Socket 寄存器区
W5500 支持 8个 Socket 作为通讯信道。每一个Socket 通过Socket n 寄存器区控制(0≤n≤7)。Socket n 寄存器可以通过 SPI 数据帧中的区域选择寄存器(BSB[4:0])来选定对应的寄存器 n。<表 5>定义 了 Socket n 寄存器区对应的 16 位偏移地址。
关于每个寄存器,详情参考‘4.2 章节’
表格 5 Socket n 寄存器区中的偏移地址(0≤n≤7)
3.3 内存 Memory
W5500 有一个 16KB 的发送内存用于 Socket n 的发送缓存区,以及一个 16KB 的接收内
存用于 Socket n 的接收缓存区。
16KB 的发送内存初始化被分配为每个 Socket 2KB 发送缓存区(2KB X 8 = 16KB)。初 始化分配的 2KB Socket 发送缓存 , 可以通过使用 Socket 发送缓存大小寄存器
(Sn_TXBUF_SIZE)重新分配。
一旦所有的 Socket 发送缓存大小寄存器(Sn_TXBUF_SIZE)配置完成,16KB 的发送内 存就会按照配置分配给每个 Socket 的发送缓存,并按照从 Socket 0 到 7 顺序分配。16KB 物 理内存的地址是可以自增的。但是 , 为了避免数据传输错误 , 需要避免发送缓存大小寄存器
(Sn_TXBUF_SIZE)的和超过 16。
16KB 的读取内存的分派方式与 16KB 的发送内存一样。16KB 的接收内存初始化被分配 为每个 Socket 2KB 接收缓存区(2KB X 8 = 16KB)。初始化分配的 2KB Socket 接收缓存,可 以通过使用 Socket 接收缓存大小寄存器(Sn_XBUF_SIZE)重新分配。
一旦所有的 Socket 发缓存大小寄存器(Sn_TXBUF_SIZE)配置完成,16KB 的发送内存 就会按照配置分配给每个 Socket 的发送缓存,并按照从 Socket 0 到 7 顺序分配。16KB 物理 内存的地址是可以自增的。但是 , 为了避免数据传输错误 , 需要避免发送缓存大小寄存器 ( Sn_TXBUF_SIZE)的和超过 16。
对于 16 字节收 / 发内 存的分 配 , 请参 考‘ 第 4 .2 章节’ Sn_TXBUF_SIZE 和
Sn_RXBUF_SIZE 的相关描述。
16KB 的发送内存中分配了对应 Socket n 的发送缓存区,用于为来自主机传输的数据做 缓存。Socket n 的发送缓存区。Socket n 发送缓存区的 16 位偏移地址支持 64KB 的寻址范 围(从 0x000 到 0xFFFF),关于他的配置请参考‘Socket n 发送写指针寄存器(Sn_TX_WR)’ 以及 Socket n 发送读指针寄存器(Sn_RX_WR)。然而,这 16 位偏移地址会自动转化为指定的
16K B 发送 内存的 物理地 址,如 图 20 所示。 请参考 ‘ 4 .2 章节’ 中,关 于
Sn_TX_WR & Sn_TX_RD 的介绍。
16KB 的接收内存中分配了对应 Socket n 的接收缓存区,用于为来自网络传输的数据做 缓存。Socket n 的接收缓存区。Socket n 接收缓存区的 16 位偏移地址支持 64KB 的寻址范 围(从 0x000 到 0xFFFF),关于他的配置请参考‘Socket n 接受读指针寄存器(Sn_RX_RD)’ 以及 Socket n 接受写指针寄存器(Sn_RX_WR)。然而,这 16 位偏移地址会自动转化为指定的
16K B 接收 内存的 物理地 址,如 图 20 所示。 请参考 ‘ 4 .2 章节’ 中,关 于Sn_RX_RD & Sn_RX_WR 的介绍。
4 寄存器描述
4.1 通用寄存器
MR (模式寄存器- Mode Register) [R/W] [0x0000] [0x00]2
该寄存器用于S/W 复位,ping block模式和PPPoE模式。
表格6 通用寄存器描述
GAR (网关 IP 地址寄存器) [R/W] [0x0001 – 0x0004] [0x00]
该寄存器用来设置默认网关地址。 例) 例如:“192.168.0.1”
SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00]
该寄存器用来设置子网掩码地址.
例) 例如: “255.255.255.0”
SHAR (源 MAC 地址寄存器) [R/W] [0x0009 – 0x000E] [0x00]
该寄存器用来设置源 MAC 地址。 例) 例如:“00.08.DC.01.02.03”
SIPR (源 IP 地址寄存器) [R/W] [0x000F – 0x0012] [0x00]
该寄存器用来设置源 IP 地址。 例)例如:“192.168.0.2”
INTLEVEL (低电平中断定时器寄存器) [R/W] [0x0013 – 0x0014] [0x0000]
该寄存器用于设置中断生效等待的时间(IAWT)。当下一个中断触发,中断引脚将会在 IN TLEVEL 时间后,拉低中断引脚(INTn)。
图 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 才会被 拉高。
表格 7 IR 说明
IMR (中断屏蔽寄存器) [R/W][0x0016][0x00]
中断屏蔽寄存器(IMR)用来屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR)中的 一个位。
如果中断屏蔽位被置“1”时,无论何时 IR 对应的位也置”1”,中断即会产生。换而言之, 当 IMR 中屏蔽位被清“0”。即使对应的 IR 中断位置“1”,也不会产生中断。
表格 8 IMR 说明
SIR (Socket 中断寄存器) [R/W] [0x0017] [0x00]
SIR 指明了 Socket 的中断状态。该寄存器的每一位直到被主机置‘1’前均为‘0’。
如果 Sn_IR 不等于‘0x00’, 那么意味着 SIR 对应的第 n 位为‘1’。INTn 只有在 SIR 为
‘0x00’时才能被拉低。
表格 9 SIR 描述
SIMR (Socket 中断屏蔽寄存器) [R/W] [0x0018] [0x00]
SIMR 寄存器中的每一位都对应 SIR 的相应位。当 SIMR 的一位为‘1’,而 SIR 的对应 位为‘1’时,中断将被触发。换而言之,如果 SIMR 的一位为‘0’,那么即使 SIR 对应 位为’1’,中断将不会被触发。
表格 10 SIMR 描述
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)
0x0019 0x001A
0x0F 0xA0
RCR (重试计数寄存器) [R/W] [0x001B] [0x08]
该寄存器是设置重新传送的次数。当第‘RCR+1’次重传时,超时中断就会置‘1’。
(中断寄存器(Sn_IR)的 ‘中断’位(‘TIMEOUT’ bit)设置为'1')。
例) RCR = 0x0007
0x001B
0x07
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)如下:
在 配 置 了 RTR 和 RCR 期间,发生 TCP 数据包 重 传 超时,W5500 就会发送 TCP
数据包(SYN、FIN、RST、数据包)和等待确认(ACK)。如果没有对方(peer)的 ACK 响 应,就会触发一个临时超时中断且 TCP 数据包(较早前传送的)会重新传送。直到重新 传送'RCR+1'次。即使 TCP 数据包重新传送'RCR+1'次,如果对方(peer)仍然没有的 ACK 回应,就会触发最终超时中断且同一时间 Sn_IR(TIMEOUT)='1'。
例) 当 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
0x001D
0x01
LCP Magic number = 0x01010101
PHAR (PPPoE 模式下目标 MAC 寄存器) ?[R/W] [0x001E-0x0023] [0x0000]
PHAR 需要在 PPPoE 连接过程中写入 PPPoE 服务器所需的 MAC 地址。 例) 例如目标 MAC 地址为 00:08:DC:12:34:56
PSID (PPPoE 模式下会话 ID 寄存器) [R/W] [0x0024-0x0025] [0x0000]
PSID 需要填入 PPPoE 连接过程中需要的 PPPoE 服务器会话 ID。 例) 例如会话 ID 为 0x1234
0x0024 0025
18 (0x12) 52(0x34)
PMRU (PPPoE 模式下最大接收单元) [R/W] [0x0026-0x0027] [0xFFFF]
PMRU 规定了 PPPoE 模式下的最大接收单元。 例) 例如 PPPoE 模式下最大接收单元为 0x1234
0x0026 0027
18 (0x12) 52 (0x34)
UIPR (无法抵达 IP 地址寄存器) [R] [0x0028-0x002B] [0x00000000]
UPORTR (无法抵达端口寄存器) [R] [0x002C-0x002D] [0x0000]
当 W5500 发送数据给一个未开启或不可抵达的端口号时,接收到一个 ICMP 包(目的 地址无法抵达),IR 变为‘1’,UIPR & UPORTR 会分别记录下目的 IP 地址和端口号。
例) 例如“192.168.0.11”
PHYCFGR (W5500 PHY 配置寄存器) [R/W] [0x002E] [0b10111XXX]
PHYCFGR 配置 PHY 的工作模式及 PHY 重启。此外,PHYCFGR 指明了 PHY 的状态, 比如:全/办双工,速度,链接状态。
表格 11 PHYCFGR 描述
VERSIONR (W5500 芯片版本寄存器) [R] [0x0039] [0x04]
W5500 的版本寄存器默认为 0x04.
今天就为大家介绍到这里。明天讲最后一部分。
W5500相关内容:
感谢关注!
更多信息与我们交流:
WIZnet邮箱: wiznetbj@wiznet.co.kr