СлабоПосредственноСреднеХорошоОтлично (15 голосов, в среднем: 4,65 из 5)

Загрузка...
burn-chip

 

На ровном месте, после 2-го или 3-го выполнения незамысловатого стандартного скетча eeprom_clear

for (int i = 0; i < 512; i++) EEPROM.write(i, 0); // записываем 0 во все 512 байт памяти EEPROM
digitalWrite(13, HIGH); // зажигаем встроенный светодиод

Я получил «экран смерти» на Arduino Uno, который выглядит так

avrdude stk500_getsync() not in sync resp=0x00

или так

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

Это означает, дословно, что Arduino не отвечает. Не думаю, что стирание EEPROM заодно обнулило Bootloader платы или еще что-нибудь испортило. Скорее всего совпадение. Хотя кто их, китайцев, знает. Встроенный светодиод на 13 пине так и остался сиротливо гореть.

Гугление показало, что с «getsync() not in sync resp=0x00» рано или поздно сталкивается каждый надцатый активный ардуинщик.

Так или иначе, но процесс восстановления напоминает шаманские танцы с бубном. Впрочем, как всегда.

 

Loopback тест Arduino

Первым делом проведите Loopback тест для выяснения, есть ли связь между ПК и Arduino. Успешный тест покажет, что вся цепочка: компьютер, драйвер, кабель USB, и USB to serial converter работает.

  1. Отключить питание и USB
  2. Удалить все соединения и шилды из платы
  3. Принудительно отключить процессор замкнув RESET на GND
  4. Соединить TX пин (Digital Pin 1) и RX пин (Digital Pin 0)
  5. Соединить плату с ПК.
  6. Запустить терминал последовательного порта. Стандартный Serial Monitor от Arduino IDE подойдет. Скорость порта (baud rate) не имеет значения. Я выставил 9600.
  7. Наберите что-нибудь с клавиатуры и нажмите Enter. Все символы, которые вы набрали должны вернуться обратно. Если это так, то плата прошла тест. Т.е. драйвер компьютера, кабель USB, и преобразователь USB-to-Serial работают.

Моя китайская реплика Arduino UNO loopback тест прошла. Но по прежнему не работала.

Решение stk500_getsync() 0x00

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

например, так:

Временно мне помогло следующее.

  1. Отключить USB (и питание)
  2. Зажать кнопку RESET
  3. Подключить USB. Кнопку RESET не отпускать!
  4. Дать команду залить скетч.
  5. Поймать момент после окончания компиляции и самым началом заливки скетча и в этот момент отпустить кнопку RESET

Я сделал около десятка попыток.

Однако радость была преждевременной. Плата так и не заработала.

Решить проблему удалось только перепрошивкой bootloader с помощью второй Arduino UNO.
Попутно узнал, что оказывается в ATmega есть отображение heartbeat. Обычно загрузчик для Arduino Uno и аналогичных плат имеет функцию heartbeat, чтобы сообщить пользователю что он жив: это три быстрых мигания встроенным светодиодом на контакте 13, сразу после загрузки.