AVR-USB-MEGA16: USB bootloader BootloadHID для микроконтроллера ATmega16 |
![]() |
Добавил(а) microsin |
В статье описывается USB bootloader BootloadHID, который хорошо подходит для ATmega8 и ATmega16, так как у него код умещается в 2048 байт. Загрузчик BootloadHID очень похож на USBASPloader по структуре исходного кода и принципу работы. Причем BootloadHID проще, чем USBASPloader, т. к. не поддерживает чтение flash (для проверки того, что уже записано). Следовательно, и размер кода у него меньше. За это приходится расплачиваться универсальностью - для записи нужна специальная программа (написанная специально только для BootloadHID), но зато есть возможность встроить USB bootloader в младшие модели контроллеров AVR.
Теперь подробнее от том, как встроить в свой проект BootloadHID, на примере макетной платы AVR-USB-MEGA16 (микроконтроллер ATmega16), процесс по шагам. 1. Скачайте последнюю версию BootloadHID, см. [2]. Я скачивал bootloadHID.2008-11-26.zip. Распакуйте в отдельную папку. Попробуйте выполнить команду make в папке bootloadHID.2008-11-26\firmware\, процесс должен успешно завершиться, и должен появиться файл прошивки main.hex (предполагается, что у Вас установлена GCC-среда компилирования WinAVR). 2. Исправьте в файле bootloaderconfig.h, если это нужно, макросы USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT и USB_CFG_DPLUS_BIT - они задают порт и ножки, к которым подключены сигналы D- и D+ шины USB (помните, что сигнал D+ должен быть обязательно соединен с портом, вызывающем срабатывание прерывания INT0). Также при необходимости исправьте подпрограмму bootLoaderInit. Она подготавливает микроконтроллер для работы с переключающей перемычкой, которая активирует bootloader (перемычки нет- bootloader не активен, перемычка стоит - bootloader работает). Для макетной платы AVR-USB-MEGA16 я воспользовался тем, что есть очень удобное место для этой перемычки на коннекторе U1 ISP - между его контактом 4 (MOSI, порт PB5, ножка 1 микроконтроллера ATmega16 в корпусе TQFP44) и контактом 6 (GND, земля, минус питания).
Чтобы порт PB5 работал как вход для перемычки, я переделал код bootLoaderInit следующим образом (раньше для перемычки был назначен порт PD3):
Необходимо также поправить макрос bootLoaderCondition:
3. Подправьте при необходимости установки в Makefile. Проверьте частоту кварца (макрос F_CPU), адрес начала размещения в памяти загрузчика (BOOTLOADER_ADDRESS) и тип микроконтроллера (макрос DEVICE). Для макетной платы AVR-USB-MEGA16 с микроконтроллером ATmega16 и кварцем на 16 МГц я установил следующие значения (больше ничего не менял): DEVICE = atmega16 Остальные параметры Makefile можно не трогать (если Вы не собираетесь с помощью него прошивать перемычки и код BootloadHID). Если лень проделывать шаги 1..3, то просто скачайте пакет по ссылке[3]. В папке bootloadHID.2008-11-26\firmware\hexfiles\ найдете уже сгенерированные прошивки для микроконтроллеров ATmega8, ATmega16,ATmega32 на разные частоты кварцев. 4. Выполните make. Прошейте получившийся файл main.hex отдельным ISP-программатором. Для ATmega16 перемычки должны быть прошиты в следующем состоянии: LOW FUSE BYTE: 0xCF [Как работать с BootloadHID] Для прошивки по USB с помощью BootloadHID можно воспользоваться тремя возможными вариантами: Со своей стороны я рекомендую HIDBootFlash. Она поддерживает BootloadHID, AVRUSBBoot, позволяет выбрать другие VID и PID для программирующего загрузчика, поддерживает также командную строку и наглядно отображает процесс. Что еще надо? Теперь опишу нехитрую процедуру прошивки программы с помощью USB bootloader BootloadHID (на примере макетной платы AVR-USB-MEGA16 и модифицированного кода BootloadHID, который можно скачать по ссылке [3]). 2. Подключите макетную плату к компьютеру по USB. На плате загорится красный светодиод, и в системе Windows обнаружится USB HID-устройство BootloadHID (драйвера не потребуются). 4. Снимите перемычку между ножками 4 и 6 коннектора U1 ISP. Переподключите макетную плату (выдерните и снова вставьте шнур USB). Начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали). [Ссылки] |