Usb audio routing что это

Обновлено: 07.07.2024

Звуковая карта, она же аудиоинтерфейс — важный элемент любого компьютера или ноутбука, отвечающий за вывод звука. Именно он преобразует сигналы из цифровой формы, в которой аудиоданные хранятся в памяти ПК или на сменных носителях, в аналоговую, необходимую для подачи в усилитель или активную акустику. Он же преобразует звук и в обратную сторону: из аналога в цифру. Эта функция пригодится для записи или использования микрофона.

реклама

Прежде звуковые карты имели исключительно вид платы для установки в слот PCI, в котором они выпускаются и по сей день, но с появлением ноутбуков и планшетов потребовался мобильный аудиоинтерфейс и производители тотчас же на это отреагировали. И сейчас внешнее исполнение уже давно стало стандартом. Когда для подключения проводов не нужно тянуться к задней стенке системника, все необходимые органы управления удобно расположены поблизости, есть усилитель для наушников и можно подключаться хоть к стационарному ПК, хоть к ноутбуку, для многих выбор становится очевиден, поэтому здесь есть из чего выбрать.

Если отбросить Китай, копеечные мультимедийные варианты и аудиоинтерфейсы для геймеров, заточенные больше под работу с объемным звуком, чем на точную передачу нюансов музыки, то остаются или ЦАПы из сегмента HI-Fi, или профессиональные карты. В первой категории можно найти корейский и китайский портатив, немного настольных вариантов и полноразмерные компоненты за большие деньги. Со второй все не так однозначно. С увеличением спроса на доступное профессиональное оборудование для звукозаписи почти все крупные производители ринулись в бюджетный сегмент, расширив ассортимент так называемых полупрофессиональных решений.

450x317 34 KB. Big one: 1215x856 190 KB

Дошло до того, что сегодня можно купить звуковую карту какого-нибудь из известных мировых брендов про-аудио за скромные 3000-5000 рублей. Они, конечно, уступают по качеству профессиональным моделям, но с мультимедийными устройствами и уж тем более с интегрированными точно не сравнятся. Таким образом, на рынке бюджетных решений сложилась интересная ситуация: с одной стороны, за одни и те же деньги (до 15 000) рублей можно приобрести хороший китайский портатив, а с другой — профессиональный аудиоинтерфейс начального уровня с неплохими характеристиками.

Если целью не стоит создание домашней студии звукозаписи, а интересует лишь вывод аудиодорожки на систему звукоусиления, будет достаточно минимальной конфигурации с двумя аналоговыми выходами. Тем, кому необходима возможность прослушивания в наушниках, стоит обратить внимание на наличие соответствующего усилителя и выхода для подключения. Для записи потребуются аналоговые входы и микрофонные предусилители.


В этой статье рассматривается поддержка Android цифрового звука USB и связанных с ним протоколов USB для качества звука.

Конечные пользователи устройств должны ознакомиться со статьей « Запись и воспроизведение звука с использованием режима USB-хоста» в Справочном центре. Хотя эта статья не ориентирована на конечных пользователей, некоторые потребители аудиофилы могут найти интересующую их информацию.

Dolby-Atmos-смартфоны

Universal Serial Bus (USB) неофициально описано в статье Википедии о USB , и формально определяется по стандартам , опубликованных USB Forum, Inc. Для удобства мы суммируем основные понятия USB здесь, но стандарты являются авторитетным справочником.

Основные понятия и терминология

Примечание. Термины « устройство» и « аксессуар» являются общими синонимами для периферийных устройств . Здесь мы избегаем этих терминов, поскольку их можно спутать с устройством Android или с концепцией Android, называемой вспомогательным режимом.

Furutech GT2 USB + ЦАП R2R11

Furutech GT2 USB + ЦАП R2R11

Важной ролью хоста является перечисление: процесс определения того, какие периферийные устройства подключены к шине, и запрос их свойств, выраженных через дескрипторы.

Периферийным устройством может быть один физический объект, но на самом деле реализуется несколько логических функций. Например, периферийное устройство веб-камеры может иметь как функцию камеры, так и функцию микрофона.

Каждая периферийная функция имеет интерфейс, который определяет протокол для связи с этой функцией.

