I²S — шина цифрового звука
Кодеки, цифровые микрофоны и усилители класса D передают звук не по UART и не по SPI, а по своей последовательной шине. В ней три линии — такт, выбор левого или правого канала и данные, — и почти у каждого микроконтроллера с «аудио» в описании есть её контроллер.
Обновлено Редакция GAW
I²S (Inter-IC Sound) — последовательная синхронная шина для передачи цифрового звука между микросхемами: микроконтроллером, кодеком, ЦАП, цифровым микрофоном, усилителем. В ней три линии: такт бит (CK, SCK, BCK), выбор канала (WS, LRCK) и последовательные данные (SD). В базовой шине один ведущий, он выдаёт такт и WS, и один ведомый (ESP32 TRM, разд. 22.1). Данные идут старшим битом вперёд, левый и правый каналы чередуются.
Как выглядит кадр
В стандарте Philips линия WS показывает, какой канал передаётся, и меняется за один такт CK до старшего бита очередного слова; передатчик выставляет данные по спаду CK, а приёмник читает по фронту (RM0090, разд. 28.4.3). Кроме него контроллеры поддерживают варианты MSB-justified (выравнивание влево), LSB-justified (вправо) и PCM. Длина слова — 16, 24 или 32 бита, кадр одного канала — 16 или 32 такта. Частота CK — 2 · (длина кадра канала) · Fs: при 48 кГц и кадре 32 бита это 3,072 МГц (наш расчёт).
I²S в микроконтроллерах
| STM32F4 | ESP32 | |
|---|---|---|
| Модули | I2S2, I2S3 на блоках SPI | I2S0, I2S1 |
| Частоты | 8–192 кГц, отдельная PLLI2S | — |
| Данные | 16, 24, 32 бит | FIFO 32 бит × 64 на передачу и приём |
| Особое | вывод MCK = 256 · Fs, полный дуплекс через I2S2ext и I2S3ext | режимы LCD и камеры; I2S0 — встроенные ЦАП и АЦП, PDM |
Данные — по RM0090 (разд. 28.2.2, 28.4.1) и ESP32 TRM (разд. 22.1). У STM32F4 I²S включается битом I2SMOD в блоке SPI и использует его выводы: SD — на MOSI, WS — на NSS, CK — на SCK; поэтому, по нашему выводу, одновременно работать как SPI этот блок не может. У ESP32 сигналы I²S выводятся на любые ножки через матрицу GPIO, кроме тактового I2Sn_CLK.
Где встречается
Звуковые кодеки и ЦАП, цифровые MEMS-микрофоны с выходом I²S, усилители класса D со входом I²S. Модули ESP32 используют I²S и для нестандартных задач — параллельного вывода на дисплей в режиме LCD; подробнее о выводах — на странице ESP32.
Не путать
С I²C: похожее название, но I²C — двухпроводная шина с адресами для управления устройствами. Часто кодек подключают обеими: по I²C его настраивают, по I²S передают звук.
Частые вопросы
Чем I²S отличается от SPI?
Обе шины синхронные, и в STM32 I²S даже реализован на блоке SPI (RM0090, разд. 28.4.1). Но у I²S нет адресации и выбора ведомого: линия WS не выбирает устройство, а показывает, какой канал — левый или правый — передаётся сейчас. Данные идут непрерывно, кадр за кадром, с частотой дискретизации звука.
Зачем нужен сигнал MCK?
Многим кодекам кроме такта бит нужен опорный тактовый сигнал для внутренних цифровых фильтров. Контроллер I²S STM32 в режиме ведущего может выдать его на отдельный вывод с частотой 256 · Fs, где Fs — частота дискретизации (RM0090, разд. 28.2.2). Например, при 48 кГц это 12,288 МГц (наш расчёт).
Какую частоту такта CK даёт шина при 48 кГц и 16 битах?
Такт CK передаёт каждый бит обоих каналов, поэтому при кадре канала 16 бит его частота — 2 · 16 · Fs, то есть 1,536 МГц при 48 кГц, а при кадре 32 бита — 3,072 МГц. Это наш расчёт из устройства кадра; в RM0090 те же множители 16·2 и 32·2 входят в формулы частоты дискретизации (разд. 28.4.4).
Источники
- STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 28.2.2 — I2S: полный и полудуплекс, ведущий и ведомый, частоты дискретизации 8–192 кГц, данные 16, 24 или 32 бита, кадр канала 16 или 32 бита; стандарты Philips, MSB-justified, LSB-justified, PCM; старший бит первым; DMA; MCK = 256 × Fs; отдельная PLLI2S; 28.4.1 — I2S работает на блоке SPI (бит I2SMOD), выводы SD (MOSI), WS (NSS), CK (SCK), I2SxEXT_SD для полного дуплекса, MCK отдельно; 28.4.3 — Philips: WS меняется за такт CK до старшего бита, данные выдаются по спаду CK и читаются по фронту; 28.4.4 — формулы Fs через I2SxCLK, I2SDIV и ODD
- Espressif. ESP32 Technical Reference Manual, Version 5.8 — разд. 22.1 — два модуля I2S0 и I2S1; стандарт I2S определяет три сигнала: такт, выбор канала и последовательные данные, один ведущий и один ведомый; у каждого модуля отдельные блоки передачи и приёма с FIFO 32 бит × 64; режимы LCD и камеры с параллельной шиной; только I2S0 работает со встроенными ЦАП/АЦП и PDM
Нашли ошибку?
Смотрите также
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- Усилитель класса DИмпульсный усилитель звука с КПД около 90 %
- ЦАПКод в напряжение: формула, опорное, разрядность, INL и DNL, примеры
- ESP32: выводы и GPIO34 GPIO: функции, свободные выводы, только входы, флеш-память, strapping, JTAG, токи
- STM32F4Cortex-M4 с FPU: от F401 и F411 до F429 и F469 — линейки и распиновки