Ошибка при открытии последовательного порта dev ttyacm0

I just had this problem with my Genuine Arduino Mega 2560 trying to connect to it from an Ubuntu 18.04.5 LTS machine using a locally compiled Arduino IDE version 1.8.16. I was able to fix it in my case, so posting here to share the tips.

Came across several other forum topics reporting the same symptoms (even though not all are Mega and not all on Linux):

  • https://arduino.stackexchange.com/questions/33505/why-do-i-get-avrdude-stk500v2-receivemessage-timeout-error-when-uploading-to?newreg=d5f1171d37394be584fc5de8dea6138f
  • https://arduino.stackexchange.com/questions/3316/mega-2560-doesnt-respond
  • https://forum.arduino.cc/t/mega2560-timeout-communicating-with-programmer/132479
  • https://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/

After troubleshooting for several hours I was able to reliably connect to my Mega. It turned out there were multiple problems that prevented it from working that had to be understood and solved, and when I realized what they were I could not believe my eyes.

The posters who suggested making sure that udev rules are configured to prevent the ModemManager from hogging the Mega device, thereby making it unavailable to the Arduino IDE were on the right track. So I checked my /etc/udev/rules.d/70-snap.core.rules and indeed confirmed that there already was a rule for ModemManager to ignore devices with USB vendor ID 2341, which is the Genuine Arduino:

...
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
...

However, when I did a tail -f /var/log/syslog and plugged in the Mega, I could not believe my eyes to see that ModemManager was still trying to talk to it:

Dec  9 22:09:58 hostname ModemManager[999]: <info>  [device /sys/devices/pci0000:00/0000:00:14.0/usb3/3-2] creating modem with plugin 'Generic' and '1' ports
Dec  9 22:09:58 hostname ModemManager[999]: <warn>  Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Dec  9 22:09:58 hostname ModemManager[999]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2': Failed to find primary AT port

It looks like the ModemManager was still trying to connect to it as a non-USB TTY device.

The problem was exacerbated in that the Arduino IDE was not handling this problem gracefully and kept hanging and trying to connect to the Mega even after I unplugged it from the USB. Nevertheless, I did a quick ps -ef | grep ModemManager and then kill [PID], waited until the Arduino IDE stopped trying to connect to the disconnected Mega, then plugged it back in, specified the port via ‘Tools’ -> ‘Port’, and again attempted an upload, and it worked like a charm. (Conversely, had I just waited watching /var/log/syslog for ModemManager to give up and free the device Arduino IDE might have also worked without me explicitly killing the ModemManager. That probably explains why it worked sporadically.)

So then I thought I solved all my problems and started bolting the Mega into my device. I tightened the connecting fasteners, and again could not believe my eyes that it stopped working again. Took the Mega back out, unbolted the whole board and now it worked, bolted it back in, and it stopped working. After several rounds, correlated the use of a brass standoff on the hole right next to the pin A6 as causing this problem. I surmise that the metal standoff was shorting out or somehow interfering with PCB traces that run very close to that hole. So stopped bolting in that hole, and the Mega started working fine assembled into my device.

So in my case, 2 problems were preventing the Mega from working and PC connecting to it via USB:

(1) ModemManager was hogging the device as soon as it was plugged in despite the udev USB rules. Solution — killed ModemManager (still need to look into modifying system config so that I don’t have to kill it each time).

(2) Hardware issue with the metal riser interfering with PCB traces near hole next to pin A6. Solution — stopped bolting in that hole.

Hope this is helpful.

Моя ОС — Ubuntu 18.04, и Arduino работал до сих пор.

Хотя есть несколько решений, ни одно из них мне не подходит.

Я следовал этим инструкциям на сайте Arduino.

Затем я попробовал это на Arduino Stack Exchange, который должен работать в тех случаях, когда первое решение не сработало. Ответ говорит, что мы должны создать несколько правил /etc/udev/ruled.d/ дорожка.

Но никто из них не работал для меня.

Я также проверил Arduino в Windows 10, чтобы увидеть, была ли это аппаратная проблема, но она работала нормально.

У кого-нибудь есть еще идеи как решить эту проблему?

