Программирование AVR: работа с USB V-USB: AVRUSBBoot - USB bootloader для микроконтроллеров Atmel AVR Fri, December 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


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.

 

Комментарии  

 
0 #1 Александр 21.03.2013 21:37
Собрал AVRUSBBoot. Так вот, про фьюзы можно поподробнее? А то что-то не получается. У вас для ATmega16 написано - 0xFF (low) и 0x09 (high). Калькулятор фьюзов показывает, что 0x09 (high) заблокирует переход на секцию бутлоадера, это вроде как неправильно.

microsin: для разборок с фьюзами обычно пользуюсь вот этим ресурсом: http://www.engbedded.com/fusecalc/. И еще утилитой программировани я, встроенной в AVR Studio. Оба эти инструмента довольно удобны для вычисления фьюзов, и устраняют путаницу в их интерпретирован ии, так как дают значения фьюзов в HEX-виде.

Чтобы бутлоадер USB заработал, важно настроить фьюзами только 3 вещи:

1. Тип генератора (нужен кварцевый) и отключение делителя. Для ATmega16 это фьюзы CKSEL0..CKSEL3 и SUT0, SUT1.
2. Размер секции бутлоадера, для ATmega16 это фьюзы BOOTSZ0, BOOTSZ1.
3. Разрешение сброса по адресу секции бутлоадера, для ATmega16 это фьюз BOOTRST.

Остальные фьюзы, конечно, тоже важны, но на работу бутлоадера прямого влияния не оказывают.

Если ввести для ATmega16 значения фьюзов 0xFF (low) и 0x09 (high), то действительно, как Вы и пишете, произойдет ошибка и бутлоадер не запустится, потому что фьюз BOOTRST окажется незапрограммиро ванным. Поэтому наверное все же правильные значения для фьюзов будут 0xFF (low) и 0x08 (high). Имейте в виду, что это только теоретические предположения, все надо проверять на практике. У меня самого нет возможности проверить, поскольку пользуюсь другими бутлоадерами - USBasp и BootloadHID. Причем в основном для микроконтроллер а ATmega32A использую бутлоадер USBasp. Для прошивки фьюзов нужен внешний программатор, бутлоадер программировани е фьюзов не поддерживает.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page