виброколонка + смартфон

виброколонка + смартфон

Хост взаимодействует с периферийным по телефону к конечной точке, источник данных обеспечивается одной из периферических функций.

Хост инициирует все передачи данных, поэтому термины ввода и вывода выражены относительно хоста. Операция ввода передает данные с периферии на хост, а операция вывода передает данные с хоста на периферию.

Существует три основных режима передачи данных: прерывание , объемный и изохронный . Изохронный режим будет обсуждаться далее в контексте аудио.

Периферийное устройство может иметь терминалы, которые подключаются к внешнему миру, за пределами самого периферийного устройства. Таким образом, периферийное устройство служит для трансляции между протоколом USB и сигналами «реального мира». Терминалы являются логическими объектами функции.

Android USB режимы

Режим разработки присутствует с момента первого выпуска Android. Устройство Android отображается в качестве периферийного устройства USB на главном ПК, работающем под управлением настольной операционной системы, такой как Linux, Mac OS X или Windows. Единственной видимой периферийной функцией является либо Android fastboot, либо Android Debug Bridge (adb) . Протоколы fastboot и adb размещаются в режиме массовой передачи данных через USB.

Режим хоста

Режим хоста представлен в Android 3.1 (уровень API 12).

Поскольку устройство Android должно выступать в качестве хоста, а большинство устройств Android имеет разъем micro-USB, который не разрешает прямую работу хоста, обычно требуется адаптер OTG, такой как это:

OTG кабель

Рисунок 1. Адаптер (OTG)

usb-dac-otg-cable

usb-dac-otg-cable

Устройство Android может не обеспечивать достаточную мощность для работы определенного периферийного устройства, в зависимости от того, сколько энергии требуется периферийному устройству и сколько устройство Android может обеспечить. Даже при наличии достаточного питания заряд батареи устройства Android может быть значительно сокращен.

Для этих ситуаций используйте концентратор с питанием.

DAC_OTG_cable

Кстати, из за более длинных usb проводов в 50% цап на смартфоне не был доступен, т.е. терялась связь с ним. Подключение внешнего ЦАП к смартфону (андройд) происходит безболезненно и весьма быстро (если у вас конечно не совсем старый смартфон).

Подсоединяете данный комплект проводов в USB разъем на ЦАП, а второй конец кабеля в разъём OTG в смартфон. И всё!

Важно! При первом подсоединении ЦАП + смартфон, необходимоподождать 1-2 мин, для того чтобы ЦАП свои драйвера установил автоматически. А затем уже включать программный аудио-плеер.

Режим аксессуаров

Режим аксессуаров был представлен в Android 3.1 (уровень API 12) и перенесен на Android 2.3.4. В этом режиме устройство Android работает как периферийное устройство USB под управлением другого устройства, например док-станции, которая служит хостом. Разница между режимом разработки и дополнительным режимом заключается в том, что хосту видны дополнительные функции USB, помимо adb. Устройство Android начинает работу в режиме разработки, а затем переходит в режим аксессуаров через процесс повторного согласования.

Режим аксессуаров был расширен за счет дополнительных функций в Android 4.1, в частности, аудио, описанного ниже.

Каждая периферийная функция имеет связанный документ класса устройства, который определяет стандартный протокол для этой функции. Это позволяет хостам и периферийным функциям, совместимым с классом, взаимодействовать без подробного знания работы друг друга. Соответствие классу имеет решающее значение, если хост и периферийные устройства предоставляются разными объектами.

Термин « без драйвера» является общим синонимом класса «совместимый» , указывая на то, что можно использовать стандартные функции такого периферийного устройства, не требуя установки драйвера для конкретной операционной системы. Можно предположить, что периферийное устройство, объявленное как «драйвер не нужен» для основных настольных операционных систем, будет совместимым с классом, хотя могут быть исключения.

USB аудио класс

Здесь мы касаемся только периферийных устройств, которые реализуют аудиофункции и, следовательно, придерживаются класса аудиоустройств. Существует две редакции спецификации звукового класса USB: класс 1 (UAC1) и 2 (UAC2).

Сравнение с другими классами

Аудио терминалы

