Восстановление после потери USB-подключения (от Leonardo к Raspberry Pi)

У меня есть несколько Arduino Leonardo, подключенных к Raspberry Pi (под управлением Ubuntu) через USB. Они отображаются как /dev/ttyACM0, /dev/ttyACM1 и т. д.

Иногда один из них исчезает, и даже нажатие кнопки сброса Arduino не возвращает его. Есть ли способ «обновить» или «повторно инициализировать» устройства ttyACM*, чтобы они снова появились без перезагрузки Raspberry Pi?

, 👍0

Обсуждение

Системные журналы говорят...?, @Ignacio Vazquez-Abrams


2 ответа


3

Устройства USB создаются динамически. Вы можете найти этот вопрос и ответ от SE Raspberry Pi полезными: Как принудительно выполнить повторное сканирование последовательных USB-устройств?.

Вы можете использовать команду dmesg(8) на Pi, чтобы просмотреть сообщения, созданные подсистемой USB. Посмотрите вывод, чтобы увидеть, есть ли ошибки, связанные с отключением Arduino от шины. Вот как будет выглядеть вывод (примерно, это от Uno, подключенного к системе Raspbian), обратите внимание на последнюю строку, которая является отключением от отключения Uno от Pi. Сброс Uno не сделал ничего, что увидел Pi. Я предполагаю, что это связано с тем, что кнопка сброса на Uno не сбрасывает 16U2 (процессор, обрабатывающий USB-порт).

[  459.936719] usb 1-1.3: new full-speed USB device number 5 using dwc_otg
[  460.051182] usb 1-1.3: New USB device found, idVendor=2a03, idProduct=0043
[  460.051212] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  460.051229] usb 1-1.3: Product: Arduino Uno
[  460.051245] usb 1-1.3: Manufacturer: Arduino Srl            
[  460.051262] usb 1-1.3: SerialNumber: 75431343334351F061E2
[  460.088018] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
[  460.089250] usbcore: registered new interface driver cdc_acm
[  460.089270] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[  534.212365] usb 1-1.3: USB disconnect, device number 5

Из этого вопроса и ответов на него следует, что некоторые версии Леонардо могут иметь проблемы, которые могут вызвать такое поведение.

Еще одна вещь, на которую стоит обратить внимание, — это источник питания Леонардо. Если они питаются от Pi через интерфейс USB, это может увеличить возможности Pi по обеспечению питания.

,

0

Каждое устройство также можно найти по символической ссылке, названной по его аппаратному подключению. Так что эти имена остаются прежними после повторного появления!

root@raspberrypi:/etc/udev/rules.d# ls -l /dev/serial/by-path/
total 0
lrwxrwxrwx 1 root root 13 May  2 18:11 platform-20980000.usb-usb-0:1.2:1.0 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 May  2 18:11 platform-20980000.usb-usb-0:1.3.1:1.0-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 May  2 18:11 platform-20980000.usb-usb-0:1.3.1:1.0-port1 -> ../../ttyUSB1
,