完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用标准外设库和 LwIP 1.4.1 的 STM32F407 上调试遗留应用程序,除了在极少数情况下,硬件 IPv4 校验和不起作用;他们都被发送为零。当我在 lwipopts.h 中禁用硬件校验和时,我会得到正确的校验和(但会降低性能)。该应用程序在所有其他方面都可靠地工作,我们之前忽略了校验和问题。
我的开发IDE是Keil MDK 5.36.0.0 以太网链路是 100BaseT,固定 IPv4 地址(无 DHCP),在不同的目标系统上有两个不同的 PHY 芯片(两个系统使用相同的以太网堆栈代码并表现出相同的错误)。 为此需要使用许多设置,经过多次搜索、大量阅读和多次调试会话后,我确信我已将它们全部设置为正确的设置。(我已经做到了在即将交出以太网 DMA TX 描述符时断点以太网传输,并检查当时的描述符字段和以太网寄存器。)
我还应该在哪里寻找造成这种情况的原因? |
|
相关推荐
1个回答
|
|
这是遗留代码做意想不到的事情的组合,以及具有意想不到的要求的硬件校验和计算。
1) LwIP 1.4.1 堆栈在 opt.h 中有一组完全独立的#defines,它们应该由 lwipopts.h 中的单个 CHECKSUM_BY_HARDWARE #define控制。例如,定义 CHECKSUM_BY_HARDWARE 将 CHECKSUM_GEN_IP 等设置为 0 以生成硬件校验和。但。有人没有在该块中与其余部分一起定义 CHECKSUM_GEN_ICMP,因此 ICMP 校验和无论如何都是在软件中生成的。可能是一个 LwIP 错误,但很难确定,而且 1.4.1 已经被取代了。 2)STM32F4以太网外设挑剔;它希望首先在要进行硬件计算的校验和字段中看到零。如果校验和字段变为零,则它会在计算正确的线路上出现。但是,如果它变为非零值,它就会以零的形式出现在电线上。 解决方案:在lwipopts.h中将 CHECKSUM_GEN_ICMP 定义为 0 可使传输的 ICMP 数据包神奇地具有正确的硬件校验和。因此,如果您希望以太网 MAC 对它们进行硬件计算,请确保首先将这些校验和字段置零。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2649 浏览 1 评论
3213 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1787 浏览 1 评论
3617 浏览 6 评论
5996 浏览 21 评论
944浏览 4评论
1318浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
589浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1307浏览 3评论
1367浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 22:10 , Processed in 1.170822 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号