| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> stm32f429+LAN4720A+lwip 问题记录及解决 -> 正文阅读 |
|
[嵌入式]stm32f429+LAN4720A+lwip 问题记录及解决 |
之前搞了max3232通讯,并在实际测试中稳定使用,故准备将板子升级下进入互联网时代? 环境:stm32cubeIDE+自己做的板子+LAN4720A+lwip1.4.1+野火的例程(标准外设库) 因为用的IDE是stm32cubeIDE ,野火的标准外设库版本是 keil MDK,所以,stmf429_eth 文件中首先要改下伪代码的对齐如下:
然后改了一些代码及结构更符合自己使用的代码风格。 接着就是编译下载进板子,调试了,上来的第一个问题:在MAC DMA配置中,软复位直接卡死在了while循环这。
接着翻stm32f4xx的编程手册,查看对应寄存器说明,但是里面只提了一句,由硬件自动复位完成后自动置位。 这就莫名奇妙了,这只跟主控MCU有关?然后就是百度一下了,网上这问题很多,一搜到处都是,在以下的两个链接中,得到了问题的解决,和对LAN8720A芯片的更加深入了解,主要第二个链接的下方,下载到了LAN8720A的 datasheet http://t.zoukankan.com/huanjun-p-11928051.html 所以万用表,示波器一出,一量,LAN4720A芯片居然都没有正常工作,就是硬件画错了,在自己的板子上找出了不少细节错误,飞线修正了一下,基本问题直接解决。 过掉此处之后,进入了LWIP 初始化,直接一顺到底,返回成功,但是网口灯不亮,而且ping 毫无反应。然后决定先读一下LAN8720A 的ID ,并且准备单步跟一下,毕竟经过上面的情况,怕可能是自己的PCB绘制的时候存在EMC问题。 一读,才发现初始化流程中的SMI通讯返回都是0xFFFF,关键初始化的流程中也只是对应标志位的判断,所以忽略了0xFFFF这个情况,然后修改下逻辑判断流程,同时也感觉事情大条了呀,这SMI通讯都没能初始化成功呢?还是因为板子的EMC问题呢?或是其他原因呢? 然后重新对比了下GPIO管脚的初始化代码,感觉大概率和初始化和代码没啥关系。 然后在百度下找到一篇文章解了下SMI站管理通讯: MDC:周期性时钟,提供以最大频率2.5 MHz?传输数据时的参考时序。MDC的最短高电平时间和最短低电平时间必须均为160 ns。MDC的最小周期必须为400 ns。在空闲状态下,SMI管理接口将?MDC时钟信号驱动为低电平。 这样算下来,通讯的频率也不算很高,感觉大概率也可以排除EMC的问题,然后又是一通百度,也有此类情况的,不过看到了LAN4720A的焊接导致的问题挺多着,毕竟自己买的也是QFN-24封装的,想着死马当活马医,重新吹了一下,没想到还真可以了!!! 成功读取了ID,ETH_Init单步进入里面的对应读写寄存器操作也都有了不同的值和响应! 一切顺利之后,插入网线,初始化OK,网口灯也亮了起来,但是一ping还是没有反应,这就奇怪了,仔细看板子网口指示灯是常亮啊!!这也是有问题吧? 自己是通过路由局域网测试的,登入路由查看,也没看到有对应的设备, 这里华为的路由器有个坑,后来成功了,在【终端】有线连接设备里面也没有设备显示。 在自动协商成功后,可以在路由里面查看到对应的LAN口的速率。 ?起初笔者根本不知道路由的这个坑呀,而且路由后面对应的LAN连对应的指示灯都没有呀!! 所以就想着索性和PC的网口直连测试吧,毕竟这还有个网口指示灯可以判断,直连测试之后就更无语了,都识别不到板子,PC端网口指示灯都不亮,网络适配器直接是个红色的叉。 莫名其妙又纠结呀,不经又想到了EMC问题,索性就把自动协商改成了固定10Mbps速率,这样EMC总归影响就少了吧,但是还是没用,而且发现自动协商出来的都是半双工的,固定也改成半双工,但是还是没效果。 网上也看到有说复位的,故直接手动对nRST引脚复位激活,不过出现了更诡异的现象,LAN4720正常工作,引脚复位,未软复位之后,网口两个灯直接不亮了,不插入网线有时两个都亮,而且不管有没有插入网线读取到的状态始终是link_up状态,难道还是焊接的问题?因为上面的情况,重新吹的时候补了锡膏进去,会不会是底部GND的锡太多,导致有引脚虚焊? 毕竟这个芯片的封装,已经有点讲究焊接技术了!!! 所以又重新吹了一遍,因为LAN4720A底部GND焊盘上正好有VIA 所以有多余的锡溢出了,然后看着似乎正常多了。 重新测试了一下,PC能识别了,网口灯也是在闪烁了,简直有点不敢相信呀! 真的是焊接导致的这种乱七八糟的问题。不过还是ping不通呀,这就郁闷了,来回折腾吹了三遍了。而且板子的橙灯就缓慢的闪了两下,然后发现在NRST 引脚复位 还有 ETH_Init初始化芯片的时候自己板子上的黄\绿两个灯会同时灭掉2次,难道是复位问题? 然后尝试下两个断点在复位和ETHinit处,整个又是单步走了一遍也没看出点什么,习惯性的ping 了一下居然ping通了?? WTFK?直接重新上电,ping 一下还是没ping同这就奇怪了呀?然后在看了下datasheet , ?nRST 引脚复位要满足最小时间,软复位完成要500ms内,想着就是试下吧,因为在软复位之后就是ETH_init初始化芯片了,所以加个延时进去吧?
?然后下载,测试,居然真的过了!!不用断点也可以了! 有了成功ping通之后,板子加入TCPServer,然后顺利通过测试。 静态IP成功测试完成之后,就是DHCP了,来一击:死亡之ping测试一下,也顺利测试通过。 然后热插拔试了一下,也是可以,不过应为是无操作系统的裸机,包响应都是在主循环中进行,所以每一次包处理都需要4、5 ms时间,而且主控也有点发热现象。 虽然功能测试都成功了,不过很不稳定, 在线一个小时之后居然会掉线?直接又ping不通了。目前就到这,毕竟本身就是测试板,电路上也是去掉了一些bead从简处理。可能也是不稳定的原因吧。待后续挖掘吧! ? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:41:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |