кодек может содержать и передатчик S/PDIF, который б каналов РСМ кодирует в единый поток АС-3 для систем 5.1. Передатчик S/PDIF может использоваться и для вывода пары каналов в формате РСМ.
Многоканальный звук — High Definition Audio
На смену АС'97 в 2004 году фирма Intel выпустила спецификацию High Definition Audio (сократим ее название до HDA). Ее основная цель — создать инфраструктуру и определить архитектуру аудиоподсистемы, обеспечивающей многоканальные цифровые потоки между кодеками и памятью. В спецификации описан и аудиокодек с более богатыми (по сравнению с АС'97) возможностями. Аудиопотоки позволяют использовать HDA и для подключения кодеков голосовых модемов. Совместимость HDA с АС'97 не предусматривается, хотя общая архитектурная идея та же и даже микросхемы аудиокодеков совпадают по назначению многих выводов.
По сравнению с АС'97 в HDA увеличилась пропускная способность интерфейса и повысилась эффективность его использования за счет отказа от деления кадра на фиксированные 20-битные слоты. Система HDA поддерживает одновременную работу 15 входных и 15 выходных потоков, при этом каждый поток может нести цифровую информацию до 16 каналов. Поддерживаемые частоты выборок — 6-192 кГц, разрядность отсчетов — 8, 16, 20, 24 и 32 бит.
Как и в АС'97, система HDA начинается с контроллера — устройства PCI, обеспечивающего передачу потоков данных между системной памятью и кодеками через интерфейс HDA Link. Контроллер HDA, оставаясь (логически) устройством PCI, может включаться в чипсет или подключаться к какой-либо шине семейства PCI. Кодеков может подключаться несколько — например, аудиокодек, модемный кодек и дополнительный аудиокодек в док-станции мобильного ПК. Интерфейс с контроллером обеспечивается через его регистры, отображенные на пространство памяти, и структуры данных в памяти.
Поток (stream) представляет собой логическое (виртуальное) соединение между буферами в ОЗУ и кодеком, организуемое отдельным каналом DMA. Поток состоит из одного или нескольких каналов данных, каждый канал связан со своим преобразователем (ЦАП, АЦП или конвертором интерфейсов) в кодеке. Например, стереопоток содержит данные левого и правого каналов. Данные каналов потока в памяти расположены рядом и по интерфейсу HDA Link передаются совместно. Выходной поток (outbound stream) распространяется по интерфейсу широковещательно, он может приниматься несколькими кодеками. Каждый входной поток (inbound stream) может приниматься только от одного кодека.
По каждой входной и выходной сигнальной линии интерфейса передается последовательность кадров, частота кадров фиксирована — 48 кГц. Кадр начинается с поля команды/ответа, за которым передаются пакеты, содержащие блоки данных потоков. Каждый пакет начинается с тега потока (stream tag), идентифицирующего поток и указывающего число блоков в пакете, за тегом следуют блоки отсчетов. Блок содержит отсчеты (выборки) всех каналов, од-
Звуковые карты PC____________________________________________ 721
новременно поступающие на ЦАП (или от АЦП). Остаток (если ееть) времени в кадре заполняется нулями. Для потоков с частотой выборки 48 кГц в каждом кадре присутствует по одному блоку данных с комплектом выборок его каналов. Если частота выборок выше или ниже, то число блоков данного потока в кадре оказывается иным (возможно, и переменным от кадра к кадру).
Тактовая частота интерфейса — 24 МГц. В выходном потоке информация передается с двойной синхронизацией. Таким образом, в каждом кадре передается 1000 бит (62,5 16-битных слов), из них 40 бит выделяется для нужд управления, для канальных данных остается 60 слов. Во входном потоке имеет место одиночная синхронизация, в кадре умещается 500 бит (31,25 слов). Из них 36 бит используется для приема ответов, для пакетов данных остается 29 слов.
С каждым потоком связывается канал DMA, обеспечивающий изохронную передачу данных. Передача описывается списком дескрипторов буферов, задающих положение и длину фрагментов потока в физических адресах ОЗУ. Для каждого канала в контроллере имеются регистр-указатель на начало списка и регистр, указывающий на последний действительный дескриптор. Канал DMA должен иметь буферы на 1-2 кадра, предохраняющие контроллер от переполнения (переопустошения) в случае загруженности шины.
После сброса интерфейс HDA Link обеспечивает обнаружение подключенных кодеков. По окончании загрузки соответствующих им драйверов определяются возможности и свойства кодеков. Далее драйвер определяет наличие и типы входных и выходных разъемов кодека. Кодек может определить, подключено ли устройство к данному разъему, а в ряде случаев и тип подключенного устройства. В случае неправильного подключения кодек может исправить ошибку, перекоммутировав сигналы своих входов-выходов.
Взаимодействие драйвера с контроллером осуществляется через регистры и память. В ОЗУ определяется адрес структуры DMA Position in Buffer, в которой контроллер регулярно сообщает текущую позицию (адрес исполняемого дескриптора) для каждого потока. С каждым потоком связан набор структур в памяти, включая структуры BDL, CORB, RIRB и структуру формата потока.
Драйвер заполняет в памяти список дескрипторов буферов (Buffer Descriptor List, BDL), состоящий из 2-256 элементов. Каждый дескриптор описывает начальный адрес и длину фрагмента в памяти, а также содержит бит ЮС, указывающий на необходимость генерации запроса прерывания при выборке данного дескриптора.
Кольцевой буфер CORB (Command Output Ring Buffer) содержит команды, посылаемые контроллером в выходной поток в начале каждого кадра. Размер буфера может составлять 2, 16 или 256 элементов. Каждый элемент этого буфера содержит 4-битный адрес кодека, 8-битную команду (verb) и 20 бит данных для этой команды. Контроллер аппаратно оперирует парой указателей: CORB WP и CORB RP; по указателю CORB WP (Write Pointer) драйвер добавляет новые команды в буфер (и соответствующим образом модифицирует WP), а по указателю CORB RP (Read Pointer) контроллер задает позицию текущей считанной команды.