Терминалы аудиоустройства обычно являются аналоговыми. Аналоговый сигнал, представленный на входном терминале периферийного устройства, преобразуется в цифровой с помощью аналого-цифрового преобразователя (АЦП) и передается по протоколу USB для использования хостом. АЦП является источником данных для хоста. Аналогично, хост отправляет цифровой аудиосигнал по протоколу USB на периферийное устройство, где цифроаналоговый преобразователь (ЦАП) преобразует и подает на аналоговый выходной терминал. ЦАП является приемником для хоста.

cable dac

Каналы

Режим изохронной передачи

Аудио USB использует режим изохронной передачи для своих характеристик в реальном времени, за счет восстановления после ошибок. В изохронном режиме пропускная способность гарантируется, и ошибки передачи данных обнаруживаются с помощью циклического контроля избыточности (CRC). Но в случае ошибки нет подтверждения или повторной передачи пакета.

В изохронном режиме есть три подрежима:

В адаптивном подрежиме периферийный приемник или источник адаптируется к потенциально изменяющейся частоте дискретизации хоста.

виброакустика портативная +смартфон

виброакустика портативная +смартфон

В подрежиме асинхронного (также называемого неявной обратной связью) приемник или источник определяет частоту выборки, а хост приспосабливается. Основным теоретическим преимуществом асинхронного подрежима является то, что тактовая частота источника или приемника USB физически и электрически ближе к тактовой частоте, которая управляет ЦАП или АЦП, и может даже быть такой же или полученной из нее. Эта близость означает, что асинхронный подрежим должен быть менее восприимчивым к дрожанию тактового сигнала. Кроме того, часы, используемые ЦАП или АЦП, могут быть рассчитаны на более высокую точность и меньший дрейф, чем тактовые импульсы хоста.

В синхронном подрежиме фиксированное количество байтов передается каждый период SOF. Частота дискретизации звука эффективно выводится из часов USB. Синхронный подрежим обычно не используется со звуком, потому что как хост, так и периферийные устройства зависят от часов USB.

В таблице ниже приведены изохронные подрежимы:

  • Суб-режим Количество байтов
  • на пакет Частота дискретизации
  • определяется Используется для аудио
  • адаптивный переменная хозяин да
  • асинхронный переменная периферический да
  • синхронный фиксированный USB

На практике подрежим, конечно, имеет значение, но следует учитывать и другие факторы.

  • Поддержка Android для аудио класса USB
  • Режим разработки
  • Аудио через USB не поддерживается в режиме разработки.
  • Режим хоста

Android 5.0 (уровень API 21) и выше поддерживает ряд функций USB audio class 1 (UAC1):

  • Android-устройство должно выступать в качестве хоста
  • Аудиоформат должен быть PCM (интерфейс типа I)
  • Глубина в битах должна составлять 16, 24 или 32 бита, где 24 бита полезных аудиоданных выровнены по левому краю в старших значащих битах 32-битного слова.
  • Частота дискретизации должна быть 48, 44,1, 32, 24, 22,05, 16, 12, 11,025 или 8 кГц.
  • Количество каналов должно быть 1 (моно) или 2 (стерео)

Изучение исходного кода платформы Android может показывать дополнительный код сверх минимума, необходимого для поддержки этих функций. Но этот код не был проверен, поэтому более продвинутые функции еще не заявлены.

В Android 4.1 (уровень API 16) добавлена ограниченная поддержка воспроизведения звука на хосте. Находясь в дополнительном режиме, Android автоматически направляет свой аудиовыход на USB. То есть устройство Android служит источником данных для хоста, например док-станции.

усилитель для наушников

Аудио в режиме аксессуаров имеет следующие особенности:

Устройство Android должно управляться хорошо осведомленным хостом, который может сначала перевести устройство Android из режима разработки в режим аксессуаров, а затем хост должен передать аудиоданные с соответствующей конечной точки. Таким образом, устройство Android не выглядит «без водителя» для хоста.

  • Направление должно быть введено относительно хоста
  • Аудиоформат должен быть 16-битным PCM
  • Частота дискретизации должна составлять 44,1 кГц
  • Количество каналов должно быть 2 (стерео)

