Шаги решения ошибки "avrdude: stk500_getsync()"


Ошибка 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