打印
[STM32F4]

STM32的网口DMA是否只能从RAM中提取数据

[复制链接]
1400|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
32021724|  楼主 | 2023-2-13 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 32021724 于 2023-2-13 17:45 编辑

用stm32cube生成了一个基于stm32f407Vet6和lwip的http server的例程,试了试工程的ping通没问题,单纯手动新建tcp和udp通信也没问题,但是httpd部分网页打不开

经过一通搜索查找跟踪debug,发现httpd部分80端口tcp连接可正常连接,get请求也能正确进入http_recev,http网页数据一路来到
HAL_ETH_Transmit的WRITE_REG(heth->Instance->DMATPDR, (uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc]));这行就完蛋了
网口DMA的SR寄存器报了个ETH_DMASR_FBES错误

对比了一个能运行的例程,虽然http网页数据都在flash里,但是人家的网口发送dma描述符的数据地址开头是0x2开头的,也就是数据被拷进了RAM里,然后给到网口dma
而stm32cube直接生成的例程,http网页数据在网口发送dma描述符里的地址开头是0x08,也就是说给到dma的数据地址是在flash里
而我尝试在lwip的TCP_Write函数中给一个 TCP_WRITE_FLAG_COPY 参数,让TCP_write写数据的时候把写入的数据拷入新建的pbuf进行发送,网页就能顺利打开了

所以目前所有的证据指向了:STM32的网口DMA只能从RAM中提取数据,如果从flash中取数据就会引起dma错误
不知上述理解是否正确

使用特权

评论回复
沙发
aozima| | 2023-2-13 18:48 | 只看该作者
看下总线矩阵,以太网是否与flash连通。
我记得它们都是AHB总线上,应该是通的。只有TCM不通而已。

建议检查下地址是否对齐,DMA对地址对齐是有要求的。不对齐时要么DMA出错,要么数据出错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

106

帖子

2

粉丝