ОБНОВИТЬ:

  • Мое имя пользователя, sergio, является частью обеих групп (tty и dialout);
  • Я вышел из системы и вернулся, как объясняет официальный учебник Arduino;
  • В Arduino IDE правильные конфигурации: Arduino UNO и ttyACM0
  • Это вывод ll /dev/ttyACM0 после запуска обучающих команд:

    crw-rw-rw- 1 root dialout 166, 0 Jul 15 05:41 /dev/ttyACM0
    

ОБНОВЛЕНИЕ 2:

Я создал скрипт для решения этой проблемы: https://github.com/sergiomafra/iniarduino

2018-07-15 12:11

12
ответов

Решение

Переустановите ваш arduino, установленный из программного центра Ubuntu:

sudo apt install --reinstall arduino

Переустановка необходима, так как ваш which avrdude Команда согласно вашему комментарию ничего не возвращает, но должна быть /usr/bin/avrdude, Проверьте еще раз:

which avrdude

Запустите вашу Arduino IDE после переустановки и закройте ее.

Проверьте вашу конфигурацию arduino. открыто /home/sergio/.arduino/preferences.txt файл и проверьте там serial.port вариант. Попробуйте изменить это на /dev/ttyACM0, Откройте этот файл:

sudo nano /home/sergio/.arduino/preferences.txt

и применить соответствующие изменения, т.е. вариант должен выглядеть

serial.port=/dev/ttyACM0

Перезагрузите компьютер после этого.


Bob

15 июл ’18 в 14:33
2018-07-15 14:33

2018-07-15 14:33

У меня была похожая проблема, когда я пытался загрузить эскиз в Arduino. Проблема была связана с отсутствием разрешений на чтение / запись на последовательный порт. Мне удалось исправить с помощью следующей команды:

Чтобы подтвердить, что порт существует, введите следующее из корневого каталога.

ls /dev/ttyACM0

Чтобы установить разрешения на чтение / запись, введите следующее

sudo chmod a+rw /dev/ttyACM0


Adrian

22 янв ’19 в 06:13
2019-01-22 06:13

2019-01-22 06:13

Вот что сработало для меня:

  • Удалите версию с Apt, она не работает должным образом (sudo apt uninstall arduino; sudo apt autoremove)
  • Установите версию с сайта Arduino
  • sudo apt install avrdude так как тот, что на сайте не включает его
  • sudo usermod -a -G dialout [your_username] так как тот с сайта не делает это автоматически

И теперь все снова работает!


Draconis

28 май ’19 в 18:36
2019-05-28 18:36

2019-05-28 18:36

Это помогло решить проблему «невозможно открыть последовательный порт» (введите свое имя пользователя Ubuntu вместо
$USER) после загрузки Arduino из Ubuntu Software.

sudo usermod -a -G dialout $USER  
sudo chmod a+rw /dev/ttyUSB0



18 сен ’20 в 07:10
2020-09-18 07:10

2020-09-18 07:10

В сочетании со всеми сообщениями, которые я прочитал, это то, что я сделал, чтобы решить эту проблему, следуя указаниям из этой темы.

В новом терминале я набрал следующее, как показано ниже.

https://ask-ubuntu.ru/images/5c39e76298639ac790d3dab9915f32a20157efc4.png

Обратите внимание, что fourplus — это мое имя пользователя.

2019-03-10 02:14

У меня была такая же проблема, я попытался установить из Ubuntu Store 18.04 и попробовать любое решение здесь. У меня ничего не работало. Так я скачал последний

Я извлек и запустил следующую команду, чтобы установить его:
$ sudo ./install.sh

После установки я запустил сценарий, входящий в последнюю версию, выполнив следующее:

$./arduino-linux-setup.sh <имя_пользователя>

Как только сценарий будет завершен, он покажет вам сообщение «Пожалуйста, перебронируйте систему». Я не перезапускал, когда пробовал решения здесь, может быть это то, что должны попробовать следующие пользователи.

Важно: при установке программного обеспечения, выполнив следующие действия, вам необходимо перейти в программное обеспечение Ubuntu и дать разрешение на «доступ к USB-оборудованию напрямую».


titusfx

14 сен ’20 в 17:39
2020-09-14 17:39

2020-09-14 17:39

Ха Я новичок и сделал несколько ошибок)) Не делай так, как я.

  1. Во-первых, в моей книге было плохое изображение схемы подключения светодиода. Нашел новый и переподключил провода. Теперь они подключены правильно.
  2. Потом подключил арудино к компьютеру (это важно).
  3. Затем я выполнил следующие команды:

    • ls -l /dev / ttyACM0
    • sudo usermod -a -G dialout [my_username]
    • sudo chmod a+rw /dev / ttyACM0

Когда я искал плату в меню программы Arduino (Инструменты -> Плата), я не нашел «Arduino/Genuino Uno», просто там была «Arduino Uno» (думаю, все в порядке)



01 май ’20 в 22:09
2020-05-01 22:09

2020-05-01 22:09

Я вижу, что вопрос уже принят, но ни одно из решений не помогло мне, поэтому у меня есть другое решение. Я установил IDE arduino через установщик программного обеспечения Ubuntu. Что вам нужно сделать, так это.

  1. Перейдите в IDE arduino в магазине программного обеспечения Ubuntu
  2. нажмите разрешения
  3. установить доступ к USB-оборудованию непосредственно на



22 мар ’20 в 16:24
2020-03-22 16:24

2020-03-22 16:24

Для меня любой
chmodа также
udevправило не сработало.

Только принуждение
avrdudeдля запуска с правами root:

      $ sudo chmod u+s  /opt/arduino/hardware/tools/avr/bin/avrdude


eadmaster

16 июн ’21 в 03:47
2021-06-16 03:47

2021-06-16 03:47

Обновление 2 OP для создания скрипта отлично решает проблему. Проверьте это на GitHub.

      [email protected]:~/Downloads/iniarduino-master$ iniarduino
[sudo] password for vipulgupta2048: 
Arduino connected!
Checking if 2048 is part of dialout and tty groups
2048 added to dialout group
2048 added to tty group
Password required to change permissions of /dev/ttyACM0
Permissions to /dev/ttyACM0 changed to a+rw
Reloading UDEV Rules
UDEV Rules reloaded without the need to restart
All Done!

2022-02-19 20:50

Для меня сработала смесь двух приведенных выше ответов: во-первых, я не смог найти avrdude, which avrdudeэто мне ничего не дало. Итак, мне пришлось переустановить ардуино.

sudo aptinstall --reinstall arduino

Это установило avrdude, и я мог найти его в /usr/bin/avrdude. Следующим шагом было установить разрешение на чтение / запись для последовательного порта:

sudo chmod a+rw /dev/ttyACM0

Затем я мог загрузить скетч на свой ардуино!

2020-07-03 13:14

У меня есть решение.

  1. Найдите свой порт, к которому подключен Arduino (например, мой был
    /dev/ttyUSB0). Вы можете найти это в сообщении об ошибке в Arduino IDE.

  2. Откройте терминал (Ctrl+Alt+T).

  3. В терминале запустите:

    sudo chmod 777 /dev/ttyUSB0
    

    Приведенная выше команда устанавливает необходимые разрешения.



11 дек ’19 в 13:22
2019-12-11 13:22

2019-12-11 13:22

If you use an Arduino IDE on Linux (e.g. Ubuntu, Linux Mint, etc.), you may get the following errors while trying to upload a sketch to the Arduino broad:

Caused by: processing.app.SerialException: Error touching serial port ‘/dev/ttyACM0’.
– and –
Caused by: jssc.SerialPortException: Port name – /dev/ttyACM0; Method name – openPort(); Exception type – Permission denied.

In this note i am showing how to permanently fix the “Permission denied” error on the serial port /dev/ttyACM0 while uploading the Arduino sketch.

Cool Tip: Add “Arduino Pro Micro” board to the Arduino IDE! Read more →

The /dev/ttyACM0 device has the group of dialout:

$ stat /dev/ttyACM0
- sample output -
  File: /dev/ttyACM0
  Size: 0         	Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d	Inode: 345         Links: 1     Device type: a6,0
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (   20/ dialout)

The members of the dialout group have full and direct access to serial ports.

To permanently solve the issue with the permissions for /dev/ttyACM0, all you need is to add your user to the dialout group:

$ sudo usermod -a -G dialout <username>

Logout and then log back in for the group changes to take effect.

