AVR-USB162: где найти рабочие примеры кода firmware и ПО хоста Печать
Добавил(а) microsin   

Статья писалась несколько лет назад, и многое изменилось. Сейчас уже лучше было бы её озаглавить - "где не надо искать примеры кода для микроконтроллеров Atmel с аппаратным интерфейсом USB". Дело все в том, что библиотека LUFA выросла и набрала силу, к тому же появились и другие примеры работы с чипами AVR USB, а фирменные USB-библиотеки Atmel далеки от того, чтобы их можно было назвать дружественными для пользователя (особенно для начинающего). Поэтому для быстрого старта с чипами AVR USB сейчас наилучший выбор LUFA (см. [3]). Эта статья посвящена только примерам от Atmel, которые есть на сайте atmel.com.

Основная сложность примеров от Atmel в том, что они разбиты по сериям микроконтроллеров AVR с аппаратным USB. Различают микроконтроллеры AVR USB серий 2, 4, 6, 7 (Series2, Series4, ..), и для серий и их групп пакеты примеров доступны для закачки в виде отдельных пакетов. Если об этом не знать, то в примерах легко запутаться. Макетная плата AVR-USB162AVR-USB162MU) относится к Series2, потому на ней установлен микроконтроллер AT90USB162. Вторая сложность - ассортимент примеров для разных серий AVR USB сильно отличается, и портирование от серии к серии затруднено. Третья сложность - все примеры изначально заточены только под платы разработчика Atmel. Четвертое незначительное неудобство - для ПО хоста компания Atmel предлагает использовать собственную библиотеку с закрытым исходным кодом AtUsbHid.dll, и работает такое решение только под Windows. Использовать эту библиотеку намного проще, чем HID.dll от Microsoft, но все-таки исходников нет (в отличие от libusb). Пятая сложность - скудная документация, малый ассортимент устройств в примерах. Шестое неудобство (для некоторых пользователей) - примеры рассчитаны в основном на платную среду разработки IAR Embedded Workbench for AVR. Во всем прямой контраст с LUFA, и явно не в пользу Atmel... Теперь о примерах подробнее. 

[firmware]

Как я уже упомянул, чип AT90USB162, который установлен на макетных платах AVR-USB162 и AVR-USB162MU (см. [6]) относится к младшей серии 2 микроконтроллеров AVR USB (Series2). Примеры кода от Atmel, которые будут работать на этих макетных платах, основаны на библиотеке "USB Software Library for AT90USBxxx Microcontrollers" AtUsbHid.dll, см. [4]. Примеры изначально предназначены для макетной платы Atmel STK526, см. [5], но работают и на AVR-USB162 без переделки.

Пример firmware можно найти на страничке AVR USB Series2 Software Packages [8]. Там много всего полезного, но нас интересует USB HID Generic I/O for STK526 [9]. Распакуйте содержимое скачанного архива STK526-series2-hidio-2_0_1-doc.zip, прошивка находится в файле STK526-series2-hidio-2_0_1-doc\STK526-series2-hidio-2_0_1-doc.a90. Можно её сразу прошить в макетную плату AVR-USB162 с помощью программатора Flip (как им пользоваться, см. [7]), но гораздо интереснее самому скомпилировать исходники. Файл проекта для IAR EWB AVR находится в файле STK526-series2-hidio-2_0_1-doc\demo\STK526-series2-hidio\iar\STK526-series2-hidio.eww. Я его открывал средой IAR версии 5.20, поэтому при открытии согласился на переконвертацию проекта в новую версию. Компиляция прошла без ошибок, прошивка появилась в файле STK526-series2-hidio-2_0_1-doc\demo\STK526-series2-hidio\iar\Debug\Exe\STK526-series2-hidio.a90. Прошьем файл в плату AVR-USB162 (либо с помощью Flip, либо стандартным ISP-программатором), и подключим плату через USB. В системе обнаружится и установится устройство AVR USB HID DEMO:

AVR_USB_HID_DEMO01.GIF  AVR_USB_HID_DEMO02.GIF

[ПО хоста]

Пример ПО хоста (программа на компьютере, которая управляет устройством USB) можно найти на страничке AVR USB Software Packages [8], см. USB PC Drivers Based on Generic HID Class [9]. Распакуйте содержимое архива generic_usb_hid_2008-11-19.zip в отдельную папку. Откройте в Visual Studio проект UsbHidDemoPackage.dsw - там найдете 2 примера (я открывал проект из Microsoft Development Environment 2003, Version 7.1.3088, и при открытии ответил положительно на запрос конвертации проекта в более новую версию). UsbHidDemoCode - пример GUI приложения, управляющего светодиодами и воспринимающего нажатия кнопок STK526 (для того, чтобы UsbHidDemoCode скомпилировался без ошибки "Command line error D2004 : '/I' requires an argument", надо убрать опцию /I в свойствах соответствующего раздела проекта, см. UsbHidDemoCode -> Properties -> Configuration Properties -> C/C++ -> Command Line -> Additional Options). UsbHidSmallDemoCode - пример консольной программы, также работающей с STK526 (компилируется сразу без ошибок) - она тупо мигает светодиодами. Есть также пример на JAVA (я его не пробовал) в папке JNICodeForHIDDLL. Уже скомпилированные исполняемые файлы находятся в папке ExeDemo.
    
Попробуем поуправлять нашим USB-устройством AVR USB HID DEMO. Подключаем прошитую плату AVR-USB162 через USB, запускаем программу UsbHidDemoCode.exe. Третья кнопка внизу "LED 3 .." включает/и выключает светодиод VD1 на макетной плате AVR-USB162 (порт P16 PD4, выв. 10 микроконтроллера AT90USB162). Остальные кнопки управляют следующими портами (на макетной плате AVR-USB162 соответствующих светодиодов нет):

LED 1   P12 PD0, выв. 6 микроконтроллера AT90USB162
LED 2   P13 PD1, выв. 7 микроконтроллера AT90USB162
LED 3   P16 PD4, выв. 10 микроконтроллера AT90USB162
LED 4   P17 PD5, выв. 11 микроконтроллера AT90USB162

Порты P3..P6 макетной платы AVR-USB162 соответствуют кнопкам макетной платы STK526 (они в firmware STK526-series2-hidio работают как входы). Если эти порты позамыкать на землю, то программа UsbHidDemoCode.exe будет выводить в сообщения:
AVR_USB_HID_DEMO04.JPG

[Ссылки]

1. Примеры от Atmel - firmware и ПО хоста для платы AVR-USB162 в одном архиве.
2AVR328: стандартная (generic) реализация устройства USB HID.
3. LUFA (Lightweight USB Framework for AVRs) - бесплатная библиотека для AVR с аппаратным интерфейсом USB.
4. AVR276: USB Software Library for AT90USBxxx Microcontrollers.
5. STK526 site:atmel.com - плата разработчика (AVR USB серии 2) от Atmel, STK526 Hardware User Guide site:atmel.com - руководство пользователя.
6. Миниатюрные макетные платы с интерфейсом USB: AVR-USB162 и AVR-USB162MU (чип AT90USB162, относящийся к микроконтроллерам AVR USB серии 2 Atmel).
7. Как пользоваться bootloader DFU Flip - загружать программу в память чипа без программатора, через интерфейс USB.
8. AVR USB Series2 Software Packages site:atmel.com.
9. Работа с Generic HID Class на платформе Windows PC.
10. Библиотеки для управления устройствами USB HID.