W5500深度解析:硬件TCP/IP协议栈、SPI通信与寄存器映射全链路拆解
W5500 以太网模块介绍
W5500 是一款由 WIZnet 出品的芯片,它集成了 TCP/IP 协议栈、10/100M 的 MAC 和 PHY。这款芯片可以在单颗芯片上实现网络连接功能,非常适合嵌入式系统中的网络应用。W5500 芯片通过 SPI 与宿主 MCU 进行通信,具有接口简单、传输速度快的特点。用户可以方便地编写驱动程序来控制 W5500 芯片,实现数据的接收和发送。在实际应用中,W5500 可以用于智能家居设备、物联网网关等需要网络连接的设备中。

W5500 芯片主要特性如下:
- 该芯片支持以下硬连线 TCP/IP 协议:TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE
- 支持同时使用 8 个独立的套接字,内部有 32KB 的内存用于发送/接收缓冲区
- 支持电源关闭模式,可以通过 UDP 实现远程唤醒 LAN 功能
- 支持高速串行外设接口(SPI 模式 0 和 3),支持高达 133 Mbps 的数据传输速度
- 内置了 10BaseT/100BaseTX 以太网 PHY,
- 支持自动协商(全双工和半双工,基于 10 和 100 的),不支持 IP 碎片
- 以 3.3V 操作,具有 5V I/O 信号容差,采用 48 引脚 LQFP 无铅封装(7x7mm,0.5mm 间距)
- 有 LED 输出(全双工/半双工,链路,速度,活动)
1.W5500 芯片的内部结构
W5500 芯片的内部结构图如下:

这里,我们将其内部结构分为如下部分:
- 时钟单元:需要一个 25MHz 的时钟源驱动, 在芯片内部通过一个锁相环(PLL)倍频到 150MHz
- 电源单元:使用 3.3V 供电,可以产生一个 1.2V 的电源输出
- PHY 单元:内部集成了一个物理层的 PHY,用于信号的转换和传输,自动链路检测和电缆类型检测;芯片采用 802.3 以太网链路层 MAC,支持 10/100M 连接的自协商,通过 MII 管理器(MII Manager)控制 PHY 进行链路层的网络通信
- TCP/IP 核:内置了完整的 TCP/IP 协议栈,支持 TCP、UDP、IP、ARP、ICMP 和 IGMP 等协议,并且提供了一套 Socket 接口,最多支持 8 个 Socket;用户只需要关心如何通过 Socket 编程实现 UDP 和 TCP 通信
- 收发缓存单元:包括发送缓冲区和接收缓冲区,用于存储数据包,用户可以通过修改 W5500 的寄存器配置为每个 Socket 分配合适大小的收发缓存
- SPI 接口单元:提供与主控制器的通信接口,支持最高 80MHz 的通信频率,用户通过 SPI 接口访问 W5500 的寄存器, 进而完成对其进行配置和网络通信等任务
2.W5500 的引脚和外围电路
W5500 芯片具有如下引脚单元:

引脚功能如下所示:

简单来说,引脚可以进行如下划分:
- 电源与地
- VCC (3.3V): 提供 3.3V 电源
- GND: 地引脚
- AVDD: 模拟 3.3V 电源
- AGND: 模拟地引脚
- 网络接口引脚
- TXN (1): 差分发送数据负信号
- TXP (2): 差分发送数据正信号
- RXN (5): 差分接收数据负信号
- RXP (6): 差分接收数据正信号
- 复位与时钟
- RSTn (37): 复位信号,低电平有效
- XI/CLKIN (30): 外部 25MHz 晶振输入或外部时钟输入
- XO (31): 外部 25MHz 晶振输出
- SPI 接口引脚
- SCSn (32): SPI 片选信号,低电平有效
- SCLK (33): SPI 时钟信号
- MOSI (35): SPI 主输出从输入信号
- MISO (34): SPI 主输入从输出信号
- INTn (36): 中断输出信号,低电平有效
- 指示灯引脚
- SPDLED (24): 速度指示灯,低电平表示 100Mbps,高电平表示 10Mbps
- LINKLED (25): 链接指示灯,低电平表示链接建立,高电平表示链接未建立
- DUPLED (26): 全双工/半双工指示灯,低电平表示全双工,高电平表示半双工
- ACTLED (27): 活动指示灯,低电平表示有载波侦听,高电平表示无载波侦听
- 其他引脚
- EXRES1 (10): 外部参考电阻引脚,连接 12.4KΩ 电阻用于内部模拟电路偏置
- TOCAP (20): 外部参考电容引脚,连接 4.7uF 电容
- 1V2O (22): 1.2V 稳压输出电压,引脚连接 10nF 电容
- PMODE2 (43), PMODE1 (44), PMODE0 (45): PHY 操作模式选择引脚
- VBG (18): 带隙输出电压,浮空
- RSVD (23, 38, 39, 40, 41, 42): 保留引脚,接地
参考外围电路如下:

