Avrdude arduino error

В этом уроке разберём ошибки компиляции и загрузки, их причины и варианты устранения. А также ответим на самые часто задаваемые вопросы

Первая прошивка


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

1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:

  • Неисправен USB кабель.
  • Неисправен USB порт компьютера.
  • Неисправен USB порт Arduino.
  • Попробуйте другой компьютер, чтобы исключить часть проблем из списка.
  • Попробуйте другую плату, чтобы исключить часть проблем из списка.
  • На плате Arduino сгорел диод по питанию USB.
  • Плата Arduino сгорела полностью из-за неправильного подключения питания или короткого замыкания

2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Кабель должен быть data-кабелем, а не “зарядным”.
  • Кабель желательно втыкать напрямую в компьютер, а не через USB-хаб.
  • Не установлены драйверы для Arduino.

3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, отличный от COM1. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Некорректно установлен драйвер CH341.
  • Если список портов вообще неактивен – драйвер Arduino установлен некорректно, вернитесь к установке
  • Возникла системная ошибка, обратитесь к знакомому компьютерщику

4. Выбираем свою плату. Если это Arduino Nano, выбираем в ИнструментыПлатаArduino Nano. Если другая – выбираем другую. Нажимаем стрелочку в левом верхнем углу (загрузить прошивку). Да, загружаем пустую прошивку.

  • [Для Arduino Nano] В микроконтроллер китайских нанок зашит “старый” загрузчик, поэтому выбираем ИнструментыПроцессорATmega328p (Old Bootloader). Некоторые китайцы зашивают в свои платы новый загрузчик, поэтому если прошивка не загрузилась (загрузка идёт минуту и вылетает ошибка avrdude: stk500_getsync()) – попробуйте сменить пункт Процессор на ATmega328p.

Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.

Ошибки компиляции


Возникает на этапе компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки.

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
  • В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать.
  • В скачанных с интернета готовых скетчах часто возникает ошибка с описанием название_файла.h no such file or directory. Это означает, что в скетче используется библиотека <название файла>, и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по название файла.
  • При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
  • Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
  • Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
  • Ошибка недостаточно свободного места возникает по вполне понятным причинам. Возможно поможет урок по оптимизации кода.

Частые ошибки в коде, приводящие к ошибке компиляции


  • expected ‘,’ or ‘;’ – пропущена запятая или точка запятой на предыдущей строке
  • stray ‘320’ in program – русские символы в коде
  • expected unqualified-id before numeric constant – имя переменной не может начинаться с цифры
  • … was not declared in this scope – переменная или функция используется, но не объявлена. Компилятор не может её найти
  • redefinition of … – повторное объявление функции или переменной
  • storage size of … isn’t known – массив задан без указания размера

Ошибки загрузки


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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device, если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях IDE нужно выбирать ATmega328P (Old Bootloader) для китайских плат NANO.
  • Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
  • Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
  • Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

Предупреждения


Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет критических ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:

  • # Pragma message… – это просто сообщения, оставленные разработчиком проекта или библиотеки. Чаще всего номер версии и прочая информация.
  • Недостаточно памяти, программа может работать нестабильно – Чуть выше этого предупреждения обычно идёт информация о задействованной памяти. Память устройства можно добивать до 99%, ничего страшного не случится. Это флэш память и во время работы она не изменяется. А вот динамическую память желательно забивать не более 85-90%, иначе реально могут быть непонятные глюки в работе, так как память постоянно “бурлит” во время работы. НО. Это зависит от скетча и в первую очередь от количества локальных переменных. Можно написать такой код, который будет стабильно работать при 99% занятой SRAM памяти. Так что ещё раз: это всего лишь предупреждение, а не ошибка.

FAQ


Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:

  • Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс Flash памяти. А он довольно большой.
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
  • Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов. Подробнее в этом уроке.
  • Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию. Подробнее в этом уроке.
    • Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
    • Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу.
    • Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь.
    • Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI

Видео


Полезные страницы


  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

I had this problem when working with Arduino IDE and XOD running on top of it.
What I found; looked like baud rates were being set differently at different stages in the setup. I compared Windows ‘device settings’, arduino IDE settings and XOD settings…and they are not the same and seem to change ? …hence the ‘avrdude:stk500_**** errors!

To demonstrate

