Макетная плата AVR-USB162 Печать
Добавил(а) microsin   

Эта отладочная плата позволяет разрабатывать маленькие устройства USB. Чип AT90USB162, который установлен на плате, имеет встроенный аппаратный интерфейс, позволяющий изготавливать full-speed USB 2.0 устройства, соответствующие современным требованиям.

С помощью макетной платы AVR-USB162 и библиотеки LUFA Вы легко можете разработать собственные устройства HID (клавиатуры, джойстики, мыши, устройства ввода/вывода и т. д.) или сделать последовательный порт на классе CDC (виртуальный COM-порт), причем разрабатывать драйвер для устройств HID и CDC не нужно - они работают на всех современных компьютерных платформах. Программное обеспечение для разработки также присутствует на всех современных операционных системах - включая Linux, Windows, и Macintosh (Mac OS).

at90usb162-02-sch.jpg at90usb162-04IMG_8330.jpg at90usb162-04IMG_8334.jpg

На макетной плате 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, на которые разведены порты микроконтроллера и питание.

AVR-USB162-pinout

Размеры платы с макетным полем 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, и наоборот.

AT90USB162fuses.JPG AT90USB162lockbits.JPG

Установка программы, интерфейс Flip и работа с ним под Windows до предела упрощены. Скачайте инсталлятор по ссылке [6], установите. При подключении макетной платы AVR-USB162 через USB система запросит драйвера, подсуньте ей путь до c:\Program Files\Atmel\Flip 3.3.2\usb\ (это драйвер для bootloadera и Flip), после этого в системе появится устройство AT90USB162:
AT90USB162device.JPG

Запускаем программу Flip, выбираем в меню Device -> Select... -> AT90USB162, жмем вторую кнопочку со шнурком на картинке (Select a Communication Medium), выбираем USB, в появившемся маленьком окошке жмем Open. Вуаля! Появился нехитрый интерфейс программатора Flip:
AT90USB162flip01.JPG

Как видно на скриншоте, доступно для использованием пользователем только 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

batchisp-FLIP-AT90USB162-example

В этом примере сразу друг за другом выполняются 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).