本人在在做以太网实现,发现1k数据总是被夹断,结果库函数搞的鬼;
个 pbuf 的长度确实是 1460,但 DMA 只填了前 1024 字节左
右的整帧数据;扣除以太网/IP/TCP 头后,正好剩 946 字节正文,尾部 514 字节保持为零。下一步检
查 ETH DMA 的实际接收缓冲长度配置,仍是 1024,而软件缓冲已按 1524 分配。
结果是库函数硬编码1000
WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC | 1000U | ETH_DMARXDESC_RCH);
逆天;
修复改动如下
WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC |
(heth->Init.RxBuffLen & ETH_DMARXDESC_RBS1) | ETH_DMARXDESC_RCH);