完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 STM32F407ZG/STM32F429IG 构建两个类似的控制板。主要功能是
一些主机发送数据量,大约 1M 字节(带 FSMC/SRAM 的 STM32F407)或 32M 字节(带 FMC/SDRAM 的 STM32F429) 到STM32并存储在内存中。然后在一些控制命令之后,STM32 MCU 控制 GPIOs 驱动另一块板。问题是:两个 STM32F4 MCU 都声称它们有高达 100M bps 传输速度,但我只有大约 100 kbps。 基本代码是使用 STM32CubeMX 生成的,启用了带有 CMSIS_v2 API、LwIP (2.1.2) 和 mbedTLS(用于加密)的 FreeRTOS。 固件是STM32Cube_FW_F4_V1.25.2,PHY是LAN8720A。我配置了三个任务: 1. 用于 TCP 处理的默认任务具有 1024 个字的堆栈大小 2. 低优先级的空闲任务通过 UDP 广播 MCU 的 IP 和端口(IP 是 DHCP 提供的),当接受 TCP 连接时被二进制信号量阻塞。 3. GPIO 传输的实时任务,降级为正常优先级进行测试(现在有 osDelay 的空任务) 我用谷歌搜索了一下,大多数技巧都是关于发送吞吐量的,似乎很少有人谈论接收。 [STM32CubeMX 和 STM32F429ZG 的低 TCP/IP 传输性能] 谈论memcpy性能,但在测试场景中,我什至不使用FSMC/FMC内存。但我改变了 内存映射: 1. 所有代码和 RW ZI 数据都移入 CCM 以获得更好的性能 2. ethernetif、lwip、mem、memp 保存在 SRAM 1 中,以 0x20000000 开头,供 DMA 访问 3. SRAM 2 以 0x2001C000 开始,留作其他用途。 我使用 netconn API 在 MCU 上构建了一个 req/rep 模式服务器。当载荷数据小于 TCP_MSS 时, 它足够快,但是当我发送一个 32 kbytes 的数据块时,它变慢了。 我已将 TCP_MSS 扩大到 1460,将 TCP_WND 扩大到 11*TCP_MSS。所有其他尝试均失败。 最后一天的实验表明:当我在 low_level_input 中做一些 printf 来检查传入的 数据包信息,性能突然上升到 500 kbytes/s,也就是 4 Mbps。这是不可理解的,而且似乎 无法进入量子域:(。我还尝试了 sprintf 和其他方法来检查传入的数据包信息,但运气不佳。 那么我如何才能达到 100Mbps? |
|
相关推荐
1个回答
|
|
您描述的问题是旧版 ETH HAL 驱动程序中已知限制的一部分,因为缓冲区的完整副本会降低性能。
该解决方案确实使用零复制方法来提高性能,这就是在新的 ETH HAL 驱动程序中所做的,您可以在 STM32H7 CubeFW 版本 V1.10.0 中找到该驱动程序(也可以在 GitHub 上找到 请注意,此 ETH HAL 驱动程序更新会导致兼容性中断,并且需要在应用程序级别进行一些返工。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2399 浏览 1 评论
3122 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1688 浏览 1 评论
3506 浏览 6 评论
5860 浏览 21 评论
849浏览 4评论
1224浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
490浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1204浏览 3评论
1258浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-17 07:20 , Processed in 1.702523 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号