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

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 в микроконтроллерах

STM32F4ESP32
МодулиI2S2, I2S3 на блоках SPII2S0, 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).

Источники

  1. 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
  2. Espressif. ESP32 Technical Reference Manual, Version 5.8 — разд. 22.1 — два модуля I2S0 и I2S1; стандарт I2S определяет три сигнала: такт, выбор канала и последовательные данные, один ведущий и один ведомый; у каждого модуля отдельные блоки передачи и приёма с FIFO 32 бит × 64; режимы LCD и камеры с параллельной шиной; только I2S0 работает со встроенными ЦАП/АЦП и PDM

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