Connect an Arduino board to a PC USB socket.

  1. On Windows 7; Control Panel System and SecuritySystem Device Manager… then double-click on ‘Ports (COM & LPT)

    You should see FTDI

    or

    USB-SERIAL CH340(COM7) … for a chinese serial com chip on the arduino board.
    Right-click on this and check ‘Properties Port Settings’ and note the ‘Bits per second’ value : e.g. 57600 … (write it down !)

  2. Open the arduino IDE and click on FilePreferences and tick the option ;’Show verbose output during: ‘upload‘.Then close the ‘Preferences’ screen.

  3. Load a small program that works. e.g. FileExamples1.Blink

  4. In the for your arduino board setup in the Arduino IDE;

    ToolsBoard … such as Arduino Nano

    ToolsProcessor … such as ATmega328P

    ToolsPort:COM7 for example … make sure a tick is selected.

    ToolsGet Board Info … will show info from the arduino serial chip (a good sign your usb cable works!)

  5. On the IDE toolbar select;

    • ‘Verify’ and shortly it should show ‘Done Compiling’

    • Click ‘Upload’ and the Blink program should load into the arduino chip.

  6. Now here is the interesting observation; The ‘verbose message at the bottom of the IDE screen will indicate what ‘Overriding Baud Rate : XXXXX’ is being used! Write this number down next to the value you found on the Windows devices setting.

  7. Now, if you are a XOD man, leave the arduino IDE running and run XOD.

  8. Open the XOD IDE and open (Deploy) say the 01-hello program and load it into your arduino board.

  9. Select’welcome-xod’ and select 01-hello program on left-side menu.

  10. Select ‘DeployUpload to Arduino …’

  11. select ‘Board model:’ and ‘Serial port:’ … eg COM7

  12. Scroll up in the ‘Deployment ‘ window and there will be another value labeled ‘Overriding Baud Rate : e.g.115200’

I HAVE FOUND THESE BAUD RATE SETTINGS CHANGE INEXPLICABLY !

I hope my observations will throw some light on your problem of erratic uploads.

Ошибка avrdude: stk500_getsync(): not in sync: resp=0x00 и как ее решить?

Данная ошибка периодически появляется практически у всех, чаще всего у новичков, хотя и не только, что же с ней делать? Давайте разбираться.

  1. Для начала нужно убедиться что в диспетчере устройств ваша плата отображается правильно, и там нету никаких красных крестиков или желтых кружочков с восклицательным знаком, то есть у вас должно быть что-то вроде этого (так должна определяться плата Arduino Uno на чипе CH340T):

или этого:

Если у вас есть тут восклицательный знак или вообще неопознанное устройство, то проблема скорее всего с драйверами, пробуйте их найти и переустановить или попробуйте подключить плату к другому выходу USB. Если тут все хорошо, идем далее

  1. В среде разработки ардуино нужно убедиться что у вас правильно выбрана плата, и ком-порт. Новичком я часто сталкивался с этой проблемой, когда отключив плату, я поправлял код программы, затем подключал плату, пытался ее прошить и видел эту ошибку, а дело в том что просто слетала галка с нужного ком-порта, как здесь:

            

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

     3. Иногда помогает нажатие кнопки Reset на плате в момент заливки скетча. Было у меня такое при работе с платой Arduino Pro Mini при прошивке ее через модуль cp2102 — usb. Запускаем заливку скетча и следим за статусной строкой в среде Arduino.

Как только после надписи «Компиляция скетча» появится надпись «Вгружаем» — необходимо в течение секунды клацнуть кнопочку «Reset» на плате , и вместо ошибки «avrdude: stk500_getsync(): not in sync: resp=0x00» можем получить благополучное «Вгрузили» 

4. Для некоторых плат, например Arduino Nano, Arduino Pro Micro и некоторых других бывает такая ситуация, что вы думаете что прошиваете один чип , а на самом деле на плате он другой (Вместо atmega328 может быть atmega168). Необходимо присмотреться на чип, возможно посветить фонариком, либо сфотографировать.

И если чип действительно другой, необходимо выбрать именно его в выборе процессора 

5. Был у меня один случай, когда плата нивкакую не хотела шиться имея сетевой шилд на борту. Простой скетч моргалки без шилда – льется, с шилдом тот же скетч – злополучный avrdude: stk500_getsync(): not in sync . Долго мы с товарищем ломали голову над данной проблемой, пока я не вычитал что на этой неудачной китайской копии ATmega328P UNO R3 CH340T Instead 16U2 неправильно впаян ICSP разъём, если у вас та же ситуация, то вам сюда

Хорошо если у вас есть точно такая же плата, на которой у вас происходит ошибка. Тогда просто подключаем ее , убеждаемся что в среде ардуино стоит галка на правильном ком-порте и пытаемся шить, если же она успешно шьётся, значит проблема таки в плате, если же тоже шиться не хочет, то это либо драйвер, либо кабель, либо usb-порт.

