Перейти к содержанию

Как узнать сигнатуру AVR и почему avrdude пишет Invalid device signature?

Обновлено Редакция GAW

Сигнатура — три байта в отдельной области памяти AVR, которые Microchip записывает на заводе. Программатор читает их до записи прошивки и сравнивает с моделью, указанной ключом -p. Поэтому узнать сигнатуру можно любой командой avrdude — например, avrdude -c usbasp -p m328p без -U просто подключится и покажет её.

Что означает прочитанное значение

ПрочитаноЧто этоЧто делать
1E 95 0FATmega328P — всё верно—
00 00 00 или FF FF FFпрограмматор не получил ответаподключение, питание, частота ISP, такт кристалла
1E 95 14ATmega328 без Pуказать -p m328, а не -p m328p
1E 94 0B, 1E 93 0FATmega168PA, ATmega88PAна плате другой кристалл
«почти правильная», меняется от раза к разусбои обменаснизить частоту ISP, укоротить провода

Сигнатуры — DS40002061B, табл. 28-10; трактовка нулей и единиц — наш вывод, разобранный и в термине «Сигнатура».

Связи нет: частота ISP

Даташит требует, чтобы низкий и высокий уровни SCK длились дольше двух тактов процессора. Наш расчёт: период SCK больше четырёх тактов, то есть частота ISP меньше fck/4. Новый ATmega328P работает на 1 МГц (RC-генератор 8 МГц и запрограммированный CKDIV8), значит, ISP — меньше 250 кГц. Многие программаторы по умолчанию дают период 1 мкс, рассчитанный на кристаллы от 4 МГц. Решение — -B 8: период 8 мкс. Подробнее — в статье «Программирование AVR» и в разборе avrdude.

Связи нет: такт

Для программирования по ISP кристаллу нужен рабочий такт по фьюзам CKSEL. Если фьюзы выбрали внешний кварц или генератор, которого на плате нет, кристалл молчит. Что задают фьюзы и какие значения безопасны, показывает калькулятор фьюзов AVR.

Сигнатура чужая

Если прочитано осмысленное значение другого кристалла, программатор работает, а ошибка в выборе модели. Частый случай — ATmega328 вместо ATmega328P на дешёвых платах. Сигнатура читается и у кристалла с включённой защитой, так что опознать модель можно всегда.

Похожие вопросы

Можно ли просто добавить ключ -F?

Только если вы точно знаете, что кристалл тот и он исправен, а сигнатура испорчена — именно для этого случая man-страница avrdude описывает -F. При 00 00 00 ключ не поможет: связи с кристаллом нет, и прошивка всё равно не запишется. При чужой сигнатуре -F приведёт к записи прошивки, собранной для другого микроконтроллера.

Почему новый ATmega328P не прошивается, а с платы Arduino — прошивается?

Новый кристалл работает от внутреннего RC-генератора с делителем CKDIV8, то есть на 1 МГц, а такт ISP должен быть медленнее четверти тактовой частоты. Наш расчёт: при 1 МГц — меньше 250 кГц, период больше 4 мкс; ключ -B 8 даёт период 8 мкс с запасом. Кристалл с Arduino работает на 16 МГц и терпит быстрый такт.

Что делать, если фьюзы выставили внешний кварц, а его нет?

Без такта кристалл не отвечает по ISP, и avrdude читает нули. Даташит требует рабочего такта, выбранного фьюзами CKSEL. Временно подключают кварц или подают внешний сигнал на XTAL1, прошивают правильные фьюзы и возвращают всё как было (наш вывод).

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — 28.3, табл. 28-10 — сигнатуры: ATmega328P 1E 95 0F, ATmega328 1E 95 14, ATmega168PA 1E 94 0B, ATmega88PA 1E 93 0F; сигнатура читается и у защищённого кристалла; 28.8 — для последовательного программирования нужен рабочий такт по фьюзам CKSEL, низкий и высокий уровни SCK длиннее 2 тактов процессора при fck < 12 МГц
  2. AVRDUDE v8.3, man-страница avrdude.1 — -B — период или частота такта ISP; многие программаторы по умолчанию дают период 1 мкс, годный для кристаллов от 4 МГц, более медленным нужен больший период; -F — отменяет проверку сигнатуры для кристаллов с испорченной сигнатурой

Нашли ошибку?