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

Макетная плата AVR-USB32U4 построена на AVR микроконтроллере ATmega32U4 с аппаратным интерфейсом USB 2.0. Она является аналогом платы Teensy 2.0.

 

AVR-USB32U4-SCH AVR-USB32U4-PCB AVR-USB32U4-top-IMG 2310 AVR-USB32U4-bottom-IMG 2315  

Микроконтроллер ATmega32U4 (сигнатура 0x1E 0x95 0x87) по классификации Atmel относится к Series 4 USB AVR. Это означает, что на нем можно изготавливать USB-устройства стандарта USB 2.0 на скорости до Full Speed включительно. Ядро ATmega32U4 почти полностью совпадает с ядром популярного микроконтроллера ATmega32A, главное отличие только в наличии аппаратного интерфейса USB.

На макетной плате AVR-USB32U4 можно изготавливать малогабаритные устройства USB на основе готовых проектов из библиотеки LUFA [1], либо на основе примеров кода из AVR USB Series4 Software Packages [2]. Оба решения бесплатны, однако LUFA [1] намного богаче готовыми примерами USB устройств, но для [2] есть примеры готовых программ ПО хоста для управления устройствами USB HID.

[Особенности платы AVR-USB32U4]

На плате AVR-USB32U4 установлены:

• Микроконтроллер ATmega32U4 в корпусе TQFP44 с аппаратным интерфейсом USB, 32 кбайта памяти программ FLASH, 2.5 кбайт ОЗУ (SRAM), 1 кбайт энергонезависимой памяти данных EEPROM.
• Коннектор мини USB для подключения к компьютеру. Через этот же коннектор подается питание на плату.
• Кварцевый резонатор на 16 МГц. Может также использоваться кварц на 8 МГц.
• Контакты + и - на которые выведено напряжение VCC.
• Разъемы JP1 и JP2, расположенные по краям платы. На них выведены все ножки портов GPIO, GND, VCC, сигнал сброса ~RST, опорное напряжение АЦП AREF, выход внутреннего стабилизатора 3.3V UCAP. В разъемы JP1 и JP2 можно запаять линейки контактов с шагом 2.54 мм, чтобы вставить плату в гнезда платы ProsKit.
• Кнопка SW1, которая служит для запуска бутлоадера.
• Светодиод LED1, который можно использовать для индикации каких-нибудь событий и отладки программы firmware микроконтроллера.
• Перемычка SJ1, переключающая рабочее напряжение портов GPIO микроконтроллера (3.3V или 5V).

По сторонам платы расположены 2 макетных поля, на которых удобно паять схемы с помощью навесного монтажа. Если эти макетные поля отпилить, то получается компактный модуль, который можно использовать для отладки программ и схем с помощью контактных полей ProsKit.

AVR-USB32U4-IMG 2304 AVR-USB32U4-with-ProsKit-IMG 2303

С помощью перемычки SJ1 (расположена на обратной стороне платы) можно переключать уровень напряжения портов ввода вывода (GPIO) - либо 3.3V, либо 5V, по умолчанию 5V. Чтобы установить рабочий уровень напряжения GPIO на 3.3V, нужно перерезать скальпелем перемычку между контактами 2 и 3 SJ1, и напаять каплю припоя между контактами 1 и 2.

Необязательные для установки компоненты C4, C5, C6, C8, C9, C10 расположены на обратной стороне платы.

[Дополнительные возможности портов ввода-вывода ATmega32U4]

Все порты микроконтроллера ATmega32U4 могут работать не только как простые ножки ввода вывода GPIO. Они также могут нести дополнительные функции, привязанные к богатой внутренней аппаратуре ядра AVR. В таблице ниже представлено краткое описание этих функций (полное описание см. в даташите на микроконтроллер ATmega32U4).

AVR USB32U4 pins

Описание функций ножек сведено в таблицы, соответствующую номерам ножек коннекторов JP1 и JP2. В отдельном столбце таблицы указаны выводы макетной платы Teensy 2.0.

Таблица 1. Цоколевка JP1 и дополнительные функции GPIO.