可以看到,网络接口通过一个网口变压器连接到了 RJ45 插座上。这里,网口变压器起到了隔离和匹配的作用并且在网络接口上串联了用于抑制电路振荡的阻尼电阻。
我们在使用 W5500 芯片时,需要使用单片机连接 W5500 芯片的以下引脚:

3.主机接口和 SPI 数据帧格式
W5500 以 SPI 从模式与宿主通信,需要 SCSn, SCLK, MOSI, MISO 四根信号线。
在 SPI 中,根据时钟信号 SCLK 的电平和相位的不同,一共有 4 种工作方式。 其中模式 0(CPOL = 0, CPHA = 0)和模式 3(CPOL = 1, CPHA = 1)都是在时钟信号的上升沿采集数据,下降沿准备数据。 W5500 只支持这两种工作模式,而且每次数据传输都是从最高位(MSB)到最低位(LSB)进行传输的。

W5500 支持与宿主之间固定数据长度的通信,也支持可变数据长度的通信方式。具体由通信数据帧中 SPI 数据帧控制段的工作模式 OM 位决定:

- OM[1:0] = '01'/'10'/'11'时,FDM 固定数据长度通信模式:
- 数据传输以固定长度的数据块进行,通常用于数据长度已知且固定的场景,如某些实时控制应用
- 可以直接把 SCSn 接地,宿主的 SPI 端口将被 W5500 独占,不能再用于同其它设备的通信
- OM[1:0] = '00'时,VDM 可变数据长度通信模式:
- 数据传输可以根据需要进行,数据帧的长度可以变化,适用于数据长度不确定或需要动态调整的应用
- 片选信号 SCSn 将被用于标识数据传输的结束信号,在该模式下 SCSn 信号线必须由宿主控制:
- SCSn 信号拉低(高电平到低电平),即代表 W5500 的 SPI 帧开始
- SCSn 信号拉高(低电平到高电平),即代表 W5500 的 SPI 帧结束
W5500 的 SPI 数据帧格式由 16 位的地址段、8 位的控制段和 N 个字节的数据段构成:

其中:
-
Address Phase 地址段:地址段描述了在数据段中进行读写访问的偏移地址。W5500 内部以该段中的 16 位偏移地址为基础,通过地址自增来实现数据的连续读写访问
-
Control Phase 控制段:
控制段由三个部分组成,操作模式(OM)、读/写位(RWB)和块选择位(BSB)- OM(Operation Mode,操作模式):对应控制段的最低两位,用于描述本次通信的长度模式
- 00b:可变长度模式
- 01b:固定长度,数据段长度为 1 字节
- 10b:固定长度,数据段长度为 2 字节
- 11b:固定长度,数据段长度为 4 字节
- 在可变长度模式下, 宿主控制片选信号由高电平变为低电平,标识着一次通信的开始。在 N 字节的数据段传输完毕后,宿主将片选信号置为高电平, 标识着一次通信结束
- 在固定长度的通信方式下,数据段的长度由 OM 中的值进行选择,W5500 检测到数据段传送了指定长度的数据后, 就认为一次通信结束
- 在任何方式下都必须保证通信过程中,片选信号 SCSn 为低
- RWB(Read/Write Bit,读/写位):描述本次通信是读操作还是写操作
- 0:写操作
- 1:读操作
- BSB(Block Select Bits,块选择位):用于选择 W5500 内部的寄存器或存储空间
- 在 W5500 中有一个通用寄存器区块, 用于配置 W5500 的本地 IP 地址、MAC 地址、子网掩码、网关、PHY 等工作方式
- 8 个 Socket 寄存器区块, 用于进行 Socket 编程实现 UDP 或者 TCP 通信
- 每个 Socket 都有一个读缓冲区和一个写缓冲区,用于网络通信
- OM(Operation Mode,操作模式):对应控制段的最低两位,用于描述本次通信的长度模式
-
Data Phase 数据段:数据段就是实际传输的数据。其长度由控制段的 OM 位和片选信号(SCSn)决定,数据的传输方向由控制段的 RWB 位决定
4.寄存器和内存组织
4.1 W5500 寄存器和内存组织概述
W5500 有一个通用寄存器块、八个 socket 套接字寄存器块,以及为每个套接字分配的 TX/RX 缓冲区块:

