Arduino перестал работать: avrdude: ser_open(): не удается установить com-состояние

Я играю со своим первым устройством Arduino (Arduino Leonardo). Он работал нормально, но в какой-то момент потерпел неудачу. Я получаю эту ошибку:

avrdude: ser_open(): не удается установить com-состояние для "\.\COM6"

При загрузке скетча произошла ошибка

Ошибка возникла из ниоткуда, потому что я не менял порт, кабель или что-то еще. Вроде бы все в порядке: порт, драйвер, IDE, кабель. И все работало всего час назад.

1) Я пытался изменить порт 2) Я переустановил IDE 3) Я пробовал разные кабели

Что еще я могу сделать?

И еще одно: после ручного сброса Arduino (с помощью кнопки) устройство исчезает.

, 👍1


1 ответ


2

При работе с Леонардо и другими платами на базе ATmega32U4 следует помнить, что фактического последовательного подключения нет.

Что есть, так это USB-соединение, которое управляется sketch (и независимо загрузчиком) для обеспечения соединения "CDC/ACM" по USB. Это эмулирует последовательное соединение, но это не настоящее последовательное соединение.

Это на самом деле имеет огромное количество преимуществ, потому что у вас могут быть другие вещи, помимо последовательного порта, такие как клавиатура или мышь. Однако за это приходится платить: последовательный порт зависит от запущенного в данный момент приложения.

Если ваш скетч по какой-либо причине выйдет из строя, последовательный порт больше нельзя будет использовать. Это плохо. Это может повредить ваш Arduino. Поскольку именно скетч обеспечивает движущую силу для последовательной эмуляции CDC/ACM, если этот скетч умирает, то же самое происходит с управлением USB и, следовательно, CDC/ACM.

Таким образом, хотя порт может быть изначально создан скетчем, если он впоследствии выйдет из строя, порт все еще там, но не отвечает. Или порт может полностью исчезнуть.

Так как же вы это исправляете? Что ж, есть пара стратегий:

  1. Некоторые люди добились успеха, дважды быстро нажав кнопку СБРОСА. Однако это зависит от используемой версии загрузчика, и это не то, что я когда-либо пробовал.
  2. Нажмите кнопку RESET в нужный момент, чтобы запустить загрузчик непосредственно перед запуском avrdude, и перехватите его в нужное время, чтобы принять новый скетч, или
  3. Использование аппаратного программатора (например, USBASP) или другого Arduino для очистки чипа и переустановки загрузчика

Мой предпочтительный метод-3, так как он наверняка всегда будет работать - однако для этого требуется либо аппаратный программатор, либо другой Arduino. Однако вы можете купить USBASP на eBay / AliExpress / Amazon и т. Д. Практически Бесплатно, и когда вы работаете с чипами AVR, они всегда полезны, чтобы вытащить вас из трудных мест, подобных этому.

,

большое спасибо. В этом есть полный смысл., @Yevgen