Имя
порта
Функции Описание
1 PD0 ~INT0
SCL
OC0B
~INT0: вход внешнего прерывания 0 (External Interrupt source 0). SCL: сигнал тактов интерфейса I2C (TWI). OC0B: выход сигнала совпадения B таймера 0 (Output Compare Match B output).
2 PD1 ~INT1
SDA
~INT1: вход внешнего прерывания 1 (External Interrupt source 1). SDA: сигнал данных интерфейса I2C (TWI).
3 PD2 ~INT2
RXD1
~INT2: вход внешнего прерывания 2 (External Interrupt source 2). RXD1: вход приемника USART1.
4 PD3 ~INT3
TXD1
~INT3: вход внешнего прерывания 3 (External Interrupt source 3). TXD1: выход передатчика USART1.
5 PD4 ICP1
ADC8
ICP1: ножка захвата длительностей цифрового сигнала по таймеру 1 (Input Capture Timer 1). ADC8: вход канала 8 АЦП (Analog to Digital Converter channel 8).
6 PD5 XCK1
~CTS
XCK1: внешний тактовый сигнал для USART1 (USART1 External clock). ~CTS: сигнал управления потоком данных UART на передачу.
7 PD6 T1
~OC4D
ADC9
T1: тактовый вход для таймера/счетчика 1 (Timer/Counter1 Clock Input). ~OC4D: инверсный выход сигнала совпадения D таймера 4 (Timer 4 Output Compare D). ADC9: вход канала 9 АЦП (Analog to Digital Converter channel 9). Лог. 1 на этой ножке зажжет светодиод LED1.
8 PD7 T0
OC4D
ADC10
T0: тактовый вход для таймера/счетчика 0 (Timer/Counter0 Clock Input). OC4D: выход сигнала совпадения D таймера 4 (Timer 4 Output Compare D). ADC10: вход канала 10 АЦП (Analog to Digital Converter channel 10).
9 PB3 PDO
MISO
PCINT3
PDO: используется при программировании памяти ATmega32U4 как выход данных, поступаемых на внешний программатор. MISO: сигнал данных канала SPI (Master Data input, Slave Data output). PCINT3: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 3).
10 PB4 ADC11
PCINT4
ADC11: вход канала 11 АЦП (Analog to Digital Converter channel 11). PCINT4: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 4).
11 PB5 OC1A
~OC4B
ADC12
PCINT5
OC1A: выход сигнала совпадения A таймера 1 (Output Compare Match A output). ~OC4B: инверсный выход сигнала совпадения B таймера 4 (Timer 4 Output Compare B). ADC12: вход канала 12 АЦП (Analog to Digital Converter channel 12). PCINT5: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 5).
12 PB6 OC1B
OC4B
ADC13
PCINT6
OC1B: выход сигнала совпадения B таймера 1 (Output Compare Match B output). OC4B: выход сигнала совпадения B таймера 4 (Timer 4 Output Compare B). ADC13: вход канала 13 АЦП (Analog to Digital Converter channel 12). PCINT6: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 6).
13 PB7 OC0A
OC1C
~RTS
PCINT7
OC0A: выход сигнала совпадения A таймера 0 (Output Compare Match A output). OC1C: выход сигнала совпадения C таймера 1 (Output Compare Match C output). ~RTS: сигнал управления потоком данных UART. PCINT7: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 7).
14 PC6 OC3A
~OC4A
OC3A: выход сигнала совпадения A таймера 3 (Timer 3 Output Compare A). ~OC4A: инверсный выход сигнала совпадения A таймера 4 (Timer 4 Output Compare A).
15 PC7 ICP3
CLKO
OC4A
ICP3: ножка захвата длительностей цифрового сигнала по таймеру 3 (Input Capture Timer 3). CLKO: если этот сигнал разрешен фьюзом, то на эту ножку выводится тактовая частота микроконтроллера. OC4A: выход сигнала совпадения A таймера 4 (Timer 4 Output Compare A).
16 PE2 ~HWB Этот порт также служит для активации USB-бутлоадера Flip/DFU (Hardware bootloader activation).