Итак если проблема осталась, а вышеперечисленные пункты вам не помогли то нужно разбираться дальше. У меня такая проблема была как раз в упомянутой плате ATmega328P UNO R3 CH340T Instead 16U2 . У меня их две, и как раз была ситуация, когда с одной платой скетчи не хотели литься, но подменив на другую такую же плату, скетч легко залился, и так я понял что проблема точно в плате (отсекая разные варианты с драйверами или низкой скоростью ком-порта о которой часто пишут, также ктото писал что кому-то помогала перезагрузка, но тут мы видим сразу – эта шьется, эта нет, и голову ломать не нужно о дровах, кабелях, скорости, статическом электричестве и т п). Нагуглив что же делать в такой ситуации я выяснил, что необходимо проверить возвращение данных при замыкании rx-tx. То есть нужно перемычкой замкнуть каналы RX и TX – это digital 0 и digital 1 (они обычно подписаны) и далее нужно найти какую-нибудь программу-терминал, например Putty.

Итак, замыкаем эти контакты, подключаем плату, открываем putty, выбираем Serial, указываем порт на котором висит наша ардуина и жмем open. 

Появляется терминальое окно, и тут нам просто необходимо что-то написать, если мы видим написанные символы, это хорошо – пути на ардуине до главной микросхемы целы и прошив контроллер есть шанс вернуть плату к жизни. Если же мы пишем, а символы в окне не появляются, значит похоже обрыв на дорожках самой платы, либо неисправны какие-либо другие элементы платы, то есть проблема не в микросхеме (с таким я не сталкивался, но полагаю нужно найти принципиальную схему ардуины, например тут, вооружиться тестером и прозванивать). У меня написанные символы отобразились, то есть дело в микросхеме. Посмотрев что на плате эта микросхема относительно легко достается, я поменял эти микросхемы местами с другой платой и убедился что с другой рабочей микросхемой ардуинка благополучно шьётся. Что же дальше? Конечно, можно заказать эту микросхему, стоит она вчетверо дешевле самой ардуины, и проблема решена, но ведь есть вариант прошить. Есть много способов прошивки, для коих нужны разные программаторы и прочее, но есть способ прошития ардуины другой ардуиной, вот им я и заинтересовался. На официальном сайте есть подробная инструкция, вот что там примерно говорится:

 Возьмите плату прошивальщик, то есть рабочую, которой будете прошивать, подключите ее, выберите правильно сом-порт, и залейте в нее скетч ArduinoISP (этот скетч есть в стандартном наборе программ)

Далее необходимо соединить плату прошивальщик с прошиваемой платой, вот эта схема для моей ардуино уно и совместимых с ней:

Снизу плата-прошивальщик , к ней подключается юсб-кабель, сверху плата-пациент, которую мы прошиваем. Также далее в инструкции написано, что если плата уно, то к ней необходимо повесить конденсатор на 10uF между reset и ground , но вот к донору или прошивальщику – непонятно. В итоге оказалось что к прошивальщику. Благо конденсатор такой у меня нашелся, обычный электролитический, из какой-то материнки. Далее необходимо в среде ардуино выбрать программатор Arduino as ISP

И после этого можно прошивать – инструменты – burn bootloader

Итак, я подключил проводки, поставил между землей и резетом конденсатор, но сначала методом тыка я поставил конденсатор на донора, подключил юсб кабель к прошевающей плате и увидел как на моем пациенте засветились огоньки одновременно с огоньками прошивальщика (так они не мигали совсем, тупо горел только индикатор питания), это меня уже порадовало, убедившись что скетч ArduinoISP у меня залит, выбрана правильная плата, ком-порт и программатор я нажал Burn Bootloader и увидел ошибку. Расстроился конечно, подумал что придется таки заказывать эту микруху, но вспомнил о кондесаторе и пересадил его с пациента на прошивальщика (отключив естественно предварительно кабель). Итак, подключив кабель я снова нажал  Burn Bootloader и о чудо! На обеих платах начали быстро моргать огоньки, и гдето через минуту среда ардуино сказала мне что прошивка завершена. Отключив питание, я отключил все проводки и для начала проверил все ли в порядке с платой прошивальщиком – подключил ее, залил самый простой скетч блинк и он благополучо заработал. Отключив плату, я подключил пациента, и попробовал залить скетч в нее. Ошибку он не выдал! Скетч благополучно залился и начал успешно моргать раз в секунду! Вот и все, оказалось ничего сложного в этой прошивке нету. Очень надеюсь, что эта инструкция поможет кому-то еще, удачи!

