Запись загрузчика на Adafruit Feather 32u4
Итак, загрузчик по умолчанию в Arduino странно настроен на стирание EEPROM при каждой перезагрузке, что делает EEPROM бесполезной.
Я нашел, где устанавливаются предохранители в файле boards.txt, но для внесения этого изменения конфигурации в чип требуется прожечь обновленный загрузчик.
В Arduino IDE есть опция "Записать загрузчик", но это было бы слишком просто и, конечно, не работает.
Я не могу найти в Интернете никакой информации о том, как на самом деле обновить загрузчик на этих устройствах.
Итак, можно ли перепрограммировать загрузчик на устройствах Adafruit Feather 32u4?
Если да, то как это сделать?
@Jim B., 👍0
Обсуждение2 ответа
Лучший ответ:
"Записать загрузчик" работает, только если к устройству подключен программатор. Встроенный загрузчик в вашем Feather не может изменить предохранители, даже если процесс может указать, что он это сделал.
Вам необходимо подключить ICSP (внутрисхемный последовательный программатор) к правильным контактам (MOSI
, MISO
, SCK
, RESET
, VCC
, GND
). Вы можете использовать другой Arduino в качестве программатора, загрузив определенный скетч в Arduino, чтобы сделать его Arduino в качестве ISP.
Обычный загрузчик Arduino эмулирует устройство такого типа, позволяя программировать через последовательный/USB-порт, но имеет ограничения. Процесс ICSP — это естественный способ загрузки программы на микросхему AVR и единственный способ установки фьюзов.
ИЗМЕНИТЬ:
В этом Техническом описании загрузчика USB AVR указано на странице 3:
• Предохранитель сброса загрузки. Предохранитель сброса загрузки (BOOTRST) можно запрограммировать так, чтобы что вектор сброса указывает на начальный адрес раздела Boot Flash после сброса. После загрузки пользовательского кода команда загрузчика («запустить приложение») может начать выполнение кода приложения. Примечание что предохранители не могут быть изменены самим MCU. Это значит, что как только предохранитель сброса загрузки запрограммирован, вектор сброса всегда будет указать на сброс загрузчика и фьюз можно изменить только через последовательный или параллельный интерфейс программирования. Предохранитель BOOTRST не активен в заводской конфигурации по умолчанию.
В этом документе также упоминается AVR282: « USB Firmware Upgrade for AT90USB» (Обратите внимание, я не смог найти это на веб-сайте Atmel.) В этом документе подробно описывается программа FLIP, инструмент Atmel для загрузки прошивки через интерфейс USB DFU и настройки параметров конфигурации и т. д.
В этом документе есть раздел часто задаваемых вопросов, в котором говорится:
- Можно ли изменить фьюз-биты с помощью Flip? • Нет, Flip не может модифицировать фьюз-биты. Чтобы изменить бит фьюза, вы можете использовать либо JTAG ICE, MKII, AVRISP MKII или параллельное программирование
Итак, хотя это может и не быть окончательным ответом, в настоящее время представляется, что "сжигание предохранителей" невозможно выполнить через USB на 32u4
. Если это не так, я уверен, сайт будет рад новой информации.
Обратите внимание, что вопрос касается 32u4, а не традиционного Arduino, поэтому я считаю, что в дополнение к ISP есть некоторые аппаратные варианты DFU., @Chris Stratton
Вскоре после того, как я задал этот вопрос, у меня был момент, когда я понял, что у меня есть JTAGICE3 в моем ящике. Как только я получил правильную распиновку и преодолел проблему с захватом устройства macOS, я смог найти способ заставить работать загрузчик. Сегодня я опубликую здесь полный ответ, чтобы все получили пользу., @Jim B.
В моем случае 32u4 (Lora32u4II) вышел из строя после загрузки большой прошивки. Не отвечает.
К счастью, у меня есть buspirate 4 с прошивкой 7.0. И за это время обнаружил, что BusPirate не умеет питать плату для перепрошивки. Но если я подключу плату через USB, а затем кабели, как описано:
BUS PIRATE - LORA32U4II
MISO MISO
MOSI MOSI
CLK SCK
GND GND
CS RST
И я использую arduino ide для загрузки нового загрузчика, он снова начинает работать. Так. Интересно, почему обновление прошивки заблокировало плату, пока места достаточно. И почему питание более 5 В не заставит его работать на buspirate + arduino ide.
Я оставляю информацию для тех, у кого такая же проблема.
Я обнаружил, что с помощью этого метода, даже если он медленнее, я могу пропустить загрузчик, оставив больше места для моей прошивки...
- как отправить данные в Adafruit Bluefruit Feather (32u4) через Bluetooth?
- Увеличить частоту дискретизации на плате ESP32
- Как Arduino IDE сбрасывает плату перед прошивкой? Почему avrdude этого не делает?
- Ошибка при использовании Adafruit Feather M0
- Adafruit esp32 Feather не удалось скомпилировать
- Как заставить погодный комплект с анемометром работать с помощью Arduino (UNO)?
- Оставшееся время выхода 5-минутного таймера
- Проблемы с подключением Adafruit Feather M0 к сети
Вы уверены, что он стирается при каждой загрузке, а не при каждой перепрошивке?, @Chris Stratton
Да, кажется, что это происходит при каждой загрузке, однако я хочу выжить при перепрошивке, поэтому мне нужно было правильно установить бит EESAVE, чтобы это сработало., @Jim B.
Обновление: похоже, у меня была ошибка в моем коде, из-за которой я думал, что данные EEPROM не сохраняются, поэтому в конце концов мне не нужно было записывать загрузчик. Ву., @Jim B.