Таблица 2. Цоколевка JP2 и дополнительные функции GPIO.

Имя порта Функции Описание
1   VCC Напряжение питания портов GPIO AVR, может быть либо 3.3V, либо 5V (в зависимости от положения перемычки SJ1).
2   GND Земля, общий провод для всех сигналов, минус питания.
3   ~RST Сигнал сброса микроконтроллера, используется в интерфейсах ISP и JTAG. Также подключен к кнопке сброса SW1, которая активирует USB-бутлоадер (если плата AVR-USB32U4 подключена к компьютеру через USB).
4 PB0 ~SS
PCINT0
~SS: ножка, предназначенная для управления выборкой устройства, подключенного к шине SPI (SPI Slave Select input). PCINT0: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 0).
5 PB1 SCK
PCINT1
SCK: ножка тактового сигнала SPI (Master Clock output, Slave Clock input). PCINT1: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 1).
6 PB2 PDI
MOSI
PCINT2
PDI: используется при программировании памяти ATmega32U4 как вход данных, поступаемых от внешнего программатора. MOSI: сигнал данных канала SPI (SPI Master Data output, Slave Data input). PCINT2: ножка может обрабатывать прерывание по изменению внешнего сигнала на выводе (Pin Change Interrupt 2).
7 PE6 INT6
AIN0
INT6: неинвертирующий вход внешнего прерывания 6 (External Interrupt source 6). AIN0: инвертирующий вход аналогового компаратора (Analog Comparator Negative input).
8 PF0 ADC0 Вход канала 0 АЦП (Analog to Digital Converter channel 0).
9 PF1 ADC1 Вход канала 1 АЦП (Analog to Digital Converter channel 1).
10 PF4 ADC4
TCK
ADC4: вход канала 4 АЦП (Analog to Digital Converter channel 4). TCK: тактовый сигнал JTAG (JTAG Test ClocK).
11 PF5 ADC5
TMS
ADC5: вход канала 5 АЦП (Analog to Digital Converter channel 5). TMS: сигнал выборки режима тестирования JTAG (JTAG Test Mode Select).
12 PF6 ADC6
TDO
ADC6: вход канала 6 АЦП (Analog to Digital Converter channel 6). TDO: выход данных JTAG (JTAG Test Data Output).
13 PF7 ADC7
TDI
ADC7: вход канала 7 АЦП (Analog to Digital Converter channel 7). TDI: вход данных JTAG (JTAG Test Data Input).
14   AREF Вход подачи внешнего опорного напряжения для АЦП.
15   UCAP Выход внутреннего стабилизатора напряжения 3.3V.
16   GND Земля, общий провод для всех сигналов, минус питания.

Сигналы совпадения таймера OC0B, ~OC4D, OC4D, OC1A, ~OC4B, OC1B, OC4B, OC0A, OC1C, OC3A, ~OC4A, OC4A могут использоваться для генерации постоянного аналогового уровня и звуковых сигналов с помощью ШИМ (PWM). Сигнал совпадения выдается, когда содержимое счетчика таймера совпало с предопределенным заранее значением. Подробнее см. статью - "ATmega16 - PWM с помощью T/C0, T/C1, T/C2" и даташит на ATmega32U4.

[Как прошивать AVR-USB32U4]

Память программ (FLASH размером 32 килобайта) микроконтроллера ATmega32U4 можно прошивать прямо через интерфейс USB, для этого не нужен никакой дополнительный внешний программатор. Это возможно благодаря прошитому в память загрузчику DFU Flip компании Atmel. Загрузчик прошивается прямо на заводе Atmel, и его можно использовать сразу, "из коробки", если частота используемого кварца 8 МГц или 16 МГц. На плате AVR-USB32U4 стоит кварц на 16 МГц, так что можно использовать загрузчик.

После заливки firmware с помощью загрузчика Flip DFU сам загрузчик не стирается, поэтому Вы можете перепрошивать макетную плату через USB практически неограниченное количество раз. Это очень удобно применять для обновления программного обеспечения в приборах, где работает макетная плата, потому что ISP-программатор оказывается не нужен.

