Отсутствует /dev/ttyACM* в Ubuntu

Я установил Arduino IDE в соответствии с arduino.cc инструкции (вызов install.sh), а не sudo apt install .... Порты /dev/ttyACM* присутствовали при выполнении следующей команды Linux.

ls -l /dev/ttyACM*

Это показывает, что устройства имеют членство в группе dialout. Необходимо добавить себя в качестве пользователя в группу dialout.

sudo usermod-a-G dialout <имя пользователя>

Я выбрал плату и порт и сделал загрузку, которая в конце концов завершилась, но это заняло много времени. Программа, вероятно, не работала, так как программа должна была мигать светодиодом в течение 2 секунд, но скорость флэш была определенно намного быстрее, так что, похоже, загрузка не сработала.

Я удалил IDE и переустановил его, и порты исчезли.

Я применил это исправление для использования Arduino IDE в Linux.

Из описания исправления следует, что инструкция должна выдавать следующие команды:

wget https://github.com/adafruit/Trinket_Arduino_Linux/raw/master/99-adafruit-boards.rules

sudo cp 99-adafruit-boards.rules /etc/udev/rules.d/

Далее перезагрузите Linux.

Согласно этой странице на Arduino для Linux, в /dev/ttyACM* должны быть некоторые устройства, но мои отсутствуют. Каково решение этой проблемы? Я заменил USB-кабель, и это не имеет никакого значения.

Плата Adafruit Feather 32u4 имеет ATmega32U4. ОС - Ubuntu 16.04.

, 👍6

Обсуждение

какая плата? и что еще более важно, какой чип для USB?, @Juraj

@Juraj ATmega32U4 имеет встроенный USB., @H2ONaCl

попробуйте эти документы https://learn.adafruit.com/adafruit-feather-32u4-adalogger/faq, @abu-ahmed al-khatiri

@abu-ahmedal-khatiri вы должны опубликовать это в качестве ответа. Я не знаю, что это исправило, но эта ссылка предполагала, что может потребоваться двойной щелчок. Я не знаю, сколько кликов при двойном клике для этой платы, но в конце концов это сработало., @H2ONaCl

я помогу вам, но у меня нет Feather платы, чтобы попробовать эти документы, вы проверили свой список портов с типом " ll /dev/tty*", который выглядит как " ttyACM* или ttyUSB*`, @abu-ahmed al-khatiri

позвольте мне посмотреть, каков вывод dmesg | grep udev, @abu-ahmed al-khatiri

вы пробовали sudo systemctl restart ModemManager.service и снова проверяете sudo lsof | grep ACM?, @abu-ahmed al-khatiri


6 ответов


Лучший ответ:

1

Если Arduino IDE не показывает порт или не позволяет выбрать порт, загрузите известную рабочую программу (например, Example > Blink), начните загрузку, а затем дважды щелкните кнопку сброса платы.

Для получения того же совета плюс посторонней информации просмотрите эту справочную страницу на конкретном Пере, плате микроконтроллера32u4, которая, по-видимому, предполагает использование подробного режима загрузки, но это кажется ненужным, потому что вы можете просто повторить попытку, если она не удалась. Режим подробного скачивания включен в настройках. Несмотря на то, что в этом нет необходимости, я в конце концов решил всегда использовать подробный режим загрузки, потому что он дает, по крайней мере мне, более непосредственную и очевидную обратную связь об успехе и неудаче.

,

это та же цель, что ускорила @Majenko и Юрая., @abu-ahmed al-khatiri


3

Согласно этой странице на Arduino для Linux, в /dev/ttyACM должны быть некоторые устройства*

Но это не так. На "традиционной" плате Arduino, такой как Uno, у вас есть две микросхемы: основной MCU, который вы программируете, и микросхема интерфейса USB, которая предварительно запрограммирована с кодом для представления интерфейса CDC/ACM компьютеру (для которого он затем создает устройство /dev/ttyACMx)..

С пером у тебя этого нет. У вас есть один-единственный чип. Этот чип - это и интерфейс USB, и чип, который вы программируете, и, самое главное, именно ваша программа обеспечивает устройство CDC/ACM, если вы выберете. Если ваша программа не предоставляет устройство CDC/ACM, то компьютер никогда его не увидит, поэтому он никогда не создаст /dev/ttyACMx.

В общем, ядро Arduino всегда добавляет устройство CDC/ACM независимо от того, просите вы об этом или нет, так как оно часто используется для инициирования сброса в загрузчик. Однако если скетч перестает работать по какой-либо причине, то порт CDC/ACM больше не существует.