Аудио в режиме аксессуаров не получил широкого распространения и в настоящее время не рекомендуется для новых разработок.

Применение цифрового звука в USB

Как видно из названия, цифровой аудиосигнал USB представлен потоком цифровых данных, а не аналоговым сигналом, используемым общим разъемом мини- гарнитуры TRS . В конце концов, любой цифровой сигнал должен быть преобразован в аналоговый, прежде чем его можно будет услышать. Есть компромиссы в выборе места для размещения этой конверсии.

Сказка о двух ЦАП

На приведенном ниже примере диаграммы мы сравниваем два проекта. Сначала у нас есть мобильное устройство с процессором приложений (AP), встроенным ЦАП, усилителем и аналоговым разъемом TRS, подключенным к наушникам. Мы также рассматриваем мобильное устройство с USB, подключенным к внешнему USB ЦАП и усилителю, также с наушниками.

ЦАПы сравнение dac

Рисунок. Сравнение двух ЦАП

Какой ЦАП лучше? Ответ зависит от ваших потребностей. У каждого есть свои преимущества и недостатки.

Примечание. Это искусственное сравнение, поскольку для реального устройства Android, вероятно, будут доступны обе опции.

Первая конструкция A является более простой, менее дорогой, потребляет меньше энергии и будет более надежной конструкцией, предполагающей в равной степени надежные компоненты. Однако обычно есть компромиссы между качеством звука и другими требованиями. Например, если это устройство массового рынка, оно может быть разработано с учетом потребностей обычного потребителя, а не аудиофилов.

Во втором исполнении внешнее аудиоустройство C может быть спроектировано для более высокого качества звука и большей выходной мощности, не влияя на стоимость базового устройства Android массового рынка B. Да, это более дорогой вариант, но стоимость поглощается только те, кто этого хочет.

ЦАП АК 2х 4497

ЦАП на АК 2х4497 спрашивайте у меня в ВК

Мобильные устройства печально известны наличием печатных плат высокой плотности, что может привести к большим возможностям перекрестных помех, которые ухудшают соседние аналоговые сигналы. Цифровая связь менее восприимчива к шуму , поэтому перемещение ЦАП с устройства Android A на внешнюю печатную плату C позволяет физически и электрически изолировать последние аналоговые каскады от плотной и шумной печатной платы, что приводит к повышению качества звука.

С другой стороны, второй более сложен, и с добавленной сложностью появляется больше возможностей для неудач. Существует также дополнительная задержка от контроллеров USB.

Применения в режиме хост

Типичные аудиоприложения в режиме хоста USB:

Для всех этих приложений Android обнаруживает совместимое цифровое аудиоустройство USB и автоматически маршрутизирует воспроизведение и захват аудио в соответствии с правилами звуковой политики. Стерео контент воспроизводится на первых двух каналах периферийного устройства.

Supra LoRad MD06-EU Сетевой блок питания обзор

Нет никаких API, специфичных для цифрового аудио USB. Для расширенного использования автоматическая маршрутизация может создавать помехи приложениям, поддерживающим USB. Для таких приложений отключите автоматическую маршрутизацию с помощью соответствующего элемента управления в разделе «Медиа» в разделе « Настройки» / «Параметры разработчика» .

Отладка в режиме хоста

В режиме хоста USB отладка adb через USB недоступна. Смотрите раздел Беспроводное использование в Android Debug Bridge как альтернативу.

Реализация USB звука

Рекомендации для производителей аудио периферийных устройств

Чтобы взаимодействовать с устройствами Android, поставщики аудиоустройств должны:

быть для соответствия аудио класса; в настоящее время Android ориентирован на класс 1, но разумно планировать на класс 2

  • избежать лагов,
  • тест на совместимость с эталонными и популярными устройствами Android.
  • четко документировать поддерживаемые функции, соответствие класса аудио, требования к питанию и т. д., чтобы потребители могли принимать обоснованные решения

Dolby-Atmos-smartphone

Рекомендации для производителей устройств Android и поставщиков SoC

Чтобы поддерживать цифровое аудио через USB, производители устройств и производители SoC должны:

Как включить аудио USB на смартфоне

