AVR298: демонстрация устройства USB Audio на ATmega32U4 Печать
Добавил(а) microsin   

Перевод даташита AVR298 [1] компании Atmel, описывающий пример реализации звуковой карты USB. Другие примеры устройств USB Audio на чипах AVR USB можно найти в библиотеке LUFA [2].

• Пример звуковой карты USB работает на микроконтроллерах ATMega32U4, на тактовой частоте 8 МГц (прим. переводчика: можно также применить частоту тактов 16 МГц).
• Интерфейс USB устройства работает в режиме низкого потребления (Low Power Bus Powered Device, ток потребления меньше 100 мА).
• Устройство USB Audio работает как внешняя звуковая карта на компьютерах PC под управлением Windows® (версия 98SE или свежее), Linux® или Mac OS®.
• Требуется меньше 14 кбайт места под код.
• Устройство USB поддерживает динамик (наушники) и микрофон.

AVR298-USB-Audio-Demonstration

Этот документ описывает простой проект аудиоустройства. Он позволяет быстро протестировать аппаратуру USB с помощью микроконтроллера ATMega32U4, причем не требуется установка драйвера (используется драйвер, встроенный в операционную систему). Подразумевается, что читатель знаком с библиотекой USB Software Library for AT90USBxxx Microcontrollers [4] и стандартом USB AUDIO (см. usb.org).

[2. Требования к аппаратуре]

Приложение USB audio требует для себя следующей аппаратуры:

• Оценочная плата AVR USB (ATEVK527 или AVR-USB32U4).
• Микроконтроллер AVR USB (AVR с аппаратной поддержкой интерфейса USB).
• Кабель USB (с коннекторами Type A и Mini B).
• Компьютер PC, работающий под управлением Windows® (98SE, ME, 2000, XP), Linux ® или MAC® OS с поддержкой хоста USB 1.1 или USB 2.0.
• Головная микротелефонная гарнитура (наушники).

[3. Как запрограммировать микроконтроллер]

Внутрисхемное программирование (In-System programming, ISP) и обновление с помощью загрузчика Atmel (Device Firmware Upgrade, DFU) может быть выполнено следующими методами:

• Через интерфейс JTAG, используя отладчик JTAGICE mkII.
• Через интерфейс SPI, используя программаторы AVRISP mkII [5], AVR Dragon или отладчик JTAGICE mkII.
• Через интерфейс USB, благодаря (уже прошитому в память микроконтроллера на заводе) загрузчику (DFU bootloader) и утилиту FLIP. При этом не требуется никакого дополнительного внешнего программатора.
• Через интерфейс параллельного программирования с помощью программаторов STK®500 или STK®600.

Пожалуйста обратитесь к руководству пользователя Вашей платы за описанием аппаратуры и методов её программирования.

Примечание: утилита FLIP [6] предоставляется компанией Atmel бесплатно вместе с драйверами USB для загрузчиков. К сожалению, исходный код утилиты и исходный код загрузчиков закрыт. Но протокол DFU опубликован, и существует альтернативный DFU-загрузчик с открытым исходным кодом в библиотеке LUFA.

[4. Быстрый старт]

1. Скачайте пакет программного обеспечения для микроконтроллера [7]. В скачанном архиве имеется готовая прошивка в виде HEX-файла с именем EVK527-series4-audio.a90 или EVK527-series4-audio-2_0_3.a90, запишите её в память микроконтроллера (как это сделать, см. раздел 3).

2. Подключите запрограммированную плату через USB к компьютеру. После процедуры энумерации плата обнаружится как звуковая карта USB Audio Device, после чего её можно использовать для подключения к компьютеру наушников и микрофона:

AVR298-USB-Audio-in-Device-Manager

Рис. 4-1. Обнаруженное устройство USB Audio в Диспетчере Устройств Windows.

На рисунке ниже показана плата ATEVK527 с установленными на ней микрофоном и гнездом для подключения наушников.

AVR298-ATEVK527-board

Рис. 4-2. Оценочная плата ATEVK527.

Примечание: если Вы использовали макетную плату AVR-USB32U4, то сформированный выходной звуковой сигнал можно посмотреть осциллографом на ножке порта PD7. Сигнал от микрофонного усилителя может быть подключен к входу АЦП через порт PD6.

[5. Обзор приложения]

Приложение USB Audio обслуживает обмен данными между хостом USB (компьютер PC) и аппаратурой PWM (Pulse-Width Modulation, ШИМ, с помощью которой формируется выходной сигнал звука) и аппаратурой ADC (Analog-Digital Converter, АЦП, на который может быть подан внешний звуковой сигнал от микрофона. Усиленный, конечно). Когда звук проигрывается компьютером через звуковую карту USB Audio, устройство USB периодически получает пакеты в конечные точки OUT, и отправляет пакеты с записанным от микрофона звуком через конечные точки IN.

