Эта отладочная плата позволяет разрабатывать маленькие устройства USB. Чип AT90USB162, который установлен на плате, имеет встроенный аппаратный интерфейс, позволяющий изготавливать full-speed USB 2.0 устройства, соответствующие современным требованиям.
С помощью макетной платы AVR-USB162 и библиотеки LUFA Вы легко можете разработать собственные устройства HID (клавиатуры, джойстики, мыши, устройства ввода/вывода и т. д.) или сделать последовательный порт на классе CDC (виртуальный COM-порт), причем разрабатывать драйвер для устройств HID и CDC не нужно - они работают на всех современных компьютерных платформах. Программное обеспечение для разработки также присутствует на всех современных операционных системах - включая Linux, Windows, и Macintosh (Mac OS).
На макетной плате AVR-USB162 установлены: - miniUSB коннектор J1, через который питается плата. - кнопка SW2 HWB, управляющая работой bootloader-а, и кнопка SW1 RESET. - коннектор ISP/debugWIRE J4, через который можно запрограммировать плату с помощью стандартного программатора (avrdude, JTAGICE-mkII, PonyPROG, STK200, STK500, AVR Dragon, AVRISP-MkII, USBasp и проч.), а также отлаживать программу через аппаратный отладчик, поддерживающий шину debugWIRE (например, JTAGICE-mkII, AVR Dragon). Программирование и отладка работают в широко известных IDE AVR Studio и IAR Embedded Workbench. - перемычка J3, управляющая напряжением питания ядра микроконтроллера (иногда это может понадобиться). - индикационный светодиод VD1. - макетное поле с шагом 2.54 мм (100 mil), которое можно при необходимости отпилить, уменьшив тем самым размер USB-устройства. - контактные площадки P1..P22, на которые разведены порты микроконтроллера и питание.
Размеры платы с макетным полем 64.8 x 30.7 мм, без макетного поля 45.4 x 30.7 мм (для уменьшения размеров макетное поле можно отрезать). Толщина платы вместе с монтажом 11.5 мм (определяется самым высоким элементом на плате - ISP коннектором, он выступает над поверхностью TOP платы на 9 мм). USB-коннектор выступает за край платы на 2 мм.
[Дополнительные возможности портов ввода-вывода AT90USB162]
Все порты микроконтроллера AT90USB162 могут работать не только как простые ножки ввода вывода GPIO. Они также могут нести дополнительные функции, привязанные к богатой внутренней аппаратуре ядра AVR. В таблице ниже представлено краткое описание этих функций (полное описание см. в даташите на микроконтроллер AT90USB162).
Контакт платы |
Имя порта |
Описание возможностей |
P1 |
PB0 |
~SS, PCINT0. ~SS - этот вывод может работать как аппаратная выборка интерфейса SPI (Slave Port Select input). PCINT0 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 0). |
P2 |
PB1 |
SCK, PCINT1. SCK - тактовый сигнал интерфейса SPI (Master Clock output, Slave Clock input). PCINT1 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 1). |
|
PB2 |
PDI, MOSI, PCINT2. Этот вывод не выведен на контакты P1..P22, поскольку используется для программирования ISP. PDI - SPI Serial Programming Data Input. Во время последовательного программирования AT90USB162 этот вывод используется как вход данных. MOSI - сигнал данных интерфейса SPI. PCINT2 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 2). |
|
PB3 |
PDO, MISO, PCINT3. Этот вывод не выведен на контакты P1..P22, поскольку используется для программирования ISP. PDO - SPI Serial Programming Data Output. Во время последовательного программирования AT90USB162 этот вывод используется как выход данных. MISO - сигнал данных интерфейса SPI. PCINT3 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 3). |
P3 |
PB4 |
T1, PCINT4. эта ножка может работать как тактовый вход для таймера/счетчика 1 (Timer/Counter1 External Counter Input). Подробнее см. в статье "Использование 16-bit Timer/Counter1 для измерения и подсчета импульсов". PCINT4 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 4). |
P4 |
PB5 |
PCINT5 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 5). |
P5 |
PB6 |
PCINT6 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 6). |
P6 |
PB7 |
OC0A, OC1C, PCINT7. OC0A и OC1C могут работать как выходы сигнала события совпадения таймера/счетчика 0 и 1 (Timer/Counter Compare Match Output). PCINT7 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 7). |
P7 |
PC2 |
PCINT11 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 11). |
P8 |
PC4 |
PCINT10 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 10). |
P9 |
PC5 |
OC1B, PCINT9. OC1B - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). PCINT9 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 9). |
P10 |
PC6 |
OC1A, PCINT8. OC1A - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). PCINT8 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 8). |
P11 |
PC7 |
ICP1, INT4, CLKO. ICP1 - вход для захвата внешних импульсов (Timer/Counter1 Input Capture Pin). Может использоваться для измерения длительностей сигнала с помощью таймера 1. INT4 - внешний источник прерывания 4 (External Interrupt source 4). CLK0 - может работать как выход тактов генератора, эта возможность разрешается программированием фьюза. |
P12 |
PD0 |
OC0B, ~INT0. OC0B - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). INT0 - внешний источник прерывания 0 (External Interrupt source 0). |
P13 |
PD1 |
AIN0, ~INT1. AIN0 - положительный вход аналогового компаратора (Analog Comparator Positive input). INT1 - внешний источник прерывания 1 (External Interrupt source 1). |
P14 |
PD2 |
AIN1, RXD1, ~INT2. AIN1 - отрицательный вход аналогового компаратора (Analog Comparator Positive input). RXD1 - вход приемника UART (USART1 Receive Data). INT2 - внешний источник прерывания 2 (External Interrupt source 2). |
P15 |
PD3 |
TXD1, ~INT3. TXD1 - вход передатчика UART (USART1 Transmit Data). INT3 - внешний источник прерывания 3 (External Interrupt source 3). |
P16 |
PD4 |
INT5 - эта ножка может работать как внешний источник прерывания 5 (External Interrupt source 5). К порту PD4 также подключен индикационный светодиод VD1. |
P17 |
PD5 |
XCK1, PCINT12. XCK1 - тактовый вход для UART (USART1 External Clock). PCINT12 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 12). |
P18 |
PD6 |
~RTS, INT6. ~RTS - управление входным потоком данных UART (USART1 Receiver Flow Control). INT6 - внешний источник прерывания 6 (External Interrupt source 6). |
P19 |
GND |
Земля, общий провод всех сигналов, минус питания. |
P20 |
VCC |
Напряжение питания портов ввода/вывода, либо 3.3V, либо 5V (зависит от положения перемычки J3). |
P21 |
GND |
Земля, общий провод всех сигналов, минус питания. |
P22 |
PD7 |
~HWB, TO, ~CTS, INT7. HWB - Hardware Boot, вход активации бутлоадера (загрузчика программы через USB), подключен к кнопке SW2 HWB. T0 - тактовый вход для таймера/счетчика 0. ~CTS - управление потоком данных передачи UART (USART1 Transmitter Flow Control). INT7 - внешний источник прерывания 6 (External Interrupt source 7). |
Сигналы совпадения таймера OC0A, OC1C, OC1B, OC1A, OC0B могут использоваться для генерации постоянного аналогового уровня и звуковых сигналов с помощью ШИМ (PWM). Сигнал совпадения выдается, когда содержимое счетчика таймера совпало с предопределенным заранее значением. Подробнее см. статью "ATmega16 - PWM с помощью T/C0, T/C1, T/C2" и даташит на AT90USB162.
[Чем программировать - USB bootloader Atmel, Flip DFU]
В микроконтроллер прошито заводское программное обеспечение (bootloader, называемое также DFU - Device Firmware Uploader или Device Firmware Upgrade), позволяющее загрузить программу пользователя в память микроконтроллера через интерфейс USB и запустить её на выполнение. Это позволяет писать и отлаживать программы, не имея вообще никакого отладчика и программатора. Конечно, не те удобства, что предоставляет аппаратный отладчик JTAGICE-mkII, но зато дешево и сердито, затраты для быстрого старта минимальные. Программа и технология, предоставляющая такие возможности, называется Flip (FLexible In-system Programmer), программа бесплатна и доступна для скачивания на сайте atmel.com. Подробная документация, как все это делается, также доступна, правда на английском языке.
После заливки firmware с помощью загрузчика Flip DFU сам загрузчик не стирается, поэтому Вы можете перепрошивать макетную плату через USB практически неограниченное количество раз. Это очень удобно использовать для обновления программного обеспечения в приборах, где работает макетная плата, потому что ISP-программатор оказывается не нужен.
Прошивку-bootloader, записанную на фабрике Atmel (она обеспечивает работу Flip), нельзя считать ISP-программатором, поскольку она защищена lock-битами. Для того, чтобы можно было воспользоваться ISP-программатором или debugWIRE-отладчиком, чип придется стереть, что полностью уничтожит Flip-bootloader. Но особо печалиться по этому поводу не надо, так как на сайте atmel.com доступен для свободного скачивания бинарник bootloader-a (см. [7]), и его всегда можно восстановить. Как я понял, использование Flip исключает применение для отладки обычного ISP-программатора и отладчика debugWIRE, и наоборот.
Установка программы, интерфейс Flip и работа с ним под Windows до предела упрощены. Скачайте инсталлятор по ссылке [6], установите. При подключении макетной платы AVR-USB162 через USB система запросит драйвера, подсуньте ей путь до c:\Program Files\Atmel\Flip 3.3.2\usb\ (это драйвер для bootloadera и Flip), после этого в системе появится устройство AT90USB162:
Запускаем программу Flip, выбираем в меню Device -> Select... -> AT90USB162, жмем вторую кнопочку со шнурком на картинке (Select a Communication Medium), выбираем USB, в появившемся маленьком окошке жмем Open. Вуаля! Появился нехитрый интерфейс программатора Flip:
Как видно на скриншоте, доступно для использованием пользователем только 12 килобайт памяти (4 килобайта съел Flip-bootloader).
Имеется также удобная консольная программа batchisp.exe, избавляющая от лишних телодвижений при программировании памяти микроконтроллера. Вот пример командного файла для программирования памяти чипа AT90USB162:
"c:\Program Files\Atmel\Flip 3.4.7\bin\batchisp.exe" -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer release\psw-storage.hex program verify
@pause
В этом примере сразу друг за другом выполняются 4 операции: очистка FLASH памяти чипа (команда erase), проверка качества очистки памяти (команда blankcheck), программирование памяти файлом release\psw-storage.hex (команды loadbuffer и program), проверка записанных данных программы (команда verify). Весь процесс занимает считанные секунды.
После программирования можно сразу запустить записанную программу firmware, если к списку команд добавить команду start. Команда start имеет следующий индекс:
start < reset | noreset > address
Если указана опция reset, то на ножке RESET микроконтроллера будет сформирован импульс сброса, который может использоваться для сброса внешних схем. Если к ножке сброса RESET микроконтроллера никаких устройств не подключено, то может быть указана опция noreset. Параметр address задает адрес, не который должен произойти безусловный переход (обычно это адрес 0). Пример:
"%ProgramFiles%\Atmel\Flip 3.4.7\bin\batchisp.exe" -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer debug\psw-storage.hex program verify start noreset 0
[Если bootloader не работает, программа Flip не видит чип AT90USB162]
При исправной и правильной схеме может быть два варианта - у Вас стерт bootloader, либо записана пользовательская программа, которая получает управления вместо bootloader.
Если стерт bootloader - его надо восстановить с помощью ISP-программатора. Скачайте бинарник bootloader (см. [7]) и прошейте в чип AT90USB162.
Если запускается пользовательская программа, то bootloader можно запустить стандартной процедурой, описанной в документации:
- подключаем плату через USB - нажимаем кнопку SW1 RESET - удерживая кнопку SW1 RESET, нажимаем кнопку SW2 HWB - удерживая кнопку SW2 HWB, отпускаем кнопку SW1 RESET - отпускаем SW2 HWB
После этой процедуры у нас в системе должно появиться устройство LibUSB-Win32 Devices\AT90USB162 (см. в Диспетчере Устройств), и теперь снова будет работать программирование через USB с помощью программы DFU Flip. Если устройство LibUSB-Win32 Devices\AT90USB162 в Диспетчере Устройств не появилось, значит надо перепрошить bootloader (Вы его каким-то образом стерли).
[Если не устанавливается драйвер Flip для чипа AT90USB162]
Вы установили Flip, подключаете макетную плату к компьютеру, система Windows видит новое устройство и запрашивает драйвер. Но после того, как Вы ей указываете путь до драйвера %ProgramFiles%\ATMEL\FLIP 2.4.6\usb\, система говорит, что не нашла драйвер, и устройство остается в Диспетчере Устройств с желтым восклицательным знаком. Причина в том, что Вы по ошибке установили старый Flip, который не поддерживает чип AT90USB162. Удалите этот Flip, и установите самый свежий - на момент декабря 2011 это был Flip 3.4.5 for Windows (он написан на Java, если у Вас в системе не установлена подсистема Java, выбирайте для закачки полный пакет, где имеется Java Runtime Environment). После этого повторите процесс установки драйвера, указав папку %ProgramFiles%\ATMEL\Flip 3.4.5\usb\.
[Аналоги]
AVRopendous Teensy USB Development Board AVR-USB-162 от Olimex Benito at90USB162 Board Bumble-B AT90USB162 development board (fletchtronics.net) Minimus AVR USB Dev Kit
[Проблемы и способы их решения]
См. [8].
[Ссылки]
1. Общее описание библиотеки LUFA и документация по библиотеке LUFA на русском языке. 2. Как из макетной платы AVR-USB162 сделать ISP программатор, совместимый с avrdude. 3. Примеры с сайта Olimex - для AVR Studio+WinAVR (gcc version 3.4.6). - мигание светодиодом - опрос кнопки - генератор частоты - демонстрационный код USB-мыши - демонстрационный код виртуального COM-порта. 4. AVR-USB162: где найти рабочие примеры кода firmware и ПО хоста. 5. USB DFU Bootloader Datasheet site:atmel.com - описание bootloader (технология Flip) при работе через USB. 6. FLIP site:atmel.com - программа Atmel, с помощью которой Вы можете прошить плату через USB без программатора (используется USB DFU Bootloader, встроенный в микросхему AT90USB162). По этой же ссылке доступно для закачки firmware бутлоадеров DFU Flip (см. также [7]). Старая версия Flip 3.3.2 здесь. 7. bl_usb_162v105.zip - прошивка bootloader-а. 8. FAQ по макетной плате AVR-USB162 (чип AT90USB162). |
Комментарии
microsin: вообще-то просто так нельзя. Во-первых, Вам следует учитывать, что 500 миллиампер это довольно большой ток, так что на резисторе R3 будет падать 0.5V, и еще довольно много на шнуре USB (в зависимости от его качества). Во-вторых, сам микроконтроллер потребляет ток около 50mA. В-третьих, если заглянуть в даташит, то станет ясно, что на одну ножку порта микроконтроллер а AT90USB162 можно подключить максимальную нагрузку не более 40mA, и это при соблюдении условия, что суммарно через все выводы микроконтроллер а и ножки GND и VCC должен протекать ток не более 200mA. Следовательно, между ножками порта и светодиодами, чтобы выдать токи порядка 400..450mA, следует ставить буферы.
microsin: да, можно.
Получился отличный контроллер клавиатуры. Если кому интересно, исходный код открыт: http://catboard.klava.org/ru.html
microsin: к сожалению, не могу ответить максимально полно на Ваш вопрос. Попробуйте найти ответ в официальной документации Atmel. Насколько мне известно, после простого запуска бутлоадера и далее запуска Flip-а память чипа не стирается. Стирается она только после специального выбора функции Erase в программе Flip. А вот почему не читается память через Flip после нового запуска бутлоадера - не знаю. Возможно, что это сделано специально для защиты / копирайта, чтобы никакая грязная лапа не могла заграбастать код. Если что-то Вас не устраивает в таком поведении - пользуйтесь альтернативными бутлоадерами с открытым исходным кодом (см. например библиотеку LUFA) или напишите свой собственный.
microsin: схема разработана на основе starter-китов Atmel, Olimex и Teensy. Контроллер может управлять любыми нагрузками, если правильно спроектировать схему. Например, для устранения влияния помех нужно использовать оптронную развязку от силового оборудования и правильно организовывать заземление (зануление). В подобных условиях плата мною не тестировалась. Основные отличия AVR-USB162 от аналогичной Olimex (по мере уменьшения важности, ИМХО):
1. Цена.
2. Размер макетного поля, общий размер макетной платы. AVR-USB162 разрабатывалась не только для макетирования, но и для мелкосерийного изготовления малогабаритных USB-устройств радиолюбителями .
3. Наличие стабилизатора и коннектора для подключения внешнего питания на макетной плате Olimex. На макетной плате AVR-USB162 этого нет, эта плата по умолчанию предназначена для питания от USB.
4. В макетной плате AVR-USB162 имеется перемычка U3 для управления напряжением питания портов ввода/вывода чипа, на макетной плате Olimex такой возможности нет.
5. На AVR-USB162 обычно стоит кварц на 16 МГц, на Olimex AVR-USB-162 стоит кварц 8 МГц.
6. На AVR-USB162 обычно стоит коннектор ISP 6 pin (цоколевка Atmel), на Olimex AVR-USB-162 стоит коннектор ISP 10 pin.
7. На макетной плате Olimex имеется сигнал подключения порта USB - USB_P, на AVR-USB162 такого сигнала нет.
microsin: исходников фирменного бутлоадера Atmel нет, в документации я тоже ответа на Ваш вопрос я не встречал. Поэтому полно ответить на него не могу. В соответствии со здравым смыслом бутлоадер нельзя повредить самим бутлоадером, если, например, попытаться перезаписать область памяти бутлоадера с помощью Flip. Т. е. программой Flip повредить бутлоадер должно быть невозможно (даже если нажать в оболочке Flip кнопку Erase - при этом очищается область памяти, куда можно записать программу пользователя). А вот программатором ISP стереть бутлоадер чипа AT90USB162 можно. Кроме того, я отметил интересную особенность - в состоянии перемычек по умолчанию (как чип поставляется с завода) двоичный код бутлоадера с помощью ISP считать тоже нельзя - область памяти программ 0x0000..0x3FFF читается как вся заполненная байтами 0xFF, хотя в конце где-то должен быть бутлоадер.
microsin: конечно, скачайте последнюю версию, сейчас это Flip 3.4.2. У меня Flip 3.3.2, и там уже есть чип AT90USB162.
microsin: микроконтроллер у абсолютно все равно, на чем Вы пишете программу - на ассемблере, Паскале, Си, или даже в двоичных кодах. Но для USB на ассемблере Вы вряд ли найдете примеры для чипа AT90USB162, так как протокол USB слишком сложен для его реализации на ассемблере. Если же Вас не интересует USB, то можете брать любые примеры на ассемблере для семейства AVR ATmega, не привязанные к аппаратуре чипа. Этот ассемблерный код будет без проблем работать и на чипе AT90USB162, так как у него тоже ядро AVR ATmega.
...
## My
F_CPU = 16000000
CDEFS = -DF_CPU=$(F_CPU)UL
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += $(CDEFS)
...
При построении проекта вижу в окне build следующее:
avr-gcc.exe -I"./.." -I"../conf" -I"../../../../at90usb162" -I"../../../../common" -mmcu=at90usb162 -DF_CPU=16000000UL -D AVRGCC -Wall -gdwarf-2 ...
где -mmcu=at90usb162 -DF_CPU=16000000UL, как я понимаю, и указывают компилятору микроконтроллер и частоту.
Прошиваю микроконтроллер и имею то же самое, что было, то есть ничего, Windows не видит никакого устройства.
Может ли быть дело сборке макетной платы, учитывая что светодиод всё-таки мигает как положено? Буду благодарен за любую помощь и направления куда копать.
microsin: возможно, что у Вас аппаратура, на которую рассчитана программа мыши, отсутствует в схеме, и поэтому программа мыши не работает. Смотрите исходники и соответствующую документацию по проекту мыши.
RSS лента комментариев этой записи