Если вам эта информация не помогла, почитайте инструкцию по подробной диагностике чипов Ардуино с помощью второй ардуино платы. По всем вопросам пишите на arduinos.by@gmail.com 

Ever stumbled across this error message when trying to upload a sketch?

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

avrdude: stk500_recv(): error message from Arduino IDE

Is this some kind of joke? Who is this mysterious AVR Dude, why is he so uncool, and — most importantly — what does he have against you trying to upload a sketch to your Arduino? It’s beyond frustrating.

In this quick lesson, you’ll learn how to banish the mysterious AVR dude to the dusty highways of the nether realms. Or, to be less poetic, you’ll learn how to get rid of this error so you can get back to uploading your sketch.

So who is this AVR dude, and why does the error happen?

AVRDude stands for AVR Downloader Uploader and is a utility used by the Arduino IDE. The utility’s main job is pretty straightforward — it allows you to load code onto your Arduino board.

So that’s who the dude is, but why does the error happen?

The avrdude: stk500_recv() error message is alerting you to a generic connection error between your computer and the Arduino. I wish I could keep it simple and tell you this error happens because of one single problem, but that would be too easy. This generic error can pop up for a host of reasons.

But don’t worry, I’ve got your back. In this lesson, I’m going to go through a “laundry list” of possible solutions. (Many thanks to “The Guy with The Hat” from the Arduino Stack Exchange for compiling this great list of fixes.) I’ll walk through each in detail, starting at the most common and easiest and moving on to more detailed troubleshooting tasks if those don’t work.

Here goes.

Let’s start with the easy stuff

Before we touch on some of the more elaborate and involved potential solutions, it’s smart to rule out all those obvious and small glitches.

  • Disconnect and reconnect the USB cable: I told you we’d start simple.
  • Press the reset button: If your Arduino board has a reset button on it, press it and see if you can now upload without the avrdude: stk500_recv() error.
  • Close and reopen the Arduino IDE: Giving the Arduino IDE a fresh start can fix a host of problems avrdude stk500_recv errors included.
  • Make sure you have the right Arduino board selected: In the Arduino IDE, go to Tools> Board, and select the Arduino board you’re using from the list.

select Arduino Board from Arduino IDE

  • Make sure you have the correct port selected: In the Arduino IDE, go to Tools>Port and select the port corresponding to your board. On a PC, it will start with COM. On a Mac, it should start with cu.usb.
    select Arduino Port from Arduino IDE

Useful tip: If you’re unsure of the correct port, take note of all the ports you have listed. Then disconnect your Arduino board from the USB cable and check the port menu again. The port now missing from the list is the port your Arduino was using. 

  • Remove connections to the RX and TX pins: The Receive (RX) and Transmit (TX) pins (pins 0 and 1) are used when you upload sketches to your Arduino board. Unplugging connections to those pins may banish the avrdude: stk500_recv() upload error.
  • Remove any shields: If you have an Arduino shield attached to your Arduino board, remove the shield and try uploading again. The shield may have a circuit interfering with the transmit and receive pins.

Still getting avrdude: stk500_recv() error?

If you’re still getting the avrdude: stk500_recv() error, all is not lost — not by a long shot. It’s time to dig into some real troubleshooting.

So what could be going wrong here? We know the problem could be at three possible locations: the USB cable, the Arduino Board, or your computer. We’ll use a process of elimination to figure out the point of failure.

  • Test the USB Cable: USB cables fail, and surprisingly often. Check to see if using a different USB cable gets rid of the avrdude: stk500_recv() error.
  • Test another Arduino board: If you have one handy, try uploading to another Arduino board. Did the avrdude: stk500_recv() error suddenly vanish? Your original board is the likely culprit.
  • Test a different computer: If you’ve ruled out your USB cable and Arduino board, try uploading your sketch to another computer with the Arduino IDE installed on it. If you can successfully upload a sketch to the other computer, the avrdude: stk500_recv() error probably originates at your computer.

Once you have some hard data on the point of failure, you can read one of the following three sections to hone in on resolving the avrdude: stk500_recv() error.

The USB cable is to blame!

Well, I’ll go right ahead and state the obvious solution. Use a different cable 🙂

My computer is the problem