其中:
- 每个 Socket 的 TX 缓冲区块存在于物理 16KB 的 TX 内存中,初始分配为 2KB;TX 缓冲区的有效地址范围是从 0x0000 到 0xFFFF,即 16 位地址范围
- 每个 Socket 的 RX 缓冲区块也存在于物理 16KB 的 RX 内存中,初始分配为 2KB;RX 缓冲区的有效地址范围同样是从 0x0000 到 0xFFFF,即 16 位地址范围
每个块由 SPI 数据帧的 BSB[4:0](块选择位)选定:
| BSB [4:0] | 含义 |
|---|---|
| 00000 | 选择通用寄存器 |
| 00001 | 选择 Socket 0 寄存器 |
| 00010 | 选择 Socket 0 TX 缓冲区 |
| 00011 | 选择 Socket 0 RX 缓冲区 |
| 00100 | 保留 |
| 00101 | 选择 Socket 1 寄存器 |
| 00110 | 选择 Socket 1 TX 缓冲区 |
| 00111 | 选择 Socket 1 RX 缓冲区 |
| 01000 | 保留 |
| 01001 | 选择 Socket 2 寄存器 |
| 01010 | 选择 Socket 2 TX 缓冲区 |
| 01011 | 选择 Socket 2 RX 缓冲区 |
| 01100 | 保留 |
| 01101 | 选择 Socket 3 寄存器 |
| 01110 | 选择 Socket 3 TX 缓冲区 |
| 01111 | 选择 Socket 3 RX 缓冲区 |
| 10000 | 保留 |
| 10001 | 选择 Socket 4 寄存器 |
| 10010 | 选择 Socket 4 TX 缓冲区 |
| 10011 | 选择 Socket 4 RX 缓冲区 |
| 10100 | 保留 |
| 10101 | 选择 Socket 5 寄存器 |
| 10110 | 选择 Socket 5 TX 缓冲区 |
| 10111 | 选择 Socket 5 RX 缓冲区 |
| 11000 | 保留 |
| 11001 | 选择 Socket 6 寄存器 |
| 11010 | 选择 Socket 6 TX 缓冲区 |
| 11011 | 选择 Socket 6 RX 缓冲区 |
| 11100 | 保留 |
| 11101 | 选择 Socket 7 寄存器 |
| 11110 | 选择 Socket 7 TX 缓冲区 |
| 11111 | 选择 Socket 7 RX 缓冲区 |
4.2 通用寄存器区块
通用寄存器区块, 用于配置 W5500 的本地 IP 地址、MAC 地址、子网掩码、网关、PHY 等工作方式:

各个寄存器含义如下:
- MR (模式寄存器):用于软件重置、Ping 阻止模式和 PPPoE 模式的配置

- GAR (网关地址寄存器):配置设备的网关 IP 地址

- SUBR (子网掩码寄存器):配置设备的子网掩码

- SHAR (源硬件地址寄存器):配置设备的 MAC 地址

- SIPR (源 IP 地址寄存器) :配置设备的 IP 地址

- INTLEVEL (中断低级定时器寄存器) :配置中断低级定时器的时间值

- IR (中断寄存器):显示当前的中断状态

- IMR (中断屏蔽寄存器) :配置中断屏蔽

- SIR (套接字中断寄存器):显示当前的套接字中断状态

- SIMR (套接字中断屏蔽寄存器):配置套接字中断屏蔽

- RTR (重传时间值寄存器):配置重传的时间值

- RCR (重传计数寄存器):配置重传的次数

- PTIMER (PPP 链接控制协议请求定时器寄存器):配置 PPP 发送 LCP 回波请求的时间的定时器

- PMAGIC (PPP 链接控制协议魔术数寄存器):配置 PPP 在 LCP 回声请求中使用的魔术数

- PHAR (PPPoE 模式下的目的硬件地址寄存器):配置 PPPoE 模式下的 PPPoE 服务器目的 MAC 地址

- PSID (PPPoE 模式下的会话 ID 寄存器):配置 PPPoE 会话 ID

- PMRU (PPPoE 模式下的最大接收单元):配置 PPPoE 最大接收单元

- UIPR (不可达 IP 地址寄存器):配置最后一个不可达 IP 地址

- UPORTR (不可达端口寄存器):配置最后一个不可达端口

- PHYCFGR (W5500 PHY 配置寄存器):配置 PHY 操作模式并进行重置

- VERSIONR (W5500 芯片版本寄存器):显示芯片版本号

关于每个寄存器的详细定义和操作方法,可以查看原文档的 4.1 节:
http://www.boccn.com.cn/artupfile/2014-02-11/02014021111343613482.pdf

4.3 Socket 寄存器块
W5500 芯片支持 8 个通信通道,每个通道通过 Socket n 寄存器块进行控制(当 0≤n≤7)。Socket n 寄存器的 n 值可以通过 SPI 帧中的 BSB[4:0]选择。

下面的表格简要讲解了每个 Socket n 寄存器块中寄存器的作用。



关于每个寄存器的详细定义和操作方法,可以查看原文档的 4.2 节:
http://www.boccn.com.cn/artupfile/2014-02-11/02014021111343613482.pdf
4.4 内存组织
W5500 具有 16KB 的 TX 内存和 16KB 的 RX 内存,用于 Socket 的缓冲区。
- TX 内存分配:初始情况下,每个 Socket 的 TX 缓冲区块分配 2KB(2KB × 8 = 16KB),可以通过
Sn_TXBUF_SIZE寄存器重新分配大小,配置完成后,TX 缓冲区按顺序分配内存,所有 Socket 的缓冲区总大小不应超过 16KB,以避免数据传输错误 - RX 内存分配:初始情况下,每个 Socket 的 RX 缓冲区块分配 2KB(2KB × 8 = 16KB),可以通过
Sn_RXBUF_SIZE寄存器重新分配大小,配置完成后,RX 缓冲区按顺序分配内存,所有 Socket 的缓冲区总大小不应超过 16KB,以避免数据接收错误 - 地址映射:
- TX 和 RX 缓冲区使用 16 位偏移地址(0x0000 至 0xFFFF),这些地址映射到 16KB 的物理内存中
Sn_TX_WR和Sn_RX_RD寄存器用于控制这些指针

4.5 VDM 可变数据长度模式读写数据
4.5.1 写数据

其中:
- VDM 模式:
- RWB 信号:设置为 '1',表示执行写操作
- OM[1:0]:在 SPI 帧控制阶段设置为 '00',指示 VDM 模式
- SPI 帧传输过程:
- SCSn 信号:外部主机在传输 SPI 帧之前将 SCSn 信号从高电平拉低(High-to-Low),以选择 W5500 并准备接收数据
- MOSI 信号:主机通过 MOSI 信号将所有数据位传输到 W5500。所有数据位与 SCLK 的下降沿同步
- SCLK 信号:串行时钟信号,用于同步数据传输
- 传输完成:
- 在完成 SPI 帧传输后,主机将 SCSn 信号从低电平拉高(Low-to-High),结束传输过程
- 当 SCSn 信号处于低电平并且数据阶段继续时,支持顺序数据写入
4.5.2 读数据

此时,RWB 信号设置为 '0',表示执行读操作。
SPI 帧传输开始和结束流程与写操作类似,主机通过 MISO 信号接收所有数据位,并通过采样 SCLK 的上升沿进行同步。
4.6 FDM 固定数据长度模式读写数据
当外部主机无法控制 SCSn 信号时,可以使用 FDM 模式。在这种模式下,SCSn 信号应连接到低电平(始终连接到 GND),并且主机无法与其他 SPI 设备共享 SPI 总线。
在 FDM 模式中,数据阶段的长度由 OM[1:0] 值('01'/'10' /'11')控制,可以选择 1 字节、2 字节、4 字节数据传输。
4.6.1 写数据
以单字节和双字节写入为例:

RWB 信号设置为 '1',表示执行写操作;OM 位可控制数据传输字节数。
4.6.2 读数据
以单字节和双字节读取为例:

RWB 信号设置为 '0',表示执行读操作;OM 位可控制数据传输字节数。

W5500 是一款由 WIZnet 出品的芯片,它集成了 TCP/IP 协议栈、10/100M 的 MAC 和 PHY。这款芯片可以在单颗芯片上实现网络连接功能,非常适合嵌入式系统中的网络应用。W5500 芯片通过 SPI 与宿主 MCU 进行通信,具有接口简单、传输速度快的特点。用户可以方便地编写驱动程序来控制 W5500 芯片,实现数据的接收和发送。在实际应用中,W5500 可以用于智能家居设备、物联网网关等需要网络连接的设备中。
浙公网安备 33010602011771号