最近发现 rtt studio 上面 , 新增了at32f437 系列单片机, 发现性能强劲 , 价格实惠, 于是买了几个样品测试, 调试使用 at32f437vgt7 , 连接phy lan8720a芯片, 发现官方库只支持dm9161 , 和dp8348. 于是配合着stm32 的以太网驱动代码, 修改至能用, 能使用ping 功能,可以使用iperf 测试网络性能, 测试结果如下
问题在于, 运行一会之后, 网络功能就凉了, 无法ping 出去, 网络测试也无法测试了. 有遇到同类型的小伙伴吗? 运行好的话, 网络能多坚持几分钟, 运气差可能几十秒就不行了
如果重新调用 rt_at32_emac_init , 就可以恢复网络, 中间的link down 并没有断开, 只是因为调用函数导致的断开
2022-5-26 20:27:22 编译选项中, 设置了代码优化 o-1 , 网速直接提升一倍, 而且变稳定了, 具体结果等待补充
后面也用437,这个雅特力论坛看到的,不知道对你有没有帮助
https://bbs.21ic.com/icview-3211760-1-1.html
详细问题过程如下, 通过调试后发现, 每次网络挂掉之后, rx_dump 再也不会接收到任何信息. 在中断里, 放置led函数, 发现再也不会进入中断服务函数, 在网上找到类似的问题, 说的是内存地址不对, 于是把动态内存改为静态内存, 发现还是不行. 而且发现在网络挂掉的时候, phy 工作正常, 可以正常检测到网线的连接状态, 读取到phy 的基础寄存器和状态寄存器, 且和正常工作的数值是一样的.
后来对比雅特力提供的几个demo 工程, 发现demo 的中断都非常简约, 直接清空标志位就没有其他事情了, 初始化部分, 和驱动部分, 经过反复核验, 基本上确认初始化代码没有问题了. 删除掉中断服务函数中的多余判断语句后, 未开启优化的情况下用iperf 网络测试工具, 测试了十分钟, 表现良好, 截止到回帖 15个小时没有挂掉, 应该是已经解决掉问题
问题已解决, 联系到雅特力的FAE 孙工, 最终定位到是因为 适配rtt 驱动里, 中断判断太多导致, 只保留发送, 接收, 和normal 中断, 就稳定了.