gpt4 book ai didi

linux - 高速串行(UART)缓冲区溢出

转载 作者:太空狗 更新时间:2023-10-29 12:30:58 31 4
gpt4 key购买 nike

我正在尝试通过 UART 以 4Mbps 的速度在 2 个 Raspberry Pi(单向)与 Raspbian 之间传输数据。我正在使用 UART0(BCM2835 Peripherals 第 175 页)。

我已经成功配置了 UART 时钟源,所以我能够以如此高的速度发送/接收,并且确实可以正常工作。我可以发送字节并在另一端正确接收它们。

但是,如果我尝试连续传输数据,则会丢失几个字节 (~2%),所以我想我在接收时溢出了缓冲区(因为高达 1Mbps,连续传输工作正常)。

据我所知,接收端有两个缓冲区,硬件缓冲区(在 Raspberry Pi 的 UART0 中为 16 字节)和主内存上的软件缓冲区。内核将数据从硬件缓冲区移动到软件缓冲区,我的应用程序从那里获取数据。

有什么方法可以知道这两个缓冲区中的哪一个溢出了?如果是,怎么办?

谢谢!

最佳答案

我通过使用硬件流控制(CTS 和 RTS) 解决了这个问题。在更高的速度下,您必须使用 HSUART(具有 DMA 功能的 UART)。如果您的串口支持16550A或类似的,您可以配置CONFIG_8250CONFIG_DWCONFIG_DMA 并开始使用 支持 DMA 的 UART。我一直在研究高速 UART (HSUART)波特率 使用 h/w flow 高达 3M/4M控制没有任何问题。

关于linux - 高速串行(UART)缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322048/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com