Для использования загрузчика Вам нужно установить утилиту FLIP, которую можно свободно скачать с сайта Atmel. Процесс запуска загрузчика по шагам:

1. Скачайте и установите пакет инсталлятора FLIP с сайта Atmel. Строка для поиска ссылки загрузки: FLIP site:atmel.com. На момент написания статьи была доступна версия FLIP 3.4.7 for Windows. Запустите инсталлятор, следуйте указаниям. После установки исполняемые файлы утилиты будут скопированы в папку C:\Program Files\Atmel\Flip 3.4.7\. Драйвера для микроконтроллеров, поддерживающих FLIP, находятся в поддиректории Flip 3.4.7\usb.
2. Подключите плату AVR-USB32U4 к компьютеру через интерфейс USB. Windows обнаружит новое устройство, и запросит для него драйвер. Укажите на папку с драйверами C:\Program Files\Atmel\Flip 3.4.7\usb. После установки драйвера на компьютере появится новое USB-устройство ATmega32U4, которое предназначено для перепрошивки памяти микроконтроллера утилитой FLIP. Процесс установки драйвера хорошо виден на скриншотах.

AVR-USB32U4-flip-driver-install01 AVR-USB32U4-flip-driver-install02 AVR-USB32U4-flip-driver-install03 AVR-USB32U4-flip-driver-install04 AVR-USB32U4-flip-driver-install05 AVR-USB32U4-flip-driver-install06 AVR-USB32U4-flip-driver-install07 AVR-USB32U4-flip-driver-install08  

Если в процессе установки будут запрашиваться какие-то файлы, то указывайте на содержимое папки C:\Program Files\Atmel\Flip 3.4.7\usb. Если будут запросы на перезапись файлов более новых версий старыми, то оставляйте новые версии файлов. Если каких-то файлов не хватает (к примеру, их нет в папке C:\Program Files\Atmel\Flip 3.4.7\usb и её подпапках), то скорее всего у Вас не самая свежая версия FLIP. Скачайте новую версию с сайта Atmel, или ищите недостающие файлы в архиве [3].

После окончания установки можете попробовать прошить Вашу плату через утилиту FLIP. Это делается очень просто. Запустите утилиту FLIP через стартовое меню (кнопка Start Windows), или ярлыком на рабочем столе:

FLIP-desktop-shortcut

После запуска программы Flip появится окно, где в меню Device -> Select... нужно выбрать тип программируемого устройства ATmega32U4:

FLIP-device-select-menu FLIP-device-select-dialog

Далее нужно в меню Settings -> Communication нужно выбрать подключение USB, и затем нажать кнопку Open:

FLIP-select-communication-menu FLIP-communication-open

После этого появится и станет активным главное окно утилиты Atmel FLIP:

FLIP-main-window

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

Operation Flow. Здесь происходит управление основными операциями: Erase (очистка памяти, содержимое памяти заполняется байтами 0xFF), Blank Check (проверка памяти на чистоту), Program (программирование памяти данными из буфера), Verify (проверка на соответствие друг другу памяти чипа и содержимого буфера).

FLASH Buffer Information. По умолчанию предполагается программирование памяти FLASH (но это можно поменять, если нажать кнопку Select EEPROM). В этом разделе окна выводится информация о свободном объеме памяти (28 KB), диапазона адресов буфера (т. е. загруженной в память прошивки. На скриншоте показано 0x0 - 0x0, что означает, что пока в буфер ничего не загружено), контрольная сумма буфера, имя загруженного HEX-файла (на скриншоте пока имя не указано, так как еще ничего не загружено). Обратите внимание, что размер доступной памяти всего лишь 28 килобайт, а не 32. Это потому, что верхнюю часть памяти (4 килобайта) занимает фирменный загрузчик DFU FLIP. Для программы пользователя доступны младшие 28 килобайт памяти, начиная с адреса 0x0000 (диапазон байтовых адресов 0x0000 - 0x6FFF). Загрузчик соответственно начинается с байтового адреса 0x7000 (для загрузчика доступен диапазон байтовых адресов 0x7000 - 0x7FFF).