Here are three fixes you can try.

  • Reinstall the Arduino IDE: Just go to the Arduino website, download the most recent version of the IDE and install it again. Don’t worry, this won’t affect your old sketches. They’ll still be stored in your sketchbook folder.
  • Reinstall drivers: If you’re still getting the avrdude: stk500_recv() error, you’ll need to check that your drivers are installed correctly. These should be installed automatically when you install the Arduino IDE, but you can always try installing them manually.
  • Check to see if you need different drivers: Some Arduino clones require special drivers. You should be able to download these drivers from the website of the company that makes the board. If you can’t, contact the company directly.

My Arduino board is causing the stk500_recv() error:

This is where things get a little dicey. It may be that your Arduino board is bricked  — electronics speak for broken in a manner that does not allow fixing. But try these steps before you throw it out and buy a new board:

  • Check that the microcontroller is seated properly: Some Arduino boards have a removable microcontroller chip — the Arduino UNO, for example. Check that it’s seated properly on the circuit board.
  • Burn a new bootloader: The bootloader is a program on your microcontroller that allows sketches to run. A corrupt bootloader can cause the stk500_recv() error. Try burning a new bootloader on the microcontroller.
  • Swap out a spare microcontroller: Got a spare microcontroller handy? If the kaput Arduino board has a removable microcontroller, you could always replace it with your backup microcontroller. You’ll have to load the microcontroller with the bootloader — as described in the previous step.

Have you banished the dude?

By the time you get here, you’ll hopefully have banished the AVR dude back to the shadowy chaos realm from whence he sprung. With any luck, you’ll never meet him again. But if you do, now you have some tricks up your sleeve to get rid of the avrdude: stk500_recv() error swiftly and efficiently.

If you’re still getting the error, please read the comments below. You may find the hidden clue you’ve been looking for. Drop us a line in the comments if you don’t — someone out there may have faced the same problem.

And, of course, if you found a different solution, please leave a comment — it may help someone else.

Because sometimes evil dude banishment takes a village.

There is some voodoo-talk in the answers around here among good ideas. Let’s try to be a bit more real about what’s happening and sum up the good stuff to check:

Basically, when that happens, it is a good idea to enable verbose mode for AVRDUDE, to get a better idea of what’s happening. To do so, you only need to go in the preferences and check the verbose mode box. It’s also a good idea to move away from the Arduino IDE, and launch a console to be more comfortable on reading AVRDUDE’s output, that you’ll get on clicking on the upload button.

What’s important here to put 3 or 4 -v to the command call. Here’s how looks like such AVRDUDE commands, with made up parameters as they are totally dependent on how the Arduino has been installed:

avrdude -v -v -v -v -C /path/to/avrdude.conf -patmega328 -P/dev/usbport -U flash:w:/path/to/firmware.hex

A good way to get the correct command line to use is to copy it from the verbose output of the Arduino IDE output log when verbosity has been enabled.

When you get avrdude: stk500_recv(): programmer is not responding, it basically means that something wrong is happening, before the flashing actually begins.

Basically you have to check (from hardware to software, low level to high level):

  • if the cable and/or connectors does not have microcuts;
  • if no solder points are short circuiting (i.e. touching something metallic around), that means:
    • if there is no short circuit on the PCB between Rx and Tx (usually pins 1 and 0);
    • if there is no contact with a metallic element below the board, or tiny bits between a component’s legs (like the FTDI, the ATmega chip or any other);
  • if the ATmega chip is not out of power (GND/VCC shortcut or cut or VCC input being dead…);
  • if the 1 and 0 pins of the Arduino are not being used by some shield or custom design (/! does not apply to the Leonardo as it has independent USB handling);
  • if the USB to UART converter does not have a problem (FTDI on older Duemilanove or ATmega16U2 on newer Arduino Unos);
  • if the ATmega328 chip is fried or wrongly installed;
  • if the bootloader has been overwritten or is failing;
  • if the right baudrate is applied for entering the bootloader;
  • if the right settings are set for the target microcontroller and Board;

Usually the avrdude -v -v -v -v can help a lot find at which stage it is failing. Whether it can’t make a USB connection at all (cable failing, USB/UART, PCB…), or it is a bootloader problem.

Update: I tried turning the onboard ATmega and fitting it in the other direction. Now, I encounter no problems uploading, but nothing happens afterwards. The onboard LED also does not seem to be blinking.

I’m afraid that if you reversed the position of the ATmega, and then it does not work, the fact that you placed the power source on digital pins may have burnt your chip.

Совершенно неожиданно у меня возникла проблема с добавлением нового скетча в Arduino. Arduino IDE стал зависать на моменте загрузки скетч в микроконтроллер на долгое время и потом выдавать множественные ошибки вида:

Код: Выделить всё

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x45
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x45
avrdude: stk500_recv(): programmer is not responding
.....
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x45
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x45

