3

我正在使用 PlatformIO 进行编程,使用 Arduino Mega 和 Arduino Uno。我让它们通过串行连接,所以每次我想对它们进行编程时,我都必须将它们相互断开。我还将它们从计算机上拔下,以免在移动电线时不小心炸毁它们。

每次我重新插入一个或另一个并尝试立即对其进行编程时,我都会收到以下错误消息:

*** [upload] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

如果我等待大约一分钟再试一次,那么代码将毫无问题地上传。这可能是什么原因造成的?

4

1 回答 1

4

ModemManager 可能是您的麻烦的原因。尝试使用例如禁用它pkill -STOP ModemManager(使用 继续该过程-CONT)。

ModemManager 是一款(很棒的)软件,可以让您的 3G 加密狗自动工作。因为 Arduino 显示为串行调制解调器,ModemManager 试图接管它。

您可以通过将某个变量附加到您的设备来阻止 ModemManager 执行此操作。有关详细信息,请参阅文档。本质上,创建一个 udev 规则,例如/etc/udev/rules.d/99-ttyacms.rules具有以下内容:

ATTRS{idVendor}=="0ca6" ATTRS{idProduct}=="a050", ENV{ID_MM_DEVICE_IGNORE}="1

当然,您需要使用您的 ID。用于lsusb查找这些值。

创建此文件后,使用类似的内容重新加载 udevsudo udevadm control --reload-rules

于 2018-11-12T18:38:44.263 回答