我正在计划一个Arduino的项目,该项目涉及处理来自主机的许多请求,而标准的115200串行最大波特率是不够的。我希望能够获得1Mbps全双工,但是400Kbps +全双工是可以接受的。我正在使用Arduino Due,因此它应该能够处理明显更高的通信速度。
有没有一种方法可以显着提高串行传输的波特率,或者我可以选择第二种选择以更高的速度与计算机连接?
我正在计划一个Arduino的项目,该项目涉及处理来自主机的许多请求,而标准的115200串行最大波特率是不够的。我希望能够获得1Mbps全双工,但是400Kbps +全双工是可以接受的。我正在使用Arduino Due,因此它应该能够处理明显更高的通信速度。
有没有一种方法可以显着提高串行传输的波特率,或者我可以选择第二种选择以更高的速度与计算机连接?
Answers:
绝对可以通过Arduino达到Mbps范围,尤其是您的Due。串行监视器仅支持最高115200的波特率,但是您可以使用单独的终端窗口,该窗口可让您将波特率设置为所需的任何值。
有关更多信息,请参阅Arduino论坛上的This Thread。
就设置而言,在Arduino上就这么简单Serial.begin(1000000);
或如此。这与您要与之通信的设备的设置以及它可以处理的内容有关。
我会考虑编写用于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设备通信,而不必依赖串行仿真。