Статья писалась несколько лет назад, и многое изменилось. Сейчас уже лучше было бы её озаглавить - "где не надо искать примеры кода для микроконтроллеров Atmel с аппаратным интерфейсом интерфейсом USB". Дело все в том, что библиотека LUFA выросла и набрала силу, к тому же появились и другие примеры работы с чипами AVR USB, а фирменные библиотеки Atmel далеки от того, чтобы их можно было назвать дружественными для пользователя (особенно для начинающего). Поэтому для быстрого старта с чипами AVR USB сейчас наилучший выбор LUFA (см. [3]). Эта статья посвящена только примерам от Atmel, которые есть на сайте atmel.com.
Основная сложность примеров от Atmel в том, что они разбиты по сериям микроконтроллеров AVR с аппаратным USB. Различают микроконтроллеры AVR USB серий 2, 4, 6, 7, и для серий и их групп пакеты примеров доступны для закачки в виде отдельных пакетов. Если об этом не знать, то в примерах легко запутаться. Вторая сложность - ассортимент примеров для разных серий 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. Примеры кода от Atmel, которые будут работать на этих макетных платах, основаны на библиотеке "USB Software Library for AT90USBxxx Microcontrollers" AtUsbHid.dll, см. [4]. Примеры изначально предназначены для макетной платы Atmel STK526, см. [5], но работают и на AVR-USB162 без переделки.
Пример firmware можно найти на страничке AVR USB Series2 Software Packages сайта Atmel. Там много всего полезного, но нас интересует USB HID Generic I/O for STK526. Распакуйте содержимое скачанного архива 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:
 |
 |
[ПО хоста]
Пример ПО хоста (программа на компьютере, которая управляет устройством USB) можно найти на страничке AVR USB Software Packages сайта Atmel, см. USB PC Drivers Based on Generic HID Class, документация находится в файле doc7645.pdf. Распакуйте содержимое архива 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 будет выводить в сообщения:
[Ссылки]
1. Примеры от Atmel - firmware и ПО хоста для платы AVR-USB162 в одном архиве.
2. AVR328: USB Generic HID Implementation.
3. LUFA (Lightweight USB Framework for AVRs) - бесплатная библиотека для AVR с аппаратным интерфейсом USB.
4. AVR276.
5. Плата разработчика (AVR USB серии 2) от Atmel ATSTK526, руководство пользователя STK526 Hardware User Guide.
6. Миниатюрные макетные платы с интерфейсом USB: AVR-USB162 и AVR-USB162MU (чип AT90USB162, относящийся к микроконтроллерам AVR USB серии 2 Atmel).
7. Как пользоваться bootloader DFU Flip - загружать программу в память чипа без программатора, через интерфейс USB.
|
Комментарии
2011-04-2912:37:46 На последних платах avr-usb162 стоит кварц на 16 МГц, поэтому пример из статьи, рассчитанный на кварц 8 МГЦ, в исходном виде работать не будет - после прошивки компьютер не будет видеть плату. Чтобы пример заработал, нужно внести изменения в файл config.h в папке conf. Почти в самом конце в строке:
#define FOSC 8000
надо изменить 8 на 16:
#define FOSC 16000.
После этого файл прошивки нужно заново скомпилировать, например, в IAR (см. в тексте статьи).
После прошивки все будет работать.
Для того, чтобы заново открыть во FLIP уже прошитый контроллер, нужно нажать на плате кнопку SW1, удерживая ее нажать SW2, отпустить SW1, отпустить SW2. После этого котроллер снова загризит бутлодер и его можно будет открыть во FLIP.
2011-02-2612:38:23 Перевел документ AVR328 - не кидайтесь тухлыми яйцами пжл, в переводе возможны неточности.
http://narod.ru/disk/6396163001/doc7599.doc.html