Чтобы включить аудио через USB в телефоне, добавьте запись в файл конфигурации аудио политики. Обычно это находится здесь:

Компонент pathname «oem» должен быть заменен именем OEM-производителя, который производит устройство Android, а «codename» должен быть заменен кодовым именем устройства.

Переход на USB-C – плохо это или хорошо? Почему он происходит и что несет любителям послушать музыку со своего мобильного устройства?


Вполне возможно, что следующий смартфон, который вы купите, будет поддерживать передачу аудио по USB-C, даже если у него сохранится «обычный» разъем 3.5 мм. А значит, вскоре появится больше наушников с кабелем USB-C, потому что все именно так и работает: добавьте поддержку чего-либо – и компании начнут это производить. Однако использование нового разъема для аудио вызывает массу сомнений и вопросов, как этот опыт будет отличаться от того, что у нас был на протяжении многих лет.

Порт новый, детали те же


Аудиоконтент любого типа может проигрываться на наших смартфонах благодаря слаженной работе ряда особых деталей. Переход от 3.5 мм к USB-C ничего в этом плане не изменит. Однако могут сильно измениться сами детали.

Для того, чтобы превратить файлы на вашем смартфоне в звук, вам потребуются цифроаналоговый преобразователь, усилитель и динамик(и). Динамики за счет вибраций создают волну, которая воздействует на наши барабанные перепонки, а работа их движущихся частей возможна за счет электромагнетизма. Эта волна соответствует тому, что называется аналоговым сигналом, а разновидности этого сигнала представляют собой звуки различного тона. Итак, волновая природа сигнала заставляет вибрировать динамик, эта вибрация порождает волны, которые посылаются на наши барабанные перепонки, а те, в свою очередь, вибрируют в нашей голове, производя звук. Если отбросить биологическую составляющую вопроса, все действительно происходит вот так вот просто. Если вы взглянете на график колебаний аналогового звука и услышите сами звуки, то прекрасно увидите, как эти вещи связаны.

Файлы в вашем смартфоне или файлы, которые передаются через интернет, имеют цифровую природу. Это означает, что это всего лишь кучка единиц и нулей, собранных вместе так, чтобы компьютер мог их прочесть и знал, что с ними дальше делать. Цифровые файлы сами по себе не имеют никакой волновой природы, которая позволила бы динамикам производить звук. Поэтому нам требуется что-то, чтобы конвертировать одно в другое.

Для того, чтобы взять записанное аудио в аналоговом формате, конвертировать его в цифровой формат, например, в файл.mp3, для хранения на компьютере, а затем конвертировать обратно в аналоговый вид для проигрывания, используются сложные алгоритмы. Данные должны попасть в ЦАП для перевода их в волны нужного вида и затем в усилитель, делающий волну достаточно сильной, чтобы она могла работать в наушниках. Для того, чтобы «создавать звук», ученые и инженеры применяют самые разные ухищрения, но описанный процесс необходим для каждого телефона, портативного аудиоплеера и каждого набора динамиков.

Смартфон, например, какой-нибудь LG V30, обладает очень хорошими ЦАП и усилителем, а также аудиоразъемом 3.5 мм. Приложение проигрывает файл, ЦАП преобразовывает его в аналоговый вид, усилитель усиливает сигнал, и все это передается через аудиоразъем 3.5 мм на те наушники, что вы воткнули в устройство. Любой смартфон, имеющий разъем 3.5 мм, работает абсолютно одинаково, неважно, насколько премиальным с точки зрения аудио он является. А вот смартфон, который использует для аудио разъем USB, может работать иначе.


Попробуем объяснить это на примере Bluetooth. Вам не требуется физически подсоединять к чему-то Bluetooth наушники, так что схема организуется иначе, хотя и задействуются в ней все те же элементы. В ваших Bluetooth наушниках есть свои собственные встроенные ЦАП и усилитель. Цифровой файл передается с вашего смартфона, а все преобразования происходят прямо у вас на голове. На первый взгляд это выглядит сложно, но на самом деле – не особо. Происходит точно такой же процесс, разница только в том, где находятся его компоненты. Однако давайте перейдем к USB.