У меня была китайская Arduino Uno rev3, с которой я работал уже полгода без проблем. Покупал тут в составе набора для изучения (Starter Kit), и ей даже китайский драйвер CH340 не понадобился, заработала с фирменным из состава IDE. И внезапная ошибка «avrdude: stk500_recv(): programmer is not responding» меня — неопытного новичка, немного напугала. Четких инструкций для решения я не смог найти: либо старая версия IDE с несуществующими командами, либо не мой случай. Но вот, что случилось у меня. У китайцев для прошивки контролеров без USB (типа Arduino Mini) я прикупил программатора USBasp, который надо подключать к разъему ICSP на плате и немного «поиграл» с ним для проверки, заливая программу в большую Arduino Uno.

Разъемов, кстати, две штуки на плате, еще один для прошивки самого контролера USB интерфейса. Но нам это не нужно.
Изображение
И я так понял: при использовании программатора напрямую в ATmega заливается только сам скомпилированный код HEX, что позволяет сэкономить немного памяти для больших программ. А для работы через USB нужен еще и загрузчик Bootloader, который стирается программатором. И поэтому его нужно восстановить. Отключаем USB, подключаем назад USBasp и выбираем пункт Burn Bootloader, очень быстро внизу появится сообщение, что загрузчик успешно загружен и все! Можно снова подключаться по USB и работать как раньше.

Обратите внимание, что у меня выбран тип программатора USBasp (programmer), тип платы Arduino/Genuino Uno, а виртуального порта подключения нет, потому что USB отключен.

А вот если в меню выбрать пункт Export compiled Binary, то в папке проекта мы получи два файла:

  • test.ino.with_bootloader.standard.hex
  • test.ino.standard.hex

Которые будут отличаться небольшим куском кода, добавленным в конце.

Эти файлы нужно прошивать опять же программатором, использую специальные программы. Например, тот же AVRDude, название которого мы видим в ошибке.
Изображение
Но это уже другая история, свою проблему я решил, чего и вам желаю.

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

https://arduinomaster.ru/platy-arduino/ … duino-uno/

Когда вы прошиваете контроллер своим скетчем, он записывается именно сюда. 2кБ из данного пула памяти отводится на bootloader- программу, которая занимается инициализацией системы, загрузки через USB и запуска скетча.

Драйвер USBasp-win-driver-x86-x64-v3.0.7.zip для своего китайского USBasp программатора я скачал отсюда USBasp AVR Programmer, Program Atmel AVR microcontrollers:

https://protostack.com.au/shop/accessor … -downloads

Ставил его на Windows 7 SP1 x64, устройство в системе появилось с названием libusbK Usb Devices. Драйверы есть еще у Zadig, на его сайт ссылается сам Thomas Fischl.

Возможные ошибки при работе с Arduino.

avrdude: stk500_getsync(): not in sync: resp=0x00

Если вы получаете сообщение об ошибке: «avrdude: stk500_getsync(): not in sync: resp=0x00«,
то это означает, что Arduino не отвечает.
Существуют масса причин, почему это может происходить.

Попробуйте проверить следующее:
* Подаётся ли на плату питание (если контроллер подключается через USB, то джампером должен быть выбран соответствующий режим работы)
* Проверьте правильность и надёжность соединения контроллера Arduino с ПК
* Если у вас Arduino NG, ты нажмите кнопку сброса перед загрузкой скетча (нажатием Upload)
* Убедитесь, что в Arduino IDE у вас выбран правильный последовательный порт.
* Попробуйте переустановить драйвер.
* Верно ли установлен чип микроконтроллера (если вы собрали свой собственный Arduino, то прошит ли загрузчик(bootloader)?)
* Правильная ли версия загрузчика? (если вы собрали свой собственный Arduino)
* Проверьте — не подключено ли у вас что-либо к UART-у микроконтроллера (у Arduino Mega — к «0-му» UART-у), т.к. находящееся на UART-е устройство может помешать загрузке скетча через bootloader.

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

java.lang.NullPointerException at processing.app.Serial.setDTR.


Если вы получаете сообщение об ошибке: «java.lang.NullPointerException at processing.app.Serial.setDTR(Serial.java:480)«, то это означает, что неправильно выбран последовательный порт (меню Tools — Serial port)

avrdude: Expected signature for ATMEGA is …


Если вы получаете сообщение об ошибке: «avrdude: Expected signature for ATMEGA is …«, то это означает, что либо неправильно выбрана версия МК (меню Tools — Board) или на МК прошит неверный загрузчик.

ser_send(): write error: sorry no info avail

Неправильно выбран последовательный порт (меню Tools — Serial port).

Ссылки
Arduino Tutorial HHHHHEEEEEEEEEEEEEEEEEEEEEEEELLLLLLLLLPPPPPPPPPPPPP!

По теме
Подготовка к работе с Arduino/CraftDuino
Ардуино что это и зачем?
Arduino, термины, начало работы
Разновидности плат Arduino, а также про клоны, оригиналы и совместимость
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)

Собрали новый проект.

Написали скетч.

Прошиваем….

Ооопс!

avrdude: stk500_recv(): programmer is not responding

«Но ведь вчера же все работало!»(с)

Не беда, советов по устранению на форумах много:

  1. В Arduino IDE не правильно указан порт к которому в системе подключено устройство. Перепроверяем.
  2. В Arduino IDE не правильно указана модель нашей железки. Перепроверяем.
  3. Проблема с кабелем. Заменяем
  4. Еще есть проблемы со скоростью порта и прочими разными, это все расписано…

Но… есть еще один вариант, про который нигде не написано… 

Если до этого arduino использовалась в других проектах и в нее уже прошит другой скетч… В новой схеме она может просто замыкаться уже назначенными на другое дело пинами =) 

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

Проверено на собственной глупости =)

UPD: По просьбам из комментариев еще один частый вариант: помимо правильно указанной платы в Arduino IDE нужно проверить правильность указания процессора (просто ATmega или Old Bootloader)
Спасибо за комментарии и активность в теме =)

Содержание

  1. Решение: avrdude: ser_open (): не удается открыть устройство на Arduino
  2. Решение
  3. Инструмент устранения неполадок AVRDUDE
  4. АВРДУДЕ
  5. Это может вас заинтересовать:
  6. 1 комментарий к «Решение: avrdude: ser_open (): не удается открыть устройство на Arduino»
  7. Первая прошивка, ошибки, FAQ
  8. Первая прошивка
  9. Ошибки компиляции
  10. Частые ошибки в коде, приводящие к ошибке компиляции
  11. Ошибки загрузки
  12. Предупреждения
  13. Видео

Решение: avrdude: ser_open (): не удается открыть устройство на Arduino

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

В этой статье я объясню, как решить частую ошибку в Arduino:

После долгого времени без использования Arduino я взял две вставки (оригинал и Элегу) поработать с дочерью. Подключаю их, собираюсь поставить моргание, чтобы убедиться, что все в порядке и когда иду отправлять на плату, возвращает известную ошибку.

И на моем ПК, и на моем ноутбуке установлена ​​Ubuntu 18.04.

Решение

Я начинаю с перехода по предложенной ими ссылке. И я следую по шагам

En инструменты / пластина Выбрано Arduino / Genuino Uno

En инструменты / последовательный порт / dev / ttyACM0

и, как указано в документации, в случае возникновения проблем с драйверами и разрешениями я открываю терминал и выполняю:

где ваш логин ваше имя пользователя

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

У меня все еще не работает, и документация Arduino больше не помогает. Так что я продолжал искать на форумах и в блогах. Если на этом этапе у вас не работает и вы похожи на меня. Следуйте следующим шагам

ls / dev / ttyACM0 возвращает / dev / ttyACM0
ls -l / dev / ttyACM0 возвращает crw-rw—- 1 root dialout 166, 0 26 ноября 16:41 / dev / ttyACM

Этим подтверждаем, что порт существует

Мы собираемся дать разрешения и проверить, есть ли у нашего пользователя необходимые разрешения.

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

Что сработало для меня, так это переустановка Arduino.

Если вы проверите

И ничего не возвращает, переустановка Ардуино должна решаться.

И если вам не удалось решить проблему, оставьте мне комментарий, и я постараюсь вам помочь.

Инструмент устранения неполадок AVRDUDE

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

АВРДУДЕ

Оставлю немного информации, чтобы лучше понять, что такое AVRDUDE. Название происходит от AVRDUDE — AVR Downloader / UploaDEr.

AVRDUDE — это утилита для загрузки / выгрузки / управления содержимым ROM и EEPROM микроконтроллеров AVR с использованием техники внутрисистемного программирования (ISP).

AVRDUDE был запущен Брайаном С. Дином как частный проект в качестве программиста для серии микроконтроллеров Atmel AVR.

Вы можете найти программное обеспечение и другую информацию в сайт проекта.

Это может вас заинтересовать:

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

1 комментарий к «Решение: avrdude: ser_open (): не удается открыть устройство на Arduino»