Однако у M0 на пере есть хитрый трюк - если вы дважды сбросите плату с помощью кнопки сброса, код запуска распознает этот факт и заставит его запустить загрузчик. Затем этот загрузчик представляет необходимое устройство CDC/ACM компьютеру, позволяя загружать новый код.

Конечно, если загруженная вами программа не инициализирует свое собственное устройство CDC/ACM или выйдет из строя, устройство CDC/ACM не будет представлено до тех пор, пока вы снова не выполните трюк двойного сброса.

,

разве у него нет Микро-клона? Я знаю трюк с двойным щелчком для M0, но работает ли он для Micro?, @Juraj

Я прочитал комментарии. Мне кажется, он говорит о пере., @Majenko

у Adafruit половина продуктов-перья: -), @Juraj

@Juraj Также двойной щелчок сработал, согласно комментариям. Так что двойной щелчок - это ответ. Это означает, что логически это должно быть перо M0., @Majenko

вот с чем у меня проблема. часто задаваемые вопросы Adafruit для 32u4 feather рекомендуют двойной щелчок. У них есть другой загрузчик или микро-загрузчик тоже имеет двойной щелчок? или часто задаваемые вопросы копируются из часто задаваемых вопросов M0, и простой сброс работает для OP?, @Juraj

@Juraj Кто знает, что происходит в голове дизайнера Adafruit...? Я имею в виду, зачем вообще создавать перья? ;), @Majenko

Знаете ли вы, есть ли у Arduino Micro трюк с двойным щелчком?, @Juraj

@Juraj Понятия не имею. Я никогда не использую чипы AVR, если могу что-то поделать..., @Majenko

Пример программы Blink может принять загрузку, даже если кажется, что нет никакого кода, связанного с этим. void setup () {pinMode(LED_BUILDIN, OUTPUT);} void loop () { digitalWrite(LED_BUILDIN, HIGH); delay(1000); digitalWrite(LED_BUILDIN, LOW); delay (1000); }, @H2ONaCl

Отсюда и 4-й абзац моего ответа..., @Majenko


2

/dev/ttyACM* мои отсутствуют.

Я думаю, что что-то udev rules issue, вы можете определить другие правила с помощью add Feather32u4.rules и удалить файл 99-adafruit-boards.rules раньше.

SUBSYSTEM=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
ATTRS{idVendor}=="239a", ENV{ID_MM_DEVICE_IGNORE}="0"
ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idProduct}=="8011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idProduct}=="0011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"

после сохранения и копирования файлов в файл /etc/udev/rules.d/

sudo cp Feather32u4.rules /etc/udev/rules.d/

а затем перезагрузите свой udev

sudo reload udev

или,

sudo udevadm control --reload-rules
sudo udevadm trigger

не забудьте перезапустить свой сервис

sudo systemctl restart ModemManager.service

проверьте еще раз ваш порт со следующим ll /dev/tty*, если он появляется с именем /dev/ttyUSBx или /dev/ttyACMx добавьте пользователя в вашу группу

sudo usermod -a -G plugdev <user>

также попробуйте автоматически сбросить кнопку с добавлением задержки в ваш скетч

while(!Serial){
  delay(1000);
}
Serial.begin(115200);

если он не показал порт в списке /dev/tty, попробуйте

  • Включена подробная загрузка в настройках Arduino.
  • Откройте пример мигания.
  • и добавьте автоматический сброс выше.

это будет показано как COM/Последовательный порт загрузчика с режимом загрузки.

Если не сработало, я советую установить драйвер на Adafruit_Driver Windows только с помощью Wine или PlayOnLinux и удалить файлы udev. также проверьте еще раз свой список /dev/tty*.

Надеюсь, это поможет.

,

1

Поэтому я перепробовал ВСЕ... Оказалось, что мой USB-кабель был более дешевым кабелем, в котором не было контактов для передачи данных. Стоит убедиться, что ваш кабель поддерживает передачу данных, подключив его к чему-то другому, чтобы убедиться, что он поддерживает передачу данных.

,

1

ttyACM* также не появился на моем /dev/, но как только я сменил USB-порт, с которым работал, плата arduino начала мигать по-другому. Поэтому я снова проверил IDE и в разделе Инструменты > порт > Последовательный порт увидел, что появился ttyACM0. Для меня это не имело смысла, но сработало.

,

0

В моей ситуации, когда я использую пользовательское ядро Linux, мне не хватало драйвера cdc_acm.

Эта отличная страница в Gentoo Wiki помогла мне найти его: https://wiki.gentoo.org/wiki/Arduino

,