Если вы используете активные наушники или адаптер, аудиосигнал, который передается через порт USB, остается в цифровом виде. Это означает, что ЦАП и усилитель находятся внутри наушников или донгла и преобразование происходит там, а не в смартфоне.

Это может вызвать определенные проблемы. Вам нужно удостовериться, что вы используете правильное сочетание гаджетов. Если у вас пассивные наушники или адаптер, ваш смартфон должен поддерживать работу в режиме аналогового аудио, а многие его не поддерживают. И загвоздка в том, что большая часть донглов, адаптеров и наушников никак не маркированы на предмет своей «активности» или «пассивности», нигде не обозначено, как они сделаны.

Pixel 2 имеет встроенный ЦАП в своем чипсете Snapdragon 835 от Qualcomm, однако не поддерживает работу в режиме аналогового аудио. Это значит, что вам потребуются активные наушники или адаптер, такие как донгл, который идет в комплекте. То же самое с HTC U11 и Essential Phone, а единственным смартфоном с поддержкой USB, в котором был заявлен режиме аналогового аудио, был LeEco Le Pro3. Тем не менее, все они должны поддерживать активные наушники или адаптер.

И еще одно: не все аудиоаксессуары с USB работают со всеми смартфонами, поскольку не все производители используют несколько дополнительных проводов USB-C соединения для внедрения дополнительных функций, как сделала HTC в наушниках к U11 для обеспечения активного шумоподавления.

Так что прежде чем купить какие-либо USB-C наушники или адаптер, убедитесь, что они работают с вашим смартфоном

USB-C – лучше или нет?


Ответ – да, но вместе с тем и нет. Реальный звук не улучшается просто от замены порта. Как говорилось выше, вам по-прежнему нужны все те же детали, и производители вольны выбирать среди них как топовые, так и бюджетные. USB-C ничего не меняет, кроме способа подключения.

Но есть и некоторая польза. Стандарт USB Type-C 1.0 был представлен на USB-IF (USB Implementers Forum) в 2014 вместе со спецификациями стандарта USB 3.1. Хотя они и не являются обязательными, у USB-C есть множество фишек, касающихся соединения и подключения. Порт USB-C может поддерживать одновременно следующие функции:

  • Режим аналогового аудио. Для пассивного аудио или передачи звука.
  • Альтернативные режимы. Требуется несколько дополнительных проводов для USB соединения, обеспечивающего прямую передачу на устройство-хост для альтернативных протоколов передачи данных. На 2016 год включает протоколы Thunderbolt, DisplayPort, Mobile High-Definition Link (MHL) и HDMI.
  • Billboard Device Class. Отвечает за передачу данных об альтернативных подключениях или же попросту за передачу информации о подключенных устройствах (с обеих сторон).
  • Стандарт Audio Device Class 3. Передает аналоговую или цифровую (или и ту и ту) аудиоинформацию через порт.
  • USB Power Delivery. Не только обеспечивает быструю зарядку по USB, но и поддерживает DRP (Dual Role Power) для быстрой зарядки вашего смартфона и обеспечения питания подключенного устройства одновременно.

Спецификации USB Type-C не требуют этих функций, но они поддерживаются. Это означает, что с портом USB-C в вашем смартфоне вы можете гораздо больше, чем просто слушать музыку или заряжать его – конечно, в случае, если компания захочет внедрить какой-то из этих дополнительных режимов. Некоторые из них выглядят классно: HDMI или DisplayPort подразумевает, что вы можете подключить свой телефон к аудиосистеме и наслаждаться качественным звуком и изображением на большом экране. И заряжать его, и отправлять данные, и заряжать другой USB-C аксессуар при помощи нужного кабеля – и все это одновременно.

Android наряду с Chrome, Windows, macOS и Linux полностью поддерживают стандарт USB Type-C. И несмотря на то, что звук вовсе не обязательно улучшится, вам могут быть доступны очень полезные функции.

Он уже здесь


Похоже, что ряд смартфонов, например, V-серия от LG, в ближайшее время сохранят разъем 3.5 мм. Это хорошая новость для людей, обладающих аудиоаксессуарами старого стандарта и желающих, чтобы их смартфон выступал в роли классного аудиоплеера. Однако переход на USB-C в аудио уже произошел. И очевидно, что все носимые (и, возможно, самостоятельные) аудиоустройства будут использовать USB-C. А все потому, что это выгодно компаниям, производящим наши любимые гаджеты.

