AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32 |
![]() |
Добавил(а) microsin |
В статье описывается USB bootloader USBasp, который хорошо подходит для ATmega32. Он удобен тем, что эмулирует поведение популярного программатора USBasp, и для него подходят программы под этот программатор. Этот бутлоадер я записываю во все макетные платы AVR-USB-MEGA16, оснащенные микроконтроллерами ATmega32, благодаря чему пользователь получает возможность заливать свою программу прямо через подключение по USB, и не нужен никакой дополнительный программатор. Внимание - USBasp bootloader не умеет работать с фьюзами (fuses) и EEPROM, несмотря на то, что в сервисных программах, обслуживающих USBasp (например, Khazama AVR Programmer) такая возможность имеется. Значения фьюзов по умолчанию, которые прошиты в платы с usbasploader - LOW FUSE BYTE: 0xCF, HIGH FUSE BYTE: 0x98, LOCKOPT BYTE: 0xEF. [Как встроить в Ваш проект usbasploader] Процесс подробно описан в статье на Хабре, статья называется "USB bootloader для микроконтроллеров AVR" и находится в разделе "DIY или Сделай Сам". Воспользуйтесь поиском и легко её найдете. Исходники можете скачать по ссылке в этой статье (см. Ссылки [4]). Само собой, загрузчик USBasp легко встраивается и в другие чипы ATmega, объем секции bootloader у которых равен или превышает 4096 байт (например, в ATmega128). Процесс встраивания заключается в записи firmware бутлоадера в соответствующую секцию памяти и правильной установке фьюзов. Внимание: в макетную плату AVR-USB-MEGA16 уже встроен бутлоадер USBasp (и уже правильно настроены фьюзы микроконтроллера), поэтому записывать бутлоадер туда не надо. [Как работать с загрузчиком usbasploader на примере макетной платы AVR-USB-MEGA16 и Khazama AVR Programmer] Для работы с бутлоадером USBasp подходит множество программ (см. Ссылки [3]), но мне больше всего по душе программа Khazama AVR Programmer [10]. Внимание! При первом подключении платы с бутлоадером к компьютеру по USB операционная система Windows запросит драйвер программатора USBasp (для Linux драйвер не нужен). Драйвер можно взять в архиве по ссылке [4] (папка USBasp архива), или скачать с сайта автора программатора USBasp, см. ссылку [6]. Также драйвер есть в папке, в которую установлена программа Khazama. Итак, процесс по шагам - как залить свою прошивку firmware (пользовательскую программу) в макетную плату AVR-USB-MEGA16, используя бутлоадер USBasp. 1. Поставьте перемычку между ножками 4 и 6 коннектора U1 ISP. Рис. 1. Положение перемычки, которая активирует запуск загрузчика USBasm макетной платы AVR-USB-MEGA16. 3. Запустите программу Khazama AVR Programmer. В настройках уберите опцию очистки памяти кристалла (Command -> Program Options -> снимите галку Erase Chip). Это нужно для того, чтобы Khazama не конфликтовала с упрощенным протоколом загрузчика USBasp. Примерный вид опций показан на скриншоте: Рис. 2. Опции программы Khazama. Выберите из выпадающего списка Ваш чип. Загрузите hex-файл прошивки (через меню File -> Load FLASH file to Buffer). Нажмите большую кнопку Auto Program, запускающую программирование. Программируется кристалл очень быстро, за несколько секунд. Рис. 3. Процесс перепрошивки памяти FLASH загрузчиком USBasp. После завершения программирования выведется примерно такое сообщение: Рис. 4. Сообщение об успешном окончании программирования памяти FLASH. Светодиод на плате погаснет, и сразу начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали).
Рис. 5. Рабочее состояние платы - перемычка снята, при подаче питания загрузчик сразу запустит программу пользователя. Очень похоже работает другой бутлоадер - BootloadHID (см. Ссылки [5]). Отличается тем, что просто нужна другая сервисная программа на компьютере, но зато легче встраивается в младшие чипы (начиная с ATmega8), т. к. снижены требования к размеру bootloader-секции. [Правила работы с бутлоадером USBasp] 1. Не забывайте устанавливать и снимать перемычку активизации бутлоадера. 1. Программа Khazama не видит стройство USB загрузчика. Если устройство USB бутлоадера нормально определяется в системе Windows (видно в Диспетчере Устройств как устройство USBasp), но отказывается работать с USB устройством USBasp (could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc), то скорее всего у Вас не установлена библиотека libusb или не установлен драйвер USBasp. Сообщение системы выглядит примерно так: Подобное сообщение в среде Arduino IDE: Драйвер USBasp можно скачать по ссылке [6], ищите заголовок Drivers и ссылку на файл наподобие usbasp-windriver.2011-05-28.zip. Библиотеку libusb можно скачать по ссылке [7]. Качайте и устанавливайте самый свежий релиз библиотеки libusb. 2. Ошибка 'could not find SSB device "USBasp" with vid=0x16c0 pid=0x5dc', которая появляется после программирования платы через загрузчик USBasp. На самом деле это не ошибка - плата нормально запрограммировалась через загрузчик. Причина этого сообщения в том, что в настройках Program Options программы Khazama стоят лишние галочки (Verify Flash, Verify Eeeprom и т. п.). Поэтому программа Khazama пытается обратиться к программатору после завершения программирования - устройство USBasp больше не присутствует в системе (бутлоадер завершил работу и передал управление в код пользователя), это и служит причиной "ошибки". Снимите лишние галочки в диалоге Program Options, как это показано на рис. 2, и ошибка исчезнет. [Ссылки] 1. Загрузчики (bootloader) для микроконтроллеров AVR. |