GD32E503Vxx SPI W5500通信

news/2024/10/18 9:19:03/

国产替代和ETH网关开发,用到了GD32E503Vxx和W5500,首先在W5500 Evaluation board V1.0上,也就是基于STM32F103RCT6的评估板上,移植了DHCP,DNS,MQTT等功能,跑起来很顺利。后续移植到GD32E503VET6自己的板卡上,出现了奇怪的问题。上电配置后,dhcp发送的数据抓包根本看不到,所以收到的llen = getSn_RX_RSR(SOCK_DHCP)一直是0,而跳过dhcp,配置个默认的ip,直接跑后面的dns和mqtt,完全没有问题,这个问题折腾了我快一周,仔细查找问题,原来问题真的是让人意想不到。

先贴GD32E503VET6上SPI的配置吧,我是用的SPI1,要使能复用时钟RCU_AF。

 SPI GPIO 初始化:

SPI1初始化:

 

main函数初始化,不执行复位 ,由于跑了Freertos,所以等系统跑起来默认状态后进行硬件复位和初步的配置。

 

配置好spi,上电后可以先写mac和读mac验证SPI通信是否正常。 

初始上电状态的复位和配置:

下面,重头戏来了:

DHCP_Run ()函数 ,发现运行DHCP时发送DISCOVER报文,抓不到包,说明数据没有发送成功,要么发送成功后数据是异常的,wireshark没法正确解析,

仿真慢慢跟吧,看是哪里出的问题,毕竟同样的程序和驱动,在ST上跑的没问题。

最后发现在send_DHCP_DISCOVER()函数出现问题,下面贴代码:

先贴ST的:

乍一看就是个结构体和数组赋值,没啥高级的骚操作啊,仿真就看出问题了,在GD平台上运行时, 在执行pDHCPMSG->OPT[k++] = strlen((char*)host_name)后,惊奇的是数组索引k变成了0,等于后续赋值又是从0开始,把前面的数据覆盖了。这个问题真是奇葩。。。。

然后贴GD改之后的代码:

 红色是修改后的,既然你算不过来把k清零了,那我再定义个变量,在strlen之前备份一下,strlen之后再把备份值还给K。

完美,抓包可以收到报文了:

 同理,在DHCP所需要发送的报文中,还有send_DHCP_REQUEST函数也要改一下,同样的改法,就不贴图和代码了,然后都改好之后,编译下载:

wireshark上抓包的数据有了,再看看程序的串口打印部分:

DHCP和后续功能全部正常运行,完美。

那么这个bug,也是比较让人无语的,话说GD32E503VET6 是基于ARM Cortex-M33 内核,我百度了下,相比于STM32F103 的cortex-M3,是个增强版本,但是不知道这个增强在实际应用中却是属于倒退。。。

这个坑,踩的着实让人无语。。。 ̄□ ̄||

这个bug折腾一周,慢慢分析,属于原创,如需转载,请注明出处,谢谢。


http://www.ppmy.cn/news/287015.html

相关文章

基于stm32之w5500以太网应用

基于stm32之w5500以太网应用 强调一下前半段为基础知识普及(这段还是很重要的。不管用什么工具开发精通协议才是王道),后半段为实战代码干货。 如上图所示,最底下的一层叫做“物理层”,也叫“PHY 层”,最…

W5500初始化过程

第一步硬件复位 1:拉低RST 2:拉高RST 3:读取通用寄存器0x002e地址以确以太网连接完成(如果读到1,为以太网连接完成) 第二步初始化W5500 1:初始化W5500寄存器函数 软复位 向通用寄存器&am…

STM32+W5500实现网络通信

文章目录 1、W5500简介2、UDP调试3、Modbus通讯3.1、代码完善3.2、建立连接 4、总结 1、W5500简介 1、简介: W5500是一款高性价比的以太网芯片,其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用…

STM32开发笔记111:移植W5500驱动程序

文章目录 前言1、电路设置2、设置STM32Cube3、将W5500源代码,拷贝到指定位置4、更改文件包含位置5、在include.h中加入包含文件6、去除Wmissing-braces警告7、去除Wparentheses警告8、加入SPI驱动程序10、增加函数声明11、在main.cpp中定义函数实现12、完善类前言 本文讲解如…

基于stm32f429的uclinux-W5500网络设备内核驱动

之前那篇写w5500驱动只是单纯的应用程序驱动,虽然可以实现一定的目的,但是没有充分利用到linux的内核,在一些应用场合就显得不合时宜,于是就进行w5500网络设备内核驱动的学习,幸运的是w5500网络设备驱动的文件是在4.8版…

w5500网络连接

文章目录 w5500_conf.h 文件内容w5500_conf.c 文件内容w5500.h 文件内容w5500.c 文件内容type.h 文件内容socket.h 文件内容socket.c 文件内容 w5500_conf.h 文件内容 包含一些相关的硬件初始化和用户参数配置。 #ifndef _W5500_CONF_H_ #define _W5500_CONF_H_#include &quo…

浪潮as5300技术方案_浪潮AS5300/5500G2-F 存储

统一全闪存储 (1)SANNAS的统一:在同一套存储系统内可以提供Block和File服务,简化数据中心架构,降低运维成本,灵活应对不同业务需求。 (2)多种协议的统一:支持iSCSI、 FC、 NFS、 CIFS、 HTTP、FTP等多种协议&#xff0…

基于stm32f407下的W5500网卡驱动(下)

使用w5500的目的是领导要求能从下位机通过tcp或者udp的形式把数据发到服务器上面去,进而把数据显示在服务器的网页上和传到手机的app上面显示。 继上文添加好Uclinux的spidev驱动后,spi1的miso、mosi、clk、cs等接口已经能正常输出数据,确保了…