02_W5500网络初始化

目录

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即可,如下图:

 表示已经成功连接网络。

01_W5500简介 <--------上一篇                                                                                                            下一篇--------->03_W5500TCP_Client

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RoPE旋转位置编码浅析

RoPE旋转位置编码浅析 本文介绍了旋转位置编码RoPE在大模型中的广泛应用,包括Llama、Mistral 7B、Baichuan、ChatGLM、Qwen、…等。由于计算资源限制,大模型通常在较小的上下文长度中进行训练,导致在推理超出预训练长度时性能显著下降。为了解决这个问题,涌现了许多基于Ro…

MySQL数据库基础篇

文章目录 前言1.MySQL数据库概述2.SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作 2.4 图形化界面工具2.5 DML2.5.1 添加数据2.5.2 修改数据2.5.3 删除数据 2.6 DQL2.6.1 基本语法2.6.2 基础查询2.6.3 条件查询2.6.4 聚合函数2.6.5 分组查询2.6.6 排序查询…

怎样创建自己的百度百科词条?

对于企业、名人、品牌等&#xff0c;拥有一条详实的百度百科词条更是形象塑造和品牌推广的有效途径。怎样创建自己的百度百科词条&#xff1f;创建百度百科词条并非难事&#xff0c;关键在于态度和执行力。接下来伯乐网络传媒就来给大家分享一下&#xff01; 一、创建百度百科词…

Zabbix自定义监控内容

自定义监控客户端服务器登录的人数 需求&#xff1a;限制登录人数不超过 3 个&#xff0c;超过 3 个就发出报警信息 1.在客户端创建自定义key //明确需要执行的 linux 命令 who | wc -l//创建 zabbix 的监控项配置文件&#xff0c;用于自定义 key vim /etc/zabbix/zabbix_ag…

vue2-省市县三级联动选择框

Json数据&#xff1a;https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/area.json 如何访问本地文件参考&#xff1a;vue-访问本地json文件_vue3读取json文件-CSDN博客 .vue文件&#xff1a; <template><select v-model"mailAddress1" style…

为什么游戏公司不太愿意采用“微服务”架构?

为什么游戏公司可能不太愿意采用微服务架构&#xff1a; 实时性和性能需求&#xff1a; 游戏服务器对实时性能的要求非常高&#xff0c;微服务的网络开销和复杂性可能会影响游戏的实时性&#xff0c;尤其是在需要高速多向通讯的场景。 通信模式的复杂性&#xff1a; 游戏服务器…

【云备份】客户端实现 及 项目整体总结

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝Util.hpp的设计data.hpp的设计Storage —— 持久化存储Initload——数据初始化加载 cloud.hpp的设计GetFileIdentifier——创建文件唯一标识Upload—— 文件上传IsNeedupload —— 客户端文件是否需要上传判断RunMod…

chineseocr项目不使用web推理-docker容器化

整个流程介绍 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架&#xff0c;镜像4G出头。拉取 chineseocr 项目代码。修改代码&#xff0c;不使用web&#xff0c;增加命令行传入图片路径的功能打包成docker镜像。 开始 拉取 ufoym/deepo 镜像 &#xff1a;cpu版本为例 do…

用php上传图片到阿里云oss

如果你想自动创建目录并将文件上传到新的目录下&#xff0c;你可以使用阿里云 OSS 的 createObject 方法来实现。下面是更新后的示例代码&#xff1a; php <?php require_once __DIR__ . /vendor/autoload.php; // 引入 SDKuse OSS\OssClient; use OSS\Core\OssException;…

设计必备网站,每天必看,无需翻墙。

设计师每天需要浏览各类设计互交网站&#xff0c;找素材、找灵感、看教程等等&#xff0c;下面就推荐几个非常好用的设计网站&#xff0c;我本人用了好几年&#xff0c;对广大设计师们一定有帮助&#xff0c;感觉收藏起来吧&#xff01; 1、免费设计素材——菜鸟图库 https://…

Java Websocket实现即时通讯功能入门教程

