Перейти к содержанию

S/PDIF (IEC 60958)

Цифровой звук между проигрывателем, телевизором и усилителем часто идёт по коаксиальному или оптическому кабелю в формате S/PDIF. В STM32F7 и H7 есть аппаратный приёмник этого протокола, а блок SAI умеет его передавать.

Обновлено Редакция GAW

S/PDIF — цифровой аудиоинтерфейс по одному проводу или оптическому волокну, описанный стандартом IEC 60958; поверх него стандарт IEC 61937 передаёт сжатый многоканальный звук. Отдельной линии такта нет: приёмник восстанавливает его из данных. В STM32F7 и STM32H7 для приёма есть блок SPDIFRX, а передаёт поток блок SAI (RM0433, разд. 51–52).

Подкадр и кадр (RM0433, разд. 52.3.2)

Кадр — два подкадра по 32 бита (временных слота), левый и правый канал:

БитыНазначение
0–3преамбула B, M или W
4–27отсчёт звука до 24 бит в дополнительном коде, старший бит — 27
28V — отсчёт достоверен
29U — пользовательские данные
30C — состояние канала: частота, защита от копирования
31P — чётность: в битах 4–31 чётное число единиц

Первый подкадр обычно начинается с преамбулы M, но раз в 192 кадра — с B: так отмечается начало блока из 192 кадров, из которого собирают служебную информацию. Второй подкадр всегда начинается с W.

Бифазный код

Биты 4–31 кодируются бифазно (biphase-mark), чтобы в линии не было постоянной составляющей и приёмник мог восстановить такт. Каждый бит — два состояния: первое всегда отличается от последнего состояния предыдущего бита, а второе для нуля совпадает с первым, для единицы — отличается. Это родственник манчестерского кода. Преамбулы намеренно нарушают это правило, поэтому их не спутать с данными. Отсчёт передаётся младшим битом вперёд.

Приёмник SPDIFRX

По RM0433 (разд. 52.2): до 4 входов, автоматическое определение символьной скорости до 12,288 МГц, стерео от 8 до 192 кГц, проверка чётности, отдельные каналы DMA для отсчётов и для битов состояния и пользовательских данных. Внутри поток пересэмплируется, декодируется и разбирается на кадры, подкадры и блоки. В отличие от I²S, S/PDIF рассчитан на соединение между устройствами, а не между микросхемами на одной плате.

Частые вопросы

Как устроен кадр S/PDIF?

Кадр состоит из двух подкадров по 32 бита — левого и правого канала. В подкадре: 4 бита преамбулы, до 24 бит отсчёта в дополнительном коде младшим битом вперёд и 4 служебных бита — V (отсчёт достоверен), U (пользовательские данные), C (состояние канала) и P (чётность). 192 кадра образуют блок, из битов C всех кадров блока собирается описание потока: частота дискретизации, защита от копирования.

Зачем в S/PDIF бифазный код?

Чтобы в линии не было постоянной составляющей и приёмник мог восстановить такт из самих данных — отдельного провода такта нет. Уровень меняется на границе каждого бита, а единица даёт ещё одну смену в середине. Преамбулы B, M и W нарушают это правило намеренно, поэтому их нельзя спутать с данными.

Может ли STM32 принимать и передавать S/PDIF?

У STM32F7 и STM32H7 есть приёмник SPDIFRX: до 4 входов, стерео 8–192 кГц, автоопределение скорости, отдельные каналы DMA для отсчётов и служебных битов. Передаёт S/PDIF блок SAI, когда работает передатчиком.

Источники

  1. STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 52.2: SPDIFRX — до 4 входов, автоопределение символьной скорости, максимум 12,288 МГц, стерео 8–192 кГц, IEC 60958 и IEC 61937 (бытовые применения), обработка бита чётности, DMA для отсчётов и для служебной информации; разд. 52.3: поток IEC 60958 и IEC 61937 — от простого стерео до сжатого многоканального звука; декодирует манчестерский поток, распознаёт кадры, подкадры и блоки; сигнал spdifrx_frame_sync меняется на каждой преамбуле подкадра; разд. 52.3.2: кадр — два подкадра по 32 бита: биты 0–3 — преамбула, 4–27 — отсчёт в дополнительном коде, старший бит — 27, при 20-битном отсчёте — биты 8–27; бит 28 V (достоверность), 29 U (пользовательские данные), 30 C (состояние канала: частота, защита от копирования), 31 P (чётность: биты 4–31 содержат чётное число единиц); первый подкадр (левый канал) начинается с преамбулы M, раз в 192 кадра — с B, второй — всегда с W; блок — 192 пары подкадров; в профессиональном применении B, M, W называют Z, X, Y; биты 4–31 кодируются бифазно (biphase-mark): каждый символ — два состояния, первое всегда отличается от второго состояния предыдущего, второе равно первому для 0 и отличается для 1; данные передаются младшим битом вперёд; разд. 51.1 — SAI выдаёт S/PDIF, работая передатчиком
  2. STMicroelectronics. RM0385: STM32F75xxx and STM32F74xxx advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — гл. 34 SPDIF receiver interface (SPDIFRX) в STM32F74x/F75x; разд. 5.2 — такт SPDIFRX от PLLI2S

Нашли ошибку?