高性能以太网芯片W5500 用户手册 V1.0(二)

Home / 博客 / 高性能以太网芯片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 字节写访问

W5500-29

图 14 在 FDM 模式下,1 字节写访问 SPI 数据帧

2 字节写访问

W5500-30

图 15 在 FDM 模式下,2 字节写访问 SPI 数据帧

 4 字节写访问

W5500-31

图 16 在 FDM 模式下,4 字节写访问 SPI 数据帧

2.4.2     读访问——FDM 模式

 1 字节读访问

W5500-32

图 17 在 FDM 模式下,1 字节读访问 SPI 数据帧

 2 字节读访问

W5500-33

图 18 在 FDM 模式下,2 字节读访问 SPI 数据帧

 4 字节读访问

W5500-34

图 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 章节’。

W5500-35

W5500-36

图 20 寄存器及内存构成

3.1       通用寄存器区

通用寄存器区配置了 W5500 的基本信息,例如:IP 及 MAC 地址。该区域可以通过 SPI

数据帧的区域选择位(BSB[4:0])的值选定。表 3 描述了该区域寄存器的偏移地址。对 于每个寄存器的详细信息,请参考‘4.1 章节’。

W5500-37

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)

W5500-38

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模式。

W5500-39

 

表格6  通用寄存器描述

W5500-40

 

W5500-41

 

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

该寄存器用来设置默认网关地址。 例) 例如:“192.168.0.1”

W5500-42

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

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

例) 例如: “255.255.255.0”

W5500-43

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

该寄存器用来设置源 MAC 地址。 例) 例如:“00.08.DC.01.02.03”

W5500-44

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

该寄存器用来设置源 IP 地址。 例)例如:“192.168.0.2”

W5500-45

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

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

W5500-46

图 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-47

表格 7 IR 说明

W5500-48

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

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

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

W5500-49

表格 8 IMR 说明

W5500-50

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

 SIR 指明了 Socket 的中断状态。该寄存器的每一位直到被主机置‘1’前均为‘0’。

如果 Sn_IR 不等于‘0x00’, 那么意味着 SIR 对应的第 n 位为‘1’。INTn 只有在 SIR 为

‘0x00’时才能被拉低。

W5500-51

表格 9 SIR 描述

W5500-52

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

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

W5500-53

 

表格 10 SIMR 描述

W5500-54

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)如下:

W5500-55

在 配 置 了  RTR  和  RCR  期间,发生 TCP  数据包 重 传 超时,W5500 就会发送  TCP

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

W5500-56

 

) 当 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

W5500-57

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”

W5500-58

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

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

表格 11 PHYCFGR 描述

W5500-59

W5500-60

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

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

今天就为大家介绍到这里。明天讲最后一部分。

W5500相关内容:

高性能以太网芯片W5500 用户手册 V1.0(一)