Ошибка предохранителя avrdude при программировании ATMEGA328 без кристалла

Пару лет назад я построил несколько плат с ATMEGA328 и без кристалла. Я успешно запрограммировал их с помощью загрузчика с использованием usbasp и скетча с использованием последовательного интерфейса Arduino. Теперь я сделал еще несколько, но при попытке записать загрузчик получаю сообщение об ошибке от AVRDUDE:

*** не удалось;
avrdude: ПРЕДУПРЕЖДЕНИЕ: недопустимое значение для неиспользуемых битов в предохранителе "efuse" должно быть установлено на 1 в соответствии с таблицей данных Это поведение устарело и приведет к ошибке в будущей версии Вероятно, вы хотите использовать 0xfd вместо 0x05 (сначала дважды проверьте свою таблицу данных).

Я следовал инструкциям здесь и использую архив конфигурации оборудования, упомянутый на этой странице: breadboard-1-6-x.zip .

Если я перепрограммирую загрузчик на устройстве с кристаллом, он будет работать, если я выберу Arduino Pro / Pro Mini (3,3 В, 8 МГц), но потерпит неудачу с сообщением выше, если я выберу макет, указанный в boards.txt от breadboard-1-6-x.zip .

Других сообщений об ошибках нет, но ... если я включу verbose, он сработает.. выключите verbose, и он снова перестанет работать. Возможно, подробный режим изменяет время достаточно, чтобы заставить его работать.

Я знаю, что вы можете использовать опцию -B для замедления avrdude при запуске его из командной строки: есть ли способ сделать то же самое из среды Arduino?

, 👍0

Обсуждение

Приведенное выше сообщение - это просто предупреждение, а не ошибка. Я считаю, что есть какая-то другая ошибка, показанная ранее в вашей консоли, которую вы не показали. Пожалуйста, проверьте это., @jwh20

@jwh20 Я сделал еще несколько тестов и добавил результаты к своему вопросу., @JavaLatte

Просто к вашему сведению и на случай, если вы еще этого не знаете: здесь есть очень полезный инструмент: https://www.engbedded.com/fusecalc/, @Sim Son


1 ответ


4

Спецификация ATmega328P содержит следующую таблицу:

ATMega328P datasheet extended fuses excerpt.

Верхние 5 битов расширенного байта предохранителя по умолчанию равны 1 и зарезервированы. На самом деле вы не должны их менять, так как они могут быть использованы в будущем для 328P-подобной части, и установка их на что-то другое, чем 1, может привести к неожиданным результатам. В варианте 328PB бит номер 3 используется для "Отключения обнаружения сбоя тактовой частоты".

Три нижних бита 0xFD и 0x05 равны 0b101. Другими словами, принимая во внимание только биты, которые вы должны установить, для предохранителей BODLEVELn они будут иметь тот же эффект. Но вас ПРЕДУПРЕЖДАЮТ, что вы должны использовать 0xFD, а не 0x05 по вышеуказанной причине.

В boards.txt это происходит в breadboard-1-6-x.zip имеет строку, которая выглядит так:

atmega328bb.bootloader.extended_fuses=0x05

Вы можете изменить это самостоятельно, отредактировав файл, но на самом деле для того, что вы делаете, я бы рекомендовал MCUdude MiniCore, который сравнительно современен. Во всяком случае, его boards.txt файл был записан с правильными значениями предохранителей. Вы можете видеть там для простого 328P (не PB), который не поддерживает обнаружение сбоев часов, бит CFD просто жестко закодирован в 1 в файле.

Сообщение, которое вы видите, является "ПРЕДУПРЕЖДЕНИЕМ", а не "ОШИБКОЙ". Разница в том, что предупреждения на самом деле не мешают вам продолжать. Вполне вероятно, что если у вас возникла проблема, то не совсем из-за того, что они неправильно указали старшие биты предохранителя. Если он останавливается, возможно, arduino-builder видит ненулевой код выхода для avrdude и думает, что это означает "ОШИБКА", а не "ПРЕДУПРЕЖДЕНИЕ", и в этом случае эта проблема исчезнет, если вы отредактируете boards.txt файл (или принять MiniCore) таким образом, чтобы больше не выдавать предупреждение.

Если вы не опустили эффективную системную частоту ниже 1 МГц, возможно, еще ниже, маловероятно, что вам придется отказаться от тактовой частоты ISP по умолчанию. Однако если вы это сделаете, это также можно сделать, отредактировав файлы пакетов board.

,