Отказавшись от 3.5 мм, вы больше не обязаны делать свои смартфоны такими же толстыми, как раньше, плюс вы выигрываете несколько квадратных сантиметров на плате для размещения других компонентов. С развитием искусственного интеллекта и машинного обучения на плате требуется место для множества мелких деталей, и теперь это место можно выгадать. Сам по себе разъем под наушники не особо дорог (хотя каждый цент играет роль), но если компания обеспечит устройство режимом аналогового аудио в USB-C подключении, то ей не нужно будет разрабатывать, изготавливать и внедрять какой-либо усилитель сигнала. Это может составить существенную экономию при производстве смартфонов от начала до конца.

Кому-то из нас будет не хватать разъема 3.5 мм. Кто-то привязан к любимым наушникам гораздо больше, чем к плееру или смартфону. Но в конечном итоге выиграют пользователи, если компании предпочтут внедрять полноценный USB-C. А более умное и быстрое подключение – это, безусловно, хорошо.


Во второй части публикации о составном устройстве USB я расскажу о том, как работает звуковое устройство USB, которое STM32CubeMX генерирует по умолчанию «из коробки», а также как подготовить проект и настроить параметры звукового устройства перед запуском генерации кода.

В первой части публикации были описаны предпосылки запуска проекта по разработке составного устройства USB и приведены общие сведения о назначении и составе устройства.

Ссылка на первую часть публикации:
Составное устройство USB на STM32. Часть 1: Предпосылки

Проект был создан в STM32CubeIDE из шаблона для платы NUCLEO-F446ZE. Особенностью платы является наличие двух разъёмов USB, к одному из которых подключены встроенный в плату ST-Link V2.1 и виртуальный COM-порт с подключенным к нему UART3. Через этот разъём USB может также осуществляться электропитание платы.

Пользовательское устройство USB Full Speed использует второй разъём USB. Для корректной работы порта USB в составе проекта опцию «Activate_VBUS» нужно отключить.


При настройке конфигурации порта была обнаружена интересная особенность: при включении опции «Low power» микроконтроллер терял связь с интерфейсом SWD. К счастью, встроенный в плату ST-Link поддерживает режим «Connect under reset», что позволяет выводить MCU из состояния «кирпича» без применения дополнительных аппаратных средств.

Приступим к созданию двухканального дуплексного звукового устройства USB, для чего переходим в раздел «Middleware» и выбираем IP «Audio Device Class». Задаём максимальное количество интерфейсов равное трём. Частоту дискретизации устанавливаем равной 48000 samples/s.


Сохраняем проект. Запускаем генерацию кода. Пытаемся разобраться, что получилось в результате.

Хочу отметить, что использование STM32CubeMX и библиотеки HAL позволяет прятать «под капот» большой объём кода. Для профессиональной разработки такой подход может быть и не приемлем, но для любительского проекта экономит много времени и сил.

Из всего проекта нас пока интересуют только файлы, расположенные в папках USB_DEVICE/App и Middlewares/ST/Class/AUDIO.

Для начала разберём, как в файле usb_device.c происходит процесс формирования и запуска устройства USB:


Сначала создаётся переменная hUsbDeviceFS. Тип USBD_HandleTypeDef объявлен в usbd_def.h.

Функция MX_USB_DEVICE_Init вызывается из main.c.

Вызовом функции USBD_Init задаются начальные значения переменной hUsbDeviceFS.

Вызовом функции USBD_RegisterClass в hUsbDeviceFS.pClass размещается указатель на созданную в usbd_audio.c переменную USBD_AUDIO, содержащую указатели на обработчики событий, относящихся к классу устройства. Тип USBD_ClassTypeDef объявлен в usbd_def.h.

Вызовом функции USBD_RegisterInterface в hUsbDeviceFS.pUserData размещается указатель на созданную в usbd_audio_if.c переменную USBD_AUDIO_fops_FS, содержащую указатели на обработчики событий, относящихся к пользовательскому интерфейсу устройства. Тип USBD_AUDIO_ItfTypeDef объявлен в usbd_audio.h.

