Ошибка проверки Avrdude после нескольких месяцев успешного использования

У меня есть 2560, с которым я работаю некоторое время (более года точно), программируя его с помощью avrisp mk2. Все это время никаких проблем, но вдруг, пару дней назад, он начинает давать сбой с

avrdude: verification error, first mismatch at byte 0x0002
         0x01 != 0x95
avrdude: verification error; content mismatch

И совершенно очевидно, что не мигает (есть логика, что светодиод мигает при загрузке, а светодиод больше не мигает).

В первый раз плата оказалась полностью мертвой - программатор ее не опознал и отказался прошивать. Через несколько дней и волшебства он снова начал распознавать его и перепрошивать мою прошивку, но ошибка проверки сохраняется. Расположение ошибки не изменилось, равно как и два значения (0x01 против 0x95).

Есть идеи, что это может быть?

, 👍0

Обсуждение

Я видел это сам. Оказалось, что комы были немного искажены. Если у вас есть доступ к нему, используйте осциллограф для просмотра сигналов 4 контактов ISP., @sa_leinad

Похоже на: https://arduinoprosto.ru/q/44965/19409 https://arduinoprosto.ru/q/30946/19409 https://arduinoprosto.ru/q/52798/19409, @sa_leinad

@sa_leinad, почему комы искажаются после такого долгого времени? Я объясню это сегодня вечером, когда смогу., @kolosy

Коррозия гусениц, статическое повреждение, сухое соединение — это лишь некоторые из них., @sa_leinad

Я запускаю ту же программу с Arduino Uno при использовании avrdude из командной строки. Запись загрузчика перед загрузкой моего кода аналогичным образом решает проблему., @Kavka


2 ответа


Лучший ответ:

2

До сих пор не знаю, почему, но теперь есть решение. Повторный запуск команды «Записать загрузчик» из Arduino позволил мне записать мою прошивку. Не уверен, что проблема связана с заменой предохранителей или с чем-то еще, но, похоже, это решило проблему.

Еще один забавный факт - я попробовал то же самое на совершенно новой Меге - тот же эффект. Сначала попытка записать мою прошивку привела к ошибке проверки (немного по другому адресу), затем сжег загрузчик и успешно перезаписал мою прошивку. Интересно, появилось ли обновление для boards.txt или avrdude и что-то изменилось.

,

Была такая же проблема. Сделал то же самое: записать загрузчик, затем записать мой скетч. Это сработало., @Wu Yongzheng


1

TLDR: убедитесь, что флаг -D не используется при вызове avrdude для загрузки вашего приложения с помощью ISP Programmer.

После записи загрузчика на голый чип ATmega328p с использованием Arduino IDE и Arduino Uno в качестве ISP я столкнулся с той же проблемой, о которой ОП упомянул в этом сообщении:

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0094
         0x68 != 0x6a
avrdude: verification error; content mismatch

Сразу после записи загрузчика я могу загрузить приложение с помощью этой команды avrdude (ваша команда может немного отличаться из-за имени порта и т. д.):

avrdude -C/etc/avrdude.conf -v -patmega328p -cstk500v1 -b19200 -P/dev/ttyACM0 -D -Uflash:w:main.hex:i

Однако, если я изменю код приложения, перекомпилирую и снова запущу тот же код avrdude, я получу ошибку проверки, упомянутую в OP.

В моем случае я подтвердил, что проблема связана с флагом -D. На самом деле, если я уберу флаг -D в приведенной выше команде avrdude, я смогу изменять, компилировать и загружать свой код столько раз, сколько захочу.

Обратите внимание, что это отличается при использовании Arduino IDE для прямого программирования Arduino Uno (используя последовательную связь через загрузчик), где используется флаг -D

avrdude -C/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyACM0 -b115200 -D -Uflash:w:main.hex:i 

так как вы не хотите стирать загрузчик на Arduino Uno. Каким-то образом в этом случае можно использовать флаг -D.

,