Загрузчик LUFA DFU для Pro Micro


Пост-шпаргалка по перешивке загрузчика в платах Pro Micro.

Зачем

В Pro Micro по умолчанию используется загрузчик Caterina, неудобный тем, что после старта он ждёт всего несколько секунд перед тем как запустить основной код. Это не является проблемой для редко перешиваемых устройств, например, для Soarer's Converter. Но в остальных случаях заставлять пользователя суетиться и ещё номер COM-порта искать (если используется Windows) совершенно не за чем, так что пусть загрузчик будет перманентным.

Чем шить

Нужен любой прошивальщик, умеющий в ISP или прошить Arduino as ISP в любую поддерживаемую плату, хоть в тот же Pro Micro, например. Подключаться на макетной плате или временным припаиванием кабелей неудобно, для этого лучше использовать подпружиненные контакты Pogo pins. Собрал себе для этих целей Lobot. В качестве программатора у меня китайский клон Arduino Leonardo. Естественно, стоит помнить о том, что Pro Micro бывают и на 3,3 В вместо 5.

Что шить

Основной репозиторий LUFA лежит тут. Помимо DFU там есть ещё несколько загрузчиков:
CDC — реализует тот же AVR109, что и Caterina
HID — не требует дополнительных драйверов, прошивка работает через небольшое консольное приложение или (теоретически) Teensy Loader. Ззанимает те же 4 КиБ, что и DFU. HalfKay, который в Teensy используется, всего 512 байт занимает. Альтернатива — BootloadHID, 2 КиБ, всё не соберусь попробовать.
MassStorage — пожалуй, ещё дружелюбнее. После ресета устройство определяется, как накопитель, куда нужно закинуть образ с прошивкой. Занимает уже 6 КиБ, а флеша на Atmega32U4 и так мало.
Одним словом, остаётся собрать DFU-загрузчик под Pro Micro. В make-файле нужно поменять частоту (если у нас 16 МГц версия), указать размеры флеша и загрузчика (32 и 4 КиБ) и вариант платы. С последним пришлось повозиться. Можно, конечно, взять и указать Leonardo, но в правильном конфиге платы должны быть указаны порты для светодиодов, чтобы в итоге они красиво мигали при запуске загрузчика. Готовый вариант лежит в моём форке.

Прошивка (вместе с фьюзами):
avrdude -p m32u4 -c avrisp -P /dev/ttyACM0 -b 19200 -U lfuse:w:0x5e:m -U hfuse:w:0x99:m -U efuse:w:0xf3:m -v

avrdude -p m32u4 -c avrisp -P /dev/ttyACM0 -b 19200 -B 4 -U flash:w:"ATMega32U4-usbdevice_dfu-1_0_0.hex" -v

Комментарии

Популярные сообщения