Примечание: под "байтовым адресом" подразумевается адрес памяти, адресуемой побайтно. Этот термин появился потому, что память программ AVR (FLASH) при выполнении инструкций программы адресуется не по байтам, а словами по 2 байта. Так что необходимо четко разделять адресацию инструкций и адресацию байтов памяти программ. Адрес инструкции всегда меньше байтового адреса в 2 раза. К примеру, если бутлоадер начинается с байтового адреса 0x7000, то для его запуска необходимо программно передать управление по адресу 0x3800. Память EEPROM всегда адресуется по байтам.

ATmega32U4. Эта секция показывает байты сигнатуры (Signature Bytes) программируемого чипа (шестнадцатеричные значения 0x58, 0x1E, 0x95, 0x87), идентификаторы загрузки устройства Device Boot Ids, версия бутлоадера. Кнопка Start Application позволяет запустить программу пользователя (произойдет безусловный переход на адрес 0x0000). Галочка Reset позволяет эмулировать аппаратный сброс устройства, который происходит при включении питания (для этого используется сброс по переполнению сторожевого таймера WatchDog).

Файл прошивки может быть в формате Intel HEX (обычно файл с расширением *.hex). Прошивку можно загрузить через меню File -> Load HEX File..., после этого прошивка загрузится в буфер программы. Запрограммировать память можно, если установить галочки Erase и Program, и нажать кнопку Run.

Но бутлоадер кое-что не может - нельзя перешивать фьюзы и биты защиты. Это сделано специально - если некорректно установить фьюзы или биты защиты, то может перестать работать генератор или перестанет запускаться загрузчик. Фьюзы по умолчанию для ATmega32U4: LOW 0x5E, HIGH 0x99, EXT 0xF3. Байт защиты по умолчанию: 0xEC.

[Кнопка запуска USB-загрузчика DFU Flip]

Если в памяти программ FLASH записана программа пользователя (начиная с адреса 0x0000), то при подключении платы AVR-USB32U4 к компьютеру запустится именно она, а не загрузчик, и плата AVR-USB32U4 начнет выполнение заложенных в неё пользователем функций. К примеру, она может работать как USB HID клавиатура или мышь, или работать как виртуальный последовательный COM-порт, устройство класса USB CDC.

Чтобы снова запустить загрузчик, на плате имеется специальная кнопка SW1. Если эту кнопку нажать, когда плата AVR-USB32U4 подключена через USB к компьютеру, и затем отпустить, то запустится загрузчик. Плата заново определится в Windows как USB-устройство ATmega32U4, и будет готово к новой перепрошивке с помощью утилиты Atmel FLIP. Если память программ очищена, то загрузчик запустится и без нажатия кнопки при подключении платы через интерфейс USB.

[Программирование через ISP и JTAG, пошаговая отладка]

На макетном поле платы AVR-USB32U4 имеются 2 разъема - ISP и JTAG. По умолчанию они не распаяны, но могут быть задействованы при необходимости. Оба имеют стандартную для Atmel цоколевку.

ISP. Это коннектор для подключения внешнего ISP-программатора. Аббревиатура ISP означает In-System Programming, т. е. "программирование прямо в системе". Этот интерфейс всегда традиционно предназначался для программирования готовых, собранных заводских устройств. По сути интерфейс ISP представляет собой шину SPI без специальных сигналов выборки. В настоящее время ISP все чаще вытесняется функционалом USB-загрузчиков (USB bootloader), таких как вышеописанный DFU Flip. Технология ISP позволяет записывать не только память программ FLASH и память данных EEPROM, но также и специальные биты защиты (Lock Bits), биты настроек (фьюзы, fuses, fuse bits), биты калибровки генератора. USB-загрузчик DFU Flip не позволяет записывать эти дополнительные конфигурационные биты. Ниже на рисунке показан внешний вид коннектора ISP6PIN, и в таблице перечислены все его сигналы.

