Ошибка проверки Avrdude после нескольких месяцев успешного использования
У меня есть 2560, с которым я работаю некоторое время (более года точно), программируя его с помощью avrisp mk2. Все это время никаких проблем, но вдруг, пару дней назад, он начинает давать сбой с
avrdude: verification error, first mismatch at byte 0x0002
0x01 != 0x95
avrdude: verification error; content mismatch
И совершенно очевидно, что не мигает (есть логика, что светодиод мигает при загрузке, а светодиод больше не мигает).
В первый раз плата оказалась полностью мертвой - программатор ее не опознал и отказался прошивать. Через несколько дней и волшебства он снова начал распознавать его и перепрошивать мою прошивку, но ошибка проверки сохраняется. Расположение ошибки не изменилось, равно как и два значения (0x01 против 0x95).
Есть идеи, что это может быть?
@kolosy, 👍0
Обсуждение2 ответа
Лучший ответ:
До сих пор не знаю, почему, но теперь есть решение. Повторный запуск команды «Записать загрузчик» из Arduino позволил мне записать мою прошивку. Не уверен, что проблема связана с заменой предохранителей или с чем-то еще, но, похоже, это решило проблему.
Еще один забавный факт - я попробовал то же самое на совершенно новой Меге - тот же эффект. Сначала попытка записать мою прошивку привела к ошибке проверки (немного по другому адресу), затем сжег загрузчик и успешно перезаписал мою прошивку. Интересно, появилось ли обновление для boards.txt или avrdude и что-то изменилось.
Была такая же проблема. Сделал то же самое: записать загрузчик, затем записать мой скетч. Это сработало., @Wu Yongzheng
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
.
- "avrdude: stk500_getsync(): not in sync: resp=0x00", или некто по имени Avr не позволяет мне загрузить мою программу
- avrdude ser_open() can't set com-state
- При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?
- Не удается снова загрузиться после смены платы
- Тайм-аут связи Arduino Mega с ошибкой программатора
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Как загрузить шестнадцатеричный файл в arduino uno?
- Arduino UNO для получения подписи чипа ATmega328P-PU
Я видел это сам. Оказалось, что комы были немного искажены. Если у вас есть доступ к нему, используйте осциллограф для просмотра сигналов 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