В статье описан загрузчик программного обеспечения (bootloader), работающий через USB в микроконтроллерах AVR серии ATmega, не имеющих аппаратного контроллера USB. В firmware загрузчика используется библиотека V-USB. Материал взят с сайта автора http://www.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):
[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 (128 kB)
2. http://www.obdev.at/products/avrusb/ Firmware-only AVR USB driver
3. http://libusb.sourceforge.net/ libusb
4. http://libusb-win32.sourceforge.net/ LibUsb-Win32
|