У меня проблема с arduino, он не взаимодействует с ide или наоборот, у меня все хорошо настроено, все порты и т. Д. Я загрузил флип, но я не знаю, как он работает, чтобы перезагрузить прошивку, которая, как мне кажется, что не удается, вы могли бы немного подробнее рассказать, как переустановить arduino, спасибо, я новичок в этом

Источник

Первая прошивка, ошибки, FAQ

Первая прошивка

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

1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:

  • Неисправен USB кабель.
  • Неисправен USB порт компьютера.
  • Неисправен USB порт Arduino.
  • Попробуйте другой компьютер, чтобы исключить часть проблем из списка.
  • Попробуйте другую плату, чтобы исключить часть проблем из списка.
  • На плате Arduino сгорел диод по питанию USB.
  • Плата Arduino сгорела полностью из-за неправильного подключения питания или короткого замыкания

2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Кабель должен быть data-кабелем, а не “зарядным”.
  • Кабель желательно втыкать напрямую в компьютер, а не через USB-хаб.
  • Не установлены драйверы для Arduino.

3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, отличный от COM1. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Некорректно установлен драйвер CH341.
  • Если список портов вообще неактивен – драйвер Arduino установлен некорректно, вернитесь к установке
  • Возникла системная ошибка, обратитесь к знакомому компьютерщику

4. Выбираем свою плату. Если это Arduino Nano, выбираем в ИнструментыПлатаArduino Nano. Если другая – выбираем другую. Нажимаем стрелочку в левом верхнем углу (загрузить прошивку). Да, загружаем пустую прошивку.

  • [Для Arduino Nano] В микроконтроллер китайских нанок зашит “старый” загрузчик, поэтому выбираем ИнструментыПроцессорATmega328p (Old Bootloader). Некоторые китайцы зашивают в свои платы новый загрузчик, поэтому если прошивка не загрузилась (загрузка идёт минуту и вылетает ошибка avrdude: stk500_getsync()) – попробуйте сменить пункт Процессор на ATmega328p.

Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.

Ошибки компиляции

Возникает на этапе компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки.

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
  • В чёрном окошке в самом низу Arduino IDE можно прочитать полный текстошибки и понять, куда копать.
  • В скачанных с интернета готовых скетчах часто возникает ошибка с описанием название_файла.h no such file or directory. Это означает, что в скетче используется библиотека , и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по название файла.
  • При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
  • Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
  • Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
  • Ошибка недостаточно свободного места возникает по вполне понятным причинам. Возможно поможет урок по оптимизации кода.

Частые ошибки в коде, приводящие к ошибке компиляции

  • expected ‘,’ or ‘;’ – пропущена запятая или точка запятой на предыдущей строке
  • stray ‘320’ in program – русские символы в коде
  • expected unqualified-id before numeric constant – имя переменной не может начинаться с цифры
  • … was not declared in this scope – переменная или функция используется, но не объявлена. Компилятор не может её найти
  • redefinition of … – повторное объявление функции или переменной
  • storage size of … isn’t known – массив задан без указания размера

Ошибки загрузки

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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device, если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях IDE нужно выбирать ATmega328P (Old Bootloader) для китайских плат NANO.
  • Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
  • Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
  • Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

Предупреждения

Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет критических ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:

  • # Pragma message… – это просто сообщения, оставленные разработчиком проекта или библиотеки. Чаще всего номер версии и прочая информация.
  • Недостаточно памяти, программа может работать нестабильно – Чуть выше этого предупреждения обычно идёт информация о задействованной памяти. Память устройства можно добивать до 99%, ничего страшного не случится. Это флэш память и во время работы она не изменяется. А вот динамическую память желательно забивать не более 85-90%, иначе реально могут быть непонятные глюки в работе, так как память постоянно “бурлит” во время работы. НО. Это зависит от скетча и в первую очередь от количества локальных переменных. Можно написать такой код, который будет стабильно работать при 99% занятой SRAM памяти. Так что ещё раз: это всего лишь предупреждение, а не ошибка.

Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:

  • Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс Flash памяти. А он довольно большой.
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
  • Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов. Подробнее в этом уроке.
  • Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию. Подробнее в этом уроке.
    • Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
    • Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу.
    • Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь.
    • Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI

Видео

Источник

Понравилась статья? Поделить с друзьями:
  • Avr relay weld apc ошибка
  • Avr gcc error no such file or directory
  • Avr g error missing device or architecture after mmcu
  • Avr g error createprocess no such file or directory arduino
  • Avpui exe системное предупреждение unknown hard error