AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32

В статье описывается 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.

Внимание! При первом подключении платы с бутлоадером к компьютеру по USB операционная система Windows запросит драйвер программатора USBasp (для Linux драйвер не нужен). Драйвер можно взять в архиве по ссылке [4] (папка USBasp архива), или скачать с сайта автора программатора USBasp, см. ссылку [6]. Также драйвер есть в папке, в которую установлена программа Khazama.

Итак, процесс по шагам - как залить свою прошивку firmware (пользовательскую программу) в макетную плату AVR-USB-MEGA16, используя бутлоадер USBasp. 

1. Поставьте перемычку между ножками 4 и 6 коннектора U1 ISP.
image

2. Подключите макетную плату к компьютеру по USB. На макетке загорится красный светодиод, и в системе Windows обнаружится программатор USBasp. Если Вы подключили в таком режиме макетную плату в первый раз, то Windows обнаружит новое устройство USBasp и запросит для него драйвер. Драйвер для Windows см. по ссылке [6], скачайте архив с драйвером, распакуйте во временную папку и предложите мастеру оборудования взять драйвер их этой папки. Также драйвер есть в папке, в которую установлена программа Khazama. После успешной установки драйвера у Вас в системе появится новое устройство - Atmel USB Devices -> USBasp (можно увидеть в Диспетчере Устройств).

3. Запустите программу Khazama AVR Programmer. В настройках уберите опцию очистки памяти кристалла (Command -> Program Options -> снимите галку Erase Chip). Выберите из выпадающего списка Ваш чип. Загрузите hex-файл прошивки (через меню File -> Load FLASH file to Buffer). Нажмите большую кнопку Auto Program, запускающую программирование. Программируется кристалл очень быстро, за несколько секунд.
image
После окончания программирования красный светодиод погаснет, и начнет выполняться Ваша программа с адреса 0 (которую Вы только что записали).

4. Снимите перемычку между ножками 4 и 6 коннектора U1 ISP.
image  

Очень похоже работает другой бутлоадер - BootloadHID (см. Ссылки [5]). Отличается тем, что просто нужна другая сервисная программа на компьютере, но зато легче встраивается в младшие чипы (начиная с ATmega8), т. к. снижены требования к размеру bootloader-секции.

[Правила работы с бутлоадером USBasp]

1. Не забывайте устанавливать и снимать перемычку активизации бутлоадера.
2. Применяйте для программирования утилиту Khazama версии 1.6.2 (см. [3]).
3. Применяйте драйвер USBasp, максимально подходящий к Вашей операционной системе (см. [6]).
4. Не пытайтесь программировать фьюзы и EEPROM - бутлоадер USBasp этого не умеет. Для программирования фьюзов используйте внешний программатор ISP. Однако будьте осторожны - если неправильно установите фьюзы, то бутлоадер может перестать работать.
5. Не пытайтесь перезаписать бутлоадером самого себя - это может привести к непредсказуемым результатам. 

[Устранение проблем

Если устройство USB бутлоадера нормально определяется в системе Windows (видно в Диспетчере Устройств как устройство USBasp), но  отказывается работать с USB устройством USBasp (could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc), то скорее всего у Вас не установлена библиотека libusb или не установлен драйвер USBasp.

khazama-err-not-find-USBasp.PNG 

arduinoIDE-err-not-find-USBasp.PNG 

Драйвер USBasp можно скачать по ссылке [6], ищите заголовок Drivers и ссылку на файл наподобие usbasp-windriver.2011-05-28.zip. Библиотеку libusb можно скачать по ссылке [7]. Качайте и устанавливайте самый свежий релиз библиотеки libusb.

[Ссылки]

1. Загрузчики (bootloader) для микроконтроллеров AVR.
2. USBaspLoader USB boot loader for AVR microcontrollers site:obdev.at - домашняя страничка usbasploader.
3. Программы для работы с программатором USBasp — AVRDUDE site:download.savannah.gnu.org, BASCOM-AVR site:mcselec.com, Khazama AVR Programmer site:khazama.com, eXtreme Burner-AVR site:extremeelectronics.co.in.
4. 100705usbasploader.zip - мой вариант usbasploader, заточенный под макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega32 (проект для AVR Studio с исходниками и скомпилированными вариантами для кварцев 12 МГц, 16 МГц). Именно его я и записываю в макетные платы AVR-USB-MEGA16 с микроконтроллером ATmega32.
5. AVR-USB-MEGA16: USB bootloader BootloadHID для микроконтроллера ATmega16.
6. USBasp - USB programmer for Atmel AVR controllers site:fischl.de - сайт программатора USBasp (там можно скачать драйвер для USBasp под операционную систему Windows).
7libusb-win32 site:sourceforge.net - ссылки на закачку релизов библиотеки libusb.