ST意法半导体
直播中

王芳

7年用户 1376经验值
私信 关注
[问答]

如何通过STM32H745 DMA接收数据包呢?

你好!
我正在尝试使用 STM32H745(类似于 NUCLEO-H745ZI-Q)在我的板上运行 ping。我必须使用 KSZ8081RNA 而不是标准的 LAN8742。(客户)在其他分支机构的建议,我几乎保留了 LAN8742.c 驱动程序中的所有内容,我只更改了一些寄存器以使初始化成功(我只需要更改LAN8742_GetLinkState 函数)。我可以读写 KSZ8081RNA 寄存器。我在调试连接/断开以太网电缆时看到链接更改。
但是ping数据包(ICMP)还是没有传过来。
由于描述符heth->RxDescList.RxDesc的值,程序未通过/* Check if descriptor is not owned by DMA */检查(文件stm32h7xx_hal_et.c中的HAL_ETH_Read Data第 1063 行) 。它等于 0x81000000。在另一个工作项目中,它等于 0x3401003***。
很可能,我没有完全正确地初始化,因为同一项目在更改之前在 NUCLEO-H745ZI-Q 上运行。我不完全理解如何通过 DMA 接收数据包。但是除了LAN8742_Init函数我还应该改变什么?





回帖(1)

温益浪

2022-12-27 14:26:36
你没有听我说......你的代码使用恒定的 PHY 功能位,就好像它们会显示所选模式一样。相反,您必须使用寄存器PHY 控制 1 (0x1E)中的操作模式指示位。lan8742.c文件根本不需要修改。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分