我正试图通过UART以4Mbps的速率在Raspberry Pi(单向)和Raspbian之间传输数据。我正在使用UART0(BCM2835 Peripherals第175页)。
我已经成功配置了UART时钟源,因此我能够以如此高的速度进行发送/接收,实际上它可以工作。我可以发送字节并在另一侧正确接收它们。
但是,如果我尝试连续传输数据,会丢失几个字节(~2%),所以我猜我在接收时溢出缓冲区(因为高达1Mbps,连续传输工作正常)。 / p>
据我所知,接收时有两个缓冲区,硬件缓冲区在Raspberry Pi的UART0的情况下为16字节,主存储器上的软件缓冲区。内核将数据从硬件缓冲区移动到软件缓冲区,我的应用程序从那里获取数据。
有没有办法知道这两个缓冲区中哪一个溢出?如果是这样,怎么样?
谢谢!
答案 0 :(得分:1)
使用Hardware Flow Control (CTS & RTS)
解决了这个问题。在更高的速度下,您必须使用HSUART (UART with DMA capabilities)
。如果您的serial-port
支持16550A
或类似内容,则可以在Linux内核中配置CONFIG_8250
,CONFIG_DW
,CONFIG_DMA
并开始使用DMA-capable UART
。我使用High-Speed UART (HSUART)
使用baud rates
3M/4M
与h/w flow control
一起工作progress = (data) ->
return if(data.percent < 0.66)
do_something()
player.off('timedupdate', progress)
player.on('timedupdate', progress)
,没有任何问题。