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…

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

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝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…

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

设计师每天需要浏览各类设计互交网站&#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…

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

随着全球经济的日益一体化&#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…

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

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

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

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

大文本限制录入文字后通过输入法鼠标单击还可继续超限额录入问题

textInpEl.on(keyup propertychange, "textarea", function () { var realMaxLength $(this).parent().parent().find(".maxNum").text(); //真实的最大长度 var endFontLen $(this).val().length; if (endFontLen < rea…

基于springboot的滑雪场管理系统源码

&#x1f345; 简介&#xff1a;500精品计算机源码学习&#xff0c;有8个项目关注搏主即可领取。另送简历模板、答辩模板、学习资料、答辩常见问题【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学…

CentOS安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-3线性化Linearization

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-3线性化Linearization 1. 线性系统 Linear System 与 叠加原理 Superposition2. 线性化&#xff1a;Taylor Series3. Summary 1. 线性系统 Linear System 与 叠加原理 Superposition…

智慧物联可视化大屏赋能设备管理和城市运行

在智慧物联的时代&#xff0c;万物互联的网络正在构筑起一个智能化的世界。无论是家居设备、汽车、还是工业设备&#xff0c;都能通过互联网实现智能化管理和控制。随着物联网技术的发展&#xff0c;我们迅速步入了一个千姿百态的智慧时代。智慧物联逐渐渗透进我们的日常生活&a…