After that you should be able to upload your sketch to the Arduino broad connected to the serial port /dev/ttyACM0 without any “Permission denied” errors.

Cool Tip: Simulate keystrokes using the Arduino boards! Read more →

Was it useful? Share this post with the world!

I am trying to work with the (new) sparkfun razor IMU 9dof, I wrote a silple sktetch to calibrate the magnetometer:

#include <SparkFunMPU9250-DMP.h> // Include SparkFun MPU-9250-DMP library
#include <Wire.h> // Depending on your Arduino version, you may need to include Wire.h
MPU9250_DMP imu; // Create an instance of the MPU9250_DMP clas
void setup() {
  Serial.begin(115200);

  Serial.println(F("Adafruit 10 DOF Board AHRS Calibration Example")); Serial.println("");

  if (imu.begin() != INV_SUCCESS){
    while (1) {
    Serial.println("Failed to initialize MPU-9250, loop forever");
   }

  }

 imu.setGyroFSR(2000); // Set gyro to 2000 dps

 imu.setAccelFSR(2); // Set accel to +/-2g

 imu.setLPF(5); // Set LPF corner frequency to 5Hz

 imu.setSampleRate(100); // Set sample rate to 10Hz

imu.setCompassSampleRate(100); // Set mag rate to 10Hz
}

void loop(void){
  imu.update();

  // Print the sensor data
  Serial.print("Raw:");
  Serial.print(imu.ax);
  Serial.print(',');
  Serial.print(imu.ay);
  Serial.print(',');
  Serial.print(imu.az);
  Serial.print(',');
  Serial.print(imu.gx);
  Serial.print(',');
  Serial.print(imu.gy);
  Serial.print(',');
  Serial.print(imu.gz);
  Serial.print(',');
  Serial.print(imu.mx);
  Serial.print(',');
  Serial.print(imu.my);
  Serial.print(',');
  Serial.print(imu.mz);
  Serial.println();  

  delay(50);
}

To be sure the Arduino IDE can access to dev/ttcACM0, I did sudo chmod 666 /dev/ttyACM0

I can dowload successfully but when I want to open the terminal I got the following error:

Erreur d’ouverture du port série « /dev/ttyACM0 ». (Port busy) (see attached screenshot)

More over when I entered dmesg on the console, I can see the following messages:

[   94.133923] usb 3-2: USB disconnect, device number 2
[   94.133978] cdc_acm 3-2:1.1: urb 12 failed submission with -19
[   94.135862] cdc_acm 3-2:1.1: urb 13 failed submission with -19
[   94.136059] cdc_acm 3-2:1.1: urb 14 failed submission with -19
[   94.136257] cdc_acm 3-2:1.1: urb 15 failed submission with -19
[   94.136457] cdc_acm 3-2:1.1: urb 2 failed submission with -19
[   94.136656] cdc_acm 3-2:1.1: urb 3 failed submission with -19
[   94.136852] cdc_acm 3-2:1.1: urb 5 failed submission with -19
[   94.137048] cdc_acm 3-2:1.1: urb 6 failed submission with -19
[   94.138841] xhci_hcd 0000:03:00.0: WARN Cannot submit Set TR Deq Ptr
[   94.138843] xhci_hcd 0000:03:00.0: A Set TR Deq Ptr command is pending.
[   94.931853] usb 3-2: new full-speed USB device number 3 using xhci_hcd
[   95.316578] usb 3-2: New USB device found, idVendor=1b4f, idProduct=9d0f
[   95.316581] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   95.316582] usb 3-2: Product: SFE 9DOF-D21
[   95.316584] usb 3-2: Manufacturer: SparkFun
[   95.320306] cdc_acm 3-2:1.0: ttyACM0: USB ACM device
[  858.774849] usb 3-2: USB disconnect, device number 3
[  904.529058] TCP: wlp1s0: Driver has suspect GRO implementation, TCP performance may be compromised.

Does anyone outhere experienced such issue?

Thank you for your help

Fabrice

Arduino Forum

Loading

Понравилась статья? Поделить с друзьями:
  • Ошибка при открытии порта com5
  • Ошибка при открытии порта com3
  • Ошибка при открытии порта com1
  • Ошибка при открытии плей маркет
  • Ошибка при открытии пдф отказ в доступе