V-USB: AVRUSBBoot - USB bootloader для микроконтроллеров Atmel AVR Печать
Добавил(а) microsin   

В статье описан загрузчик программного обеспечения (bootloader), работающий через USB в микроконтроллерах AVR серии ATmega, не имеющих аппаратного контроллера USB. В firmware загрузчика используется библиотека V-USB. Материал взят с сайта автора fischl.de.

AVRUSBBoot - загрузчик программ для микроконтроллеров Atmel AVR. Он использует firmware-only драйвер USB (V-USB, старое название AVR-USB) для передачи двоичных данных от PC до памяти программ flash микроконтроллера. Если в AVR записан bootloader, больше не нужен программатор ISP; теперь микроконтроллер может быть перепрограммирован через USB.

[Возможности bootloader]

    * программа загрузки работает на многих платформах. Протестировано на Linux, Mac OS X и Windows.
    * bootloader протестирован на микроконтроллерах ATmega8-16
    * не нужны специальные контроллеры USB
    * bootloader умещается в блок bootloader из 1024 слов (2048 байт)

[Hardware (железо)]

В основном AVRUSBBoot может использоваться со всеми схемами, которые поддерживаются драйвером AVR USB (новое название V-USB). Для переключения между bootloader и пользовательской программой (firmware, которое загрузил пользователь во flash с помощью AVRUSBBoot) нужна дополнительная перемычка JP1. На картинке приведен пример схемы (внимание: сигналы данных D+ и D- с напряжением 5V не соответствуют стандарту USB! Поэтому напряжение питания для данной схемы должно быть 3.3V - 3.6V):

avrusbboot_circuit.png

[Firmware и его подгонка]

Firmware AVRUSBBoot должно адаптироваться к Вашей аппаратуре (типу микроконтроллера и принципиальной схеме). Все необходимые изменения делаются в следующих двух файлах:

    * bootloaderconfig.h: задается условие, по которому bootloader должен стартовать, например определенная ножка подключается к земле перемычкой, и инициализация аппаратуры.
    * usbconfig.h: задаются ножки для данных D+ и D- интерфейса USB. Вы можете поменять макроопределения USB_CFG_IOPORT, USB_CFG_DMINUS_BIT и USB_CFG_DPLUS_BIT для соответствия Вашей принципиальной схеме. Остальное должно остаться без изменений.

После внесения изменений скомпилируйте firmware для AVRUSBBoot. Для этого потребуется avr-gcc, avr-binutils и avr-libc (для Windows все это есть в пакете WinAVR):

$ cd firmware
$ make

После этого bootloader должен быть записан в микроконтроллер обычным программатором ISP. После того, как bootloader записан во flash, больше ISP программатор не потребуется, и Вы можете записать двоичные данные своей программы (hex-файлы) через USB. Не забудьте установить перемычки (fuses, фьюзы) для внешнего источника тактовой частоты (кварца), когда прошиваете bootloader в первый раз! Обычные значения перемычек для ATmega16 - 0xFF (low) и 0x09 (high).

[Программное обеспечение для загрузки hex-файлов (взаимодействующее с бутлоадером)]

Для загрузки hex-файлов имеется программа на C++. Чтобы её скомпилировать, нужна библиотека libusb.

$ cd software
$ make

Когда устройство с бутлоадером подключено к USB, и бутлоадер стартовал (для этого нужно установить перемычку JP1 перед подключения устройства) hex-файлы могут быть записаны во flash микроконтроллера:

$ ./avrusbboot test.hex

[Ссылки]

1. avrusbboot.2006-06-25.tar.gz site:fischl.de (128 kB).
2. V-USB site:obdev.at - популярная библиотека для программной реализации поддержки интерфейса USB на обычных микроконтроллерах AVR.
3. LibUSB site:sourceforge.net - кроссплатформенная библиотека для написания ПО хоста управления устройствами USB.
4. LibUsb-Win32 site:sourceforge.net - порт LibUSB для платформы Windows.