Вызовом функции USBD_Start производится запуск устройства USB.

Дескрипторы устройств USB являются своеобразными «техническими паспортами» или «руководствами по эксплуатации», из которых хост получает всю необходимую информацию о составе устройства USB и режимах его работы.

Что именно хост получает от сгенерированного в STM32CubeMX звукового устройства, можно узнать с помощью бесплатной утилиты Thesycon USB Descriptor Dumper.

Данные из листинга становятся более понятными, если обратиться к следующим документам:

Из раздела Device Descriptor мы видим, что устройство поддерживает USB 2.0, имеет единственную конфигурацию, и что класс, подкласс и протокол устройства определяются классом, подклассом и протоколом интерфейса.

Из раздела Configuration Descriptor мы видим, что длина дескриптора конфигурации класса устройства составляет 109 байт, что в устройство входят два интерфейса, что устройство «самозапитанное» (self-powered) и не может потреблять от шины USB ток более 100 мА.

Далее идёт описание интерфейса управления (Audio Control Interface, AC), из которого мы узнаём, что структура устройства выглядит так:


Подробней об этой структуре можно прочитать в [2] на стр.15, 19 – 26.

Для связи с хостом интерфейс управления использует конечную точку 0 (EP0).

Данные дескриптора интерфейса воспроизведения (Audio Streaming Interface, AS) описаны в [2] на стр.30 – 34. Сначала идёт описание интерфейса, затем – описание используемых им конечных точек.

У интерфейса воспроизведения есть два состояния:

  • в состоянии Alternate Setting 0 интерфейс не использует ни одной конечной точки и имеет нулевую полосу пропускания;
  • в состоянии Alternate Setting 1 интерфейс использует одну конечную точку и принимает поток данных для воспроизведения по двум каналам 16-битного звука с частотой дискретизации 48 кГц.

Файлы сгенерированного в STM32CubeMX драйвера звукового устройства USB расположены в папках Middlewares/ST/Class/AUDIO и USB_DEVICE.

Функции, с помощью которых драйвер звукового устройства взаимодействует со своим оконечным оборудованием (например ЦАП или кодеком), содержатся в файле usbd_audio_if.c.

Во время инициализации устройства функции AUDIO_Init_FS передаются значения частоты дискретизации в герцах и начального уровня громкости. Эти данные могут быть использованы для инициализации оконечного оборудования.

После первоначального заполнения циклического буфера звукового устройства драйвер формирует команду AUDIO_CMD_START и передаёт оконечному оборудованию указатель типа uint8_t* на начало буфера и число типа uint32_t, равное половине длины буфера в байтах.

В идеальном случае, когда скорость чтения данных оконечным устройством из буфера и скорость приёма данных по USB совпадают, было бы достаточно запустить оконечное оборудование на вывод данных с параметрами, переданными вместе с командой AUDIO_CMD_START, прямо из циклического буфера звукового устройства.

В реальном же мире потребуется синхронизация скорости потоков данных. В сгенерированном в STM32CubeMX звуковом устройстве это реализовано путём «подгонки» скорости вывода данных через оконечное оборудование под скорость приёма данных по USB.

Обратная связь организована через вызов оконечным оборудованием функции HalfTransfer_CallBack_FS после окончания чтения половины буфера, а затем вызов функции TransferComplete_CallBack_FS после полного окончания чтения буфера.

При запуске функции TransferComplete_CallBack_FS драйвер звукового устройства формирует команду AUDIO_CMD_PLAY и сравнивает скорости записи в буфер и чтения из буфера по положению указателей чтения и записи. Если расстояние между этими указателями меньше четверти размера буфера, оконечному оборудованию передаётся указатель типа uint8_t* на начало буфера, а также число типа uint32_t, равное уменьшенной на 4 половине длины буфера в байтах, если чтение происходит медленней записи, или увеличенной на 4 половине длины буфера в байтах, если чтение происходит быстрей.

Подобный метод синхронизации вносит искажения в сигнал, но они менее заметны на слух, чем искажения при записи в область буфера, из которой производится чтение.

Читайте также: