USB мікрофон на ATmega8 та V-USB

Відразу обмовлюся, що я (як і раніше) не претендую на звання «Учитель року», тому викладатиму матеріал як вмію. Не всі моменти вдасться розкрити у статті, бо розбирався в цьому напрямі самостійно, багато читав між рядками, частина інформації є специфічною та вузькопрофільною, а частину просто не зрозумів сам. Прикладів українською я не бачив, а вся документація начебто «ворожою». Так що не судіть суворо і самі не будіть суворо ЗАСУДЖЕНО =)

Отже, слід зазначити, що USB добре підходить для передачі звуку. Пропускна здатність каналу USB дозволяє передавати не тільки простий звук, а й високоякісні звукові дані. Для виготовлення USB аудіопристроїв також важливо, що механізм передачі аудіоданих добре визначений і стандартизований в специфікації USB. Стандартизований механізм передачі аудіодані також дозволяє використовувати стандартні драйвера (наскільки це можливо).

Окремої уваги потребує синхронізація потоку даних. Справді, навіть невеликі артефакти у звуковому потоці легко помітні людським вухом. Тому була розроблена і впроваджена стандарт USB надійна схема синхронізації в ізохронних передачах (тавтологія злегка). Для надійної передачі аудіо даних по шині USB визначено клас Audio Device Class, який дотримується цієї схеми синхронізації.

Так, зі способом передачі даних по шині визначились – ізохронна передача даних. Але в ізохронній передачі є кілька типів синхронізації даних. Отже, перший тип – асинхронна ізохронна передача. У такій передачі кінцева точка приймає або передає дані з частотою зовнішньої для USB, або з частотою, заданою самим пристроєм.Другий тип передачі – синхронна ізохронна передача. Системна частота для таких кінцевих точок може контролюватись через SOF (передача StartOfFrame) синхронізацію. Таким чином, кінцева точка підлаштовує свою частоту під 1 мілісекундний SOF тик або контролює генерацію SOF і тактова частота прив'язується до SOF. Також є адаптивний тип синхронізації. Адаптивна кінцева ізохронна точка може приймати або передавати дані з будь-якою частотою у своїх робочих межах. Такі кінцеві точки повинні реалізовувати в собі процес (функцію), яка дозволяє їй підлаштовувати свою тактову частоту під тактову частоту, яка пропонується її інтерфейсу. З усіх типів синхронізації найпростішим є асинхронний.

З методом передачі і видом синхронізації визначилися – асинхронна ізохронна передача. Тепер настав час розглянути основні компоненти USB аудіо пристрою. Для керування властивостями аудіо функції (пристрою), її складові компоненти можна поділити на основні керовані складові. Їх дві: юніти (Units) та термінали (Terminals). Юніти є базовими складовими блоками для повного опису більшості аудіо функцій. Аудіо функції будуються з'єднанням кількох таких юнітів. Кожен юніт має мінімум один вхідний пін (вхід) і лише один вихідний. Крім юнітів, які можна вважати прохідними елементами для аудіо даних, існують і так звані термінали. Бувають вхідний термінал та вихідний. Термінал можна уявити як кінцеву ланку в аудіо функції. Так, АЦП для мікрофона є вхідним терміналом, а кінцева точка вихідним. Для колонок кінцева точка є вхідним терміналам, а ЦАП вихідним. Прикладом юніту може бути блок обробки звуку чи регулювання гучності тощо.

Так, для побудови простого USB мікрофона можна намалювати наступний рисунок (1):

atmega8

Трохи поясню зміст цього малюнка. За логікою роботи мікрофона: зняття та оцифрування звуку (можна з його обробкою) займається функціонально-закінчений блок, а передачею (транспортуванням) цих даних займається інший блок. Ці блоки у стандарті USB називаються інтерфейсами. Відповідно, їх назви досить логічні: AudioControl і AudioStreaming інтерфейси. Для введення даних у наш пристрій служить вхідний термінал (IT), який можна уявити як мікрофон + фільтр + АЦП. Оскільки оцифрований звук нами не обробляється, дані безпосередньо передаються на вихідний термінал (OT), який представлений кінцевою точкою. Вхідний і вихідний термінали у разі є аудіо функцію (логічно закінчена структура терміналів і юнітів, реалізують закінчений функціональний блок). У нашому пристрої функція лише одна, отже, AudioControl Interface складається тільки з однієї функції. AudioStraming Interface представлений кінцевою точкою.

Тепер поверхово розглянемо робочу модель Audio Device Class. Пристрій може підтримувати декілька конфігурацій. У межах кожної конфігурації може бути кілька інтерфейсів, кожен із яких може містити кілька альтернативних налаштувань та кінцевих точок. Для ілюстрації всього сказаного вище, представлю наступний малюнок 2.

мікрофон

Тепер пройдемося трохи далі. У стандарті USB будь-який пристрій представляється хосту як набір дескрипторів, які описують вид пристрою, його властивості та призначення, його параметри, характеристики, вимоги, спосіб обміну інформацією тощо. З малюнка 2 видно загальна структура USB. Кожен із представлених блоків на малюнкуописується власним дескриптором. Для різних класів пристроїв (CDC, MSD, HID, AUDIO та ін.) До складу стандартних дескрипторів можуть входити специфічні для класу дескриптори. Усі вони описуються у відповідних документах специфікації класів пристроїв. Трохи сумбурно, але тепер спробуємо уявити собі ієрархію дескрипторів для нашого пристрою, ґрунтуючись на малюнках 1 і 2. Ця ієрархія представлена ​​в специфікації на AUDIO DEVICE CLASS, але логіка побудови простежується з наведеного вище матеріалу.

мікрофон

мікрофон

До статейки прикріпив файли проекту для IAR і зразок запису з мікрофона (схема без фільтра, звук знятий з лінійного виходу звуковухи. Представ як доказ працездатності =). При збільшенні частоти кварцу можна підняти якість звуку у плані частоти дискретизації. Коментарі та критика (бажано конструктивна) до студії.

мікрофон