AVR298-USB-Audio-data-exchange

Рис. 5-1. Обмен данными в приложении USB Audio.

Во время процедуры энумерации устройство USB описывает форматы оцифрованных аудиоданных (частота дискретизации, количество бит на выборку), которые может обработать. В этом демонстрационном примере используется формат PCM (Pulse-Code Modulation), выходные данные кодируются как 16-bit mono с частотой дискретизации 32 кГц, и входные данные микрофона используют кодировку 16-bit mono с частотой дискретизации 8 кГц.

[6. Firmware]

Как описано в документе USB Software Library for AT90USBxxx Microcontrollers [4], все проекты USB firmware микроконтроллера основаны на одинаковой архитектуре. Эта секция описывает только те части, которые касаются модуля обработки звука. Изменение некоторых файлов проекта пользователем позволяет ему построить свое собственное аудиоприложение.

AVR298-USB-Audio-Firmware-Architecture

Рис. 6-1. Архитектура USB Audio Firmware.

6.1. audio_task.c. Этот файл содержит:

• Инициализацию таймеров.
• Обработчики прерываний таймеров.
• Подпрограммы для сбора и выдачи аудиоданных.

Выход (на наушники или динамик). Основная задача обработки звука получает данные с аудиовыборками из конечной точки OUT, и помещает их в буфер RAM. Допуск на тактовую частоту не позволяет точно установить частоту дискретизации 32 кГц для выхода, поэтому главный цикл main подстраивает прерывание таймера 1, чтобы избежать потери выборки или переполнения. Прерывание таймера 1 передает данные из RAM в модулятор PWM (высокоскоростной таймер). Таймер 1 отвечает за подстройку потока данных под разрешающую способность PWM и громкость звучания, установленную хостом USB.

Примечание: используются только 9 бит из возможных 10 бит разрешающей способности PWM - чтобы избежать насыщения в операционном усилителе платы.

Вход (микрофон). Прерывание таймера 0 используется для получения выборки оцифрованного звука от ADC каждые 125 мкс (частота дискретизации 8 кГц), и если конечная точка IN была запрошена хостом, это значение будет помещено в эту конечную точку.

AVR298-application-data-exchange

Рис. 6-2. Обмен данными в демонстрационном приложении USB Audio.

6.2. evk_527.c. Этот файл содержит все подпрограммы для управления аппаратными ресурсами платы EVK527 (джойстик, светодиоды и т. п.). Пользователю нет нужды изменять этот файл, если он использует плату EVK527. Если используется другая плата, то в проекте должен использоваться вместо evk_527.c другой модуль, в котором будет поддерживаться аппаратура этой другой платы.

6.3. usb_specific_request.c. Этот файл содержит подпрограмму, которая принимает управляющие аудио запросы, например установка уровня звука и отключение звука (Mute).

6.4. usb_descriptor.c. В этом файле задана звуковая топология устройства USB Audio, которая помещается в дескрипторе USB, как это описано в спецификации AUDIO (см. соответствующий стандарт на сайте usb.org). В этом демо выбрана топология, показанная на рисунке.

AVR298-Audio-Function-Topology

Рис. 6.3. Топология Audio Function в демонстрационном приложении USB Audio.

[7. ПО хоста (компьютера PC)]

Демонстрационное приложение USB audio не требует какого-либо специального программного обеспечения PC. Работая под управлением операционной системы Windows®, можно использовать стандартное встроенное приложение для записи звука "Sound Recorder" для того, чтобы попробовать записать звук от микрофона.

[8. Ограничения]

Если работает воспроизведение звука с частотой выборок 32 кГц, то запись и воспроизведение не могут происходить одновременно из-за недостаточного быстродействия CPU AVR, который работает на тактовой частоте 8 МГц.

Прим. переводчика: для ускорения работы CPU можно портировать приложение USB Audio на тактовую частоту 16 МГц - такая тактовая частота также допустима для работы интерфейса USB.

[Ссылки]

1. AVR298: USB Audio Demonstration with ATmega32(16)U4 site:atmel.com.
2. LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR.
3. Макетная плата AVR-USB32U4.
4. AVR276: USB Software Library for AT90USBxxx Microcontrollers.
5. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях.
6. AVR282: обновление firmware через USB.
7. 141127avr298.zip - исходные файлы проекта, прошивка микроконтроллера ATmega32U4, документация.