AVR-USB32U4-ISP-pins

Имя Описание
1 MISO Master Input Slave Output. Выходной сигнал программируемого чипа (в нашем случае ATmega32U4), вход программатора ISP. Через этот сигнал в такт с частотой SCK в программатор поступают данные.
2 VCC Напряжение питания ядра программируемого чипа (в нашем случае ATmega32U4). Вход программатора ISP. С помощью измерения уровня напряжения на этом сигнале программатор ISP определяет, подано ли питание на программируемое устройство.
3 SCK Тактовый сигнал ISP. В такт с этим сигналом происходит обмен данными через шину SPI интерфейса ISP. Выход программатора, вход программируемого чипа (в нашем случае ATmega32U4).
4 MOSI Master Output Slave Input. Выходной сигнал данных программатора, вход программируемого чипа (в нашем случае ATmega32U4). Через этот сигнал в такт с частотой SCK в программируемый чип поступают данные.
5 ~RST Сигнал сброса. Выход программатора, вход программируемого чипа. С помощью этого сигнала чип вводится в режим программирования.
6 GND Земля, общий провод для всех сигналов.

Внимание: будьте осторожны, когда с помощью ISP-программатора меняете значение фьюзов! Неосторожное программирование этих бит может привести не только к неработоспособности загрузчика, но и невозможности программирования кристалла, или к отключению тактового генератора. В этом случае помочь может только специальный программатор, поддерживающий режимы высоковольтного программирования (HVPP и HVSP).

JTAG. Этот коннектор позволяет не только программирование памяти (доступны все возможности программирования, которые предоставляет ISP), но также через него можно производить полноценную отладку программ. Под полноценной отладкой понимается возможность пошагового выполнения программы (по исходному коду или листингу дизассемблера) с просмотром переменных, содержимого ячеек памяти, регистров ввода-вывода микроконтроллера.

AVR-USB32U4-JTAG-pins

Имя Описание
1 TCK JTAG Test Clock. Тактовый сигнал JTAG.
2 GND Земля, общий провод для всех сигналов.
3 TDO JTAG Test Data Output.
4 VCC Напряжение питания ядра программируемого чипа (в нашем случае ATmega32U4). Вход программатора/отладчика JTAG. С помощью измерения уровня напряжения на этом сигнале программатор JTAG определяет, подано ли питание на программируемое устройство.
5 TMS JTAG Test Mode Select.
6 nSRST Сигнал сброса. Выход программатора, вход программируемого чипа. С помощью этого сигнала чип вводится в режим программирования.
7 - Не используется.
8 - Не используется.
9 TDI JTAG Test Data Input.
10 GND Земля, общий провод для всех сигналов.

Примечание: отладка и программирование через JTAG возможны через специальные аппаратные отладчики JTAGICE, JTAGICE mkII, AVR Dragon.

[Уровни 3.3V на портах ввода-вывода ATmega32U4]

В некоторых случаях требуется получить рабочие уровни 3.3V для GPIO PBx, PCx, PDx, PFx. По умолчанию перемычка SJ1 подает на цепь напряжение 5V (см. схему выше).

Практика показала, что мощности внутреннего стабилизатора напряжения микроконтроллера ATmega32U4 (выход UCAP, вывод 6 корпуса TQFP44) недостаточно для питания цепей VCC (выводы 14, 34). Поэтому для напряжения 3.3V необходим дополнительный внешний стабилизатор. Для получения уровней 3.3V нужно перерезать эту перемычку, и собрать простую схему на основе LDO-стабилизатора наподобие XC6206P33 или аналогичного:

AVR USB32U4 VCC 3.3V

Пример доработки с установленным стабилизатором LDO XC6206P33:

AVR USB32U4 VCC 3.3V XC6206P33

[Ссылки]

1. LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR.
2. AVR USB Series4 Software Packages site:atmel.com.
3. 131105flip.ZIP - установленные версии FLIP 2.4.6, Flip 3.3.2, Flip 3.4.7.