带有Arduino的高速计算机接口


10

我正在计划一个Arduino的项目,该项目涉及处理来自主机的许多请求,而标准的115200串行最大波特率是不够的。我希望能够获得1Mbps全双工,但是400Kbps +全双工是可以接受的。我正在使用Arduino Due,因此它应该能够处理明显更高的通信速度。

有没有一种方法可以显着提高串行传输的波特率,或者我可以选择第二种选择以更高的速度与计算机连接?


FTDI FT232设备最高可以达到3 Mbps,因此,如果您有基于FTDI的USB串行转换器,那将是一个简单的选择。我真的希望Arduino的人们能坚持下去,而不是ATmega16U2。
康纳·沃尔夫

也许UART将支持1Mbps比特率,但是您还需要微控制器为其提供数据。可以做到,但是您将很容易达到最大值。
jippie

如果您要以400 kbps的速度“冲击大量”的请求请求AVR,那么如果它有足够的时间进行任何使用,我会感到惊讶。
尼克T

Answers:


8

绝对可以通过Arduino达到Mbps范围,尤其是您的Due。串行监视器仅支持最高115200的波特率,但是您可以使用单独的终端窗口,该窗口可让您将波特率设置为所需的任何值。

有关更多信息,请参阅Arduino论坛上的This Thread

就设置而言,在Arduino上就这么简单Serial.begin(1000000);或如此。这与您要与之通信的设备的设置以及它可以处理的内容有关。


USB标准串行驱动程序是否支持这种速度?我将通过脚本而不是IDE中的串行监视器与之交谈。
多项式

我相信是的。如果使用脚本,则应保持良好状态。Arduino Due上的UART硬件与UNO相同;它使用ATmega16U与串行接口连接,该接口的速度至少为1Mbps。USB串行驱动程序也应支持该速率。
杰·格雷科

要进行测试,您始终可以设置一个快速的测试草图。将波特率设置为高于默认值,并使用在同一波特率下设置的终端。如果数据通过,则说明Arduino非常适合该波特率。
杰·格雷柯

从技术上讲,主机PC要求的波特率并不重要,而仅仅是16U和Arduino主处理器达成共识-实际的USB端运行速度比串行波特率要快得多,而且所有PC告诉16U以什么速度运行其串行接口。另外,如果要查看波特率除数中的误差,请记住,真正重要的是它们在电路板上的两个芯片之间匹配,而不是与某些传统目标匹配。充分利用这一点可能需要16U的自定义固件。
克里斯·斯特拉顿

1

我会考虑编写用于USB接口的Atmega16u2的自定义固件。该芯片可以说全速USB(最高12 Mbit信号速度),并且该芯片的SPI输出端口可从ICSP接头方便地获得。将其连接到Arduino的SPI输入(也可以在其ICSP头上找到),您可以以4 Mbit / s(每位4个CPU时钟)的速度运行SPI。

巨型(16u2和128)上的Atmega可以以高达2 Mbit / s的速度运行其串行端口。如果您为16u2编写自定义固件,则还可以使用已经存在的异步串行USART。

在这两种情况下,您都可能会失去串行端口的可编程性,因此您必须使用基于USB的独立编程器。

LUFA项目包含许多示例程序和实用的库,这些库用于在Atmega芯片上实际讲USB。“ libusb”是一个方便的库,可以直接与USB设备通信,而不必依赖串行仿真。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.