近年来&#xff0c;即时通讯&#xff08;Instant Messaging&#xff09;已经成为了人们日常生活中不可缺少的一部分。而Java Websocket技术则提供了一种简便高效的方式来实现即时通讯功能。本文将介绍如何使用Java Websocket来实现即时通讯&#xff0c;并提供具体的代码示例。 …

Vue自定义hook函数

hook 本质是一个函数&#xff0c;可以把 setup 函数中使用的 Composition API 进行封装。 hook 类似于 Vue2 中的 mixin 混合。 自定义 hook 的优势&#xff1a;复用代码&#xff0c;让 setup 中的逻辑更加清晰易懂。 自定义hook函数&#xff1a; 1、在 src 目录下创建 hooks…

android 签名文件生成

1.生成keystore文件 keytool -genkey -v -keystore app.keystore -alias app -keyalg RSA -keysize 2048 -validity 36500 -genkey: 生成一个新的秘钥对 -v:显示生成过程 -keystore&#xff1a;指定生成的文件名字 -alias:签名文件别名 -keyalg:指定算法名字 -keysize:指…

【测绘程序设计】——坐标换带与高程投影

测绘工程中经常遇到 “坐标换带” 与 “高程投影” 问题,前者是在改变投影的分带号——即投影的中央子午线,通过 “(x,y)->(B,L)->(x,y)” 进行;而后者则是为减小投影变形(高程投影变短、高斯投影变长,详情可参考博客《测绘综合能力》真题易错本 第(37)条)通过平…

跨境电商与本土文化融合:推动全球商业合作

随着全球经济的日益一体化&#xff0c;跨境电商成为推动全球商业合作的重要力量。在这个数字化时代&#xff0c;跨境电商不仅在商品流通上起到了桥梁作用&#xff0c;更在文化交流方面发挥了积极的作用。本文将深入探讨跨境电商如何与本土文化融合&#xff0c;以及这种融合如何…

GItLab项目导入到HBuilderX中,下载TortoiseGit 安装

1.项目拉取 选择你要下载的项目,选master下完后内部在切换想要分支,一般选http下载,下图我选的是ssh下载 选择导入,git导入 复制上地址 如果提示这个点击确定 找到下图位置安装 2.TortoiseGit 下载安装 TortoiseGit 官网下载地址&#xff1a;Download – TortoiseGit – Wind…

做一个类似东郊到家的上门服务类系统有哪些功能?

上门服务系统是一款便捷的技师接单、上门提供理疗服务的软件。我们拥有优秀的开发团队&#xff0c;为您量身定制解决方案&#xff0c;价格合理&#xff0c;用心服务。 预约上门&#xff1a;该功能是预约上门推拿理疗按摩系统软件小程序APP的核心功能。消费者通过系统预约下单&a…

第8章 电信支撑网

文章目录 8.1 信令网 201 8.1.1 信令与信令网的基本概念 201 8.1.2 No.7信令及信令网 203 8.1.3 我国的信令网 206 8.2 数字同步网 207 8.2.1 数字同步网的基本概念 207 8.2.2 网同步的方式 209 8.2.3 中国数字同步网 210 8.3 电信管理网 212 8.3.1 电信网络管理 21…

待办事项app推荐哪一款?每日待办事项提醒用什么APP

每天的生活中&#xff0c;我们总是充满着各种待办事项&#xff0c;如果不及时处理&#xff0c;就会导致各种问题的出现。在众多的待办事项app中&#xff0c;如何选择一款最适合自己的app呢&#xff1f;所谓待办事项&#xff0c;通常是指尚未着手的事项。在日常生活中&#xff0…

求臻医学胃癌关爱日:美味的高“盐”值杀手

胃癌的发病率具有广泛的地域差异&#xff0c;在东南亚国家尤为高发。韩国是胃癌发病率排名第一的国家&#xff0c;其次为日本&#xff0c;中国紧随其后&#xff0c;由于中国人口基数大&#xff0c;其绝对患胃癌人数为全球第一&#xff0c;每年有100多万新诊断患者&#xff0c;其…