Макетная плата AVR-USB32U4 построена на AVR микроконтроллере ATmega32U4 с аппаратным интерфейсом USB 2.0. Она является аналогом платы Teensy 2.0.
Микроконтроллер 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.
С помощью перемычки 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).
Описание функций ножек сведено в таблицы, соответствующую номерам ножек коннекторов 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. Процесс установки драйвера хорошо виден на скриншотах.
Если в процессе установки будут запрашиваться какие-то файлы, то указывайте на содержимое папки 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 появится окно, где в меню Device -> Select... нужно выбрать тип программируемого устройства ATmega32U4:
Далее нужно в меню Settings -> Communication нужно выбрать подключение USB, и затем нажать кнопку Open:
После этого появится и станет активным главное окно утилиты Atmel FLIP:
Операции, которые можно проводить с памятью кристалла 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, и в таблице перечислены все его сигналы.
№ |
Имя |
Описание |
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), но также через него можно производить полноценную отладку программ. Под полноценной отладкой понимается возможность пошагового выполнения программы (по исходному коду или листингу дизассемблера) с просмотром переменных, содержимого ячеек памяти, регистров ввода-вывода микроконтроллера.
№ |
Имя |
Описание |
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 или аналогичного:
Пример доработки с установленным стабилизатором LDO 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. |
Комментарии
microsin: возможно проблема с версией программатора, которая задается в дескрипторах USB. Версия должна совпадать с той, которая нужна утилите программировани я Atmel Studio. Как вариант решения проблемы - попробуйте работу программатора вместе с утилитой AVRDUDE, или поставьте правильное значение версии программатора в его USB-дескрипторах.
microsin: есть, а как же не быть? На сайте Atmel ищите. Или тупо прогуглите. Например такой запрос: Где найти загрузчик USB DFU - сразу дает то, что нужно. Также см. библиотеку LUFA, но там конечно загрузчик не фирменный, а с отрытым исходным кодом.
microsin: толщина фольги стандартная 0.018 мм, минимальная ширина дорожки 4 mil (0.1 мм). Ток 20 мА гарантированно выдержит.
RSS лента комментариев этой записи