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 |
| 28 | V — отсчёт достоверен |
| 29 | U — пользовательские данные |
| 30 | C — состояние канала: частота, защита от копирования |
| 31 | P — чётность: в битах 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, когда работает передатчиком.
Источники
- 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, работая передатчиком
- 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
Нашли ошибку?
Смотрите также
- SAI (serial audio interface)Гибкий аудиоинтерфейс STM32: I²S, TDM, PCM, AC'97, PDM и S/PDIF
- I²S (шина цифрового звука)Трёхпроводная шина для передачи звука: такт, выбор канала, данные
- Манчестерский кодБит = две половинки с перепадом посередине; без постоянной составляющей, скорость вдвое ниже
- Бит чётностиParity: контроль чётности символа UART, even и odd
- Дополнительный кодTwo's complement: запись отрицательных целых
- Преамбула пакетаНачальная последовательность 1010… для синхронизации приёмника
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки