02_W5500 Network Initialization
02_W5500 Network Initialization
目录
1.如何与W5500通信?
2.SPI数据帧:
3.W5500寄存器:
通用寄存器:
Socket 寄存器区:
4.代码分析:
5.测试:
1.如何与W5500通信?
我们在W5500介绍中可以看到W5500支持SPI通信协议,如果对SPI通信协议还不太了解,请转SPI协议详解(图文并茂+超详细) - 知乎 (zhihu.com)
2.SPI数据帧:
W5500 的 SPI 数据帧包括了 16 位地址段的偏移地址, 8 位控制段和 N 字节数据段。 如图所示。
8 位控制段可以通过修改区域选择位 (BSB[4:0]) ,读 / 写访问模式位 (RWB) 以及 SPI工作模式位(OM[1:0]) 来重新定义。 区域选择位选择了归属于偏移地址的区域。
3.W5500寄存器:
W5500 有 1 个通用寄存器 , 8 个 Socket 寄存器区 ,以及对应每个 Socket 的收 / 发缓存区。
每个区域均通过 SPI 数据帧的区域选择位( BSB[4:0] )来选取。
通用寄存器:
MR (模式寄存器 - Mode Register)
GAR (网关 IP 地址寄存器 )
SUBR (子网掩码寄存器)
SHAR (源 MAC 地址寄存器 )
SIPR (源 IP 地址寄存器 )
INTLEVEL (低电平中断定时器寄存器)
IR (中断寄存器)
IMR (中断屏蔽寄存器)
SIR (Socket 中断寄存器)
SIMR (Socket 中断屏蔽寄存器)
RTR (重试时间值寄存器)
RCR (重试计数寄存器)
PTIMER (PPP 连接控制协议请求定时寄存器)
PMAGIC (PPP 连接控制协议幻数寄存器)
PHAR (PPPoE 模式下目标 MAC 寄存器 )
PSID (PPPoE 模式下会话 ID 寄存器 )
PMRU (PPPoE 模式下最大接收单元)
UIPR (无法抵达 IP 地址寄存器 )
UPORTR (无法抵达端口寄存器)
PHYCFGR (W5500 PHY 配置寄存器)
VERSIONR (W5500 芯片版本寄存器 )
Socket 寄存器区:
S n _MR (Socket n 模式寄存器 )
S n _CR (Socket n 配置寄存器 )
S n _IR (Socket n 中断寄存器 )
S n _SR (Socket n 状态寄存器 )
S n _PORT (Socket n 源端口寄存器 )
S n _DHAR (Socket n 目的 MAC 地址寄存器 )
S n _DIPR (Socket 目标 IP 地址寄存器 )
S n _DPORT (Socket n 目标端口寄存器 )
S n _MSSR (Socket n-th 最大分段寄存器 )
S n _TOS (Socket IP 服务类型寄存器 )
S n _TTL (Socket IP 生存时间寄存器 )
S n _RXBUF_SIZE (Socket n 接收缓存大小寄存器 - Socket n RX Buffer Size Register)
S n _TXBUF_SIZE (Socket n 发送缓存大小寄存器 )
S n _TX_FSR (Socket n 空闲发送缓存寄存器 )
Sn_TX_RD (Socket n 发送读指针寄存器 )
S n _TX_WR (Socket n 发送写指针寄存器 )
Sn_RX_RSR (Socket n 空闲接收缓存寄存器 )
S n _RX_RD (Socket n 接收读指针寄存器 )
Sn_RX_WR (Socket n 接收写指针寄存器 )
Sn_IMR (Socket n 中断屏蔽寄存器 )
Sn_FRAG (Socket n 分段寄存器 )
Sn_KPALVTR (Socket 在线时间寄存器 )
4.代码分析:
例程:stm32+w5500:源代码获取:W5500EVB参考例程_TCP Server|TCP Client|UDP|HTTP|DHCP
主函数功能:系统时钟、SPI、USART、w5500配置信息初始化
int main(void)
{
/***** MCU时钟初始化 *****/
Systick_Init(72);
/***** GPIO、SPI初始化 *****/
GPIO_Configuration();
WIZ_SPI_Init();
/***** 串口初始化 *****/
USART1_Init();
/***** 硬重启W5500 *****/
Reset_W5500();
/***** W5500的IP信息初始化 *****/
set_default();
set_network();
printf("W5500 Init Complete!\r\n");
printf("Start Ping Test!\r\n");
while(1)
{}
}
我们主要分析set_network()函数:
set_network()函数主要的做的事:配置Mac地址、子网掩码、默认网关、IP地址,进行socket的rx和tx的缓冲区配置等。
void set_network(void)
{
setSHAR(ConfigMsg.mac);/*配置Mac地址*/
setSUBR(ConfigMsg.sub);/*配置子网掩码*/
setGAR(ConfigMsg.gw);/*配置默认网关*/
setSIPR(ConfigMsg.lip);/*配置Ip地址*/
sysinit(txsize, rxsize); /*初始化8个socket*/
setRTR(2000);/*设置溢出时间值*/
setRCR(3);/*设置最大重新发送次数*/
getSIPR (lip);
printf(" IP : %d.%d.%d.%d\r\n", lip[0], lip[1], lip[2], lip[3]);
getSUBR(sub);
printf(" SN : %d.%d.%d.%d\r\n", sub[0], sub[1], sub[2], sub[3]);
getGAR(gw);
printf(" GW : %d.%d.%d.%d\r\n", gw[0], gw[1], gw[2], gw[3]);
}
我们只对setSHAR(ConfigMsg.mac) 这个函数进行分析,其他函数类似,都是通过spi协议向w5500寄存器写入/读出配置信息。
setSHAR函数原型:
void setSHAR(uint8 * addr )/**< a pointer to a 6 -byte array responsible to set the MAC address. */
{
wiz_write_buf(SHAR0, addr, 6);
}
进入wiz_write_buf函数:
函数功能:将buf中的6字节数据依次写入SHAR0-SHAR5中,写入之前先要按照SPI数据帧格式发送寄存器地址以及读写方向
uint16 wiz_write_buf(uint32 addrbsb,uint8* buf,uint16 len) // W5500将通过SPI获取的数据写入相关寄存器,并返回写入的数据长度
{
uint16 idx = 0; // idx定义为正在写入的第几个数
if(len == 0) printf("Unexpected2 length 0\r\n"); // 写入数据为空;len表示写入数据的长度
IINCHIP_CSoff(); // CS=0, SPI数据帧开始
IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16); // 地址段,提供16位偏移地址(0000 0000 0000 0000)
IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8); // 控制段,共8位(0000 0000 高5位BSB位为00000表示通用寄存器)
IINCHIP_SpiSendData( (addrbsb & 0x000000F8) + 4); // 控制段+4(0000 0100 RWB位置1表示写入,OM位为00表示SPI工作模式为VDM)
for(idx = 0; idx < len; idx++) // 数据段,写入数据值
{
IINCHIP_SpiSendData(buf[idx]); // MCU通过SPI发送数据
}
IINCHIP_CSon(); // CS=1, SPI数据帧结束
return len; // 返回写入的数据长度值
}
5.测试:
我们在代码中配置好Mac地址、子网掩码、默认网关、IP地址就接入网络了,就可以使用电脑端的命令行中ping我们的w5500模块。
在测试之前需要检查我们给w5500配置的IP地址是否和我们电脑的以太网接口IP在一个网段内
我配置的w5500的IP等地址如下:
uint8 mac[6] = {0x00, 0x08, 0xdc, 0x11, 0x11, 0x11};
uint8 lip[4] = {192, 168, 10, 5};
uint8 sub[4] = {255, 255, 255, 0};
uint8 gw[4] = {192, 168, 10, 1};
uint8 dns[4] = {8, 8, 8, 8};
电脑以太网IP:
让它们在一个网段内即可。然后ping 192.168.10.5即可,如下图:
表示已经成功连接网络。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_46364710/article/details/134778584