i2s что это такое и как

Записки программиста

Учимся передавать звук с использованием протокола I2S

I2S (Inter-IC Sound) — это цифровой протокол передачи звука, который довольно часто используется в современной электронике. I2S не имеет ничего общего с I2C кроме похожего названия, поэтому важно эти протоколы не путать. В рамках сего поста мы постараемся разобраться, на что вообще похож I2S, и как с ним работать.

На базе устройств, использующих I2S, существует немало готовых плат, в частности:

При написании этого поста я использовал PmodI2S производства компании Digilent. Данный модуль построен на базе чипа CS4344 (типичная маркировка «344C 1609», даташит [PDF]). Устройство было приобретено в Чип-и-Дипе, но на момент написания этих строк оно успело куда-то пропасть с сайта магазина. Впрочем, для повторения описанных далее шагов вы можете использовать любой аналогичный модуль. Внешний вид использованного мной модуля:

i2s что это такое и как

Типичный I2S-сигнал выглядит в PulseView как-то так:

i2s что это такое и как

Здесь SCK представляет собой тактовый сигнал. WS (он же LRCLK) отвечает за выбор канала. Через SDA (он же SDIN) передаются сами данные. Сигнала MCLK, строго говоря, нет в спецификации I2S [PDF]. Но на практике многие устройства используют его для синхронизации своих внутренних операций. Обычно сюда идет тактовый сигнал с частотой в 256 раз больше частоты дискретизации звука.

Fun fact! Если хочется извлечь звук из записанного I2S-сигнала, это можно сделать такой командой:

Для экспериментов с модулем я воспользовался отладочной платой Nucleo-F411RE. Микроконтроллер, используемый в этой плате, имеет аппаратную поддержку I2S, которой и было решено воспользоваться. Какие настройки доступны в STM32CubeMX и к каким пинам микроконтроллера следует подключать модуль, вы без труда разберетесь самостоятельно по полной версии проекта. Поговорим лучше непосредственно о коде.

Например, генерация синусоидального сигнала с частотой 100 Гц осуществляется так:

#define PI 3.14159265358979323846
#define TAU (2.0 * PI)

void loop ( ) <
HAL_StatusTypeDef res ;
int16_t signal [ 46876 ] ;
int nsamples = sizeof ( signal ) / sizeof ( signal [ 0 ] ) ;

int i = 0 ;
while ( i nsamples ) <
double t = ( ( double ) i / 2.0 ) / ( ( double ) nsamples ) ;
signal [ i ] = 32767 * sin ( 100.0 * TAU * t ) ; // left
signal [ i + 1 ] = signal [ i ] ; // right
i += 2 ;
>

Интересно, что по каким-то причинам микроконтроллеры STM32 не могут использовать традиционные значения частоты дискретизации, такие, как 44100 Гц или 48000 Гц. В частности, при выборе частоты 48000 Гц реальная частота составит 46876 Гц (на 2.34% меньше). Впрочем, на слух такая разница совершенно незаметна. Все эти различия между желаемой и реальной частотой отображаются прямо в STM32CubeMX.

i2s что это такое и как

Но это еще не все. Если вы попытаетесь, например, просто взять и проиграть WAV-файл с SD-карты «в лоб», то у вас ничего не получится. Звук будет периодически обрываться и слушать такое будет совершенно невозможно. Решение заключается в том, чтобы использовать прерывания и двойную буфферизацию. Другими словами, параллельно с проигрыванием одного отрывка файла должен читаться следующий отрывок. Таким образом, когда проигрывание текущего отрывка завершится, следующий отрывок будет уже готов, и не придется тратить время на его чтение с SD-карты (что и является источником обрывов в звуке).

volatile bool end_of_file_reached = false ;
volatile bool read_next_chunk = false ;
volatile uint16_t * signal_play_buff = NULL ;
volatile uint16_t * signal_read_buff = NULL ;
volatile uint16_t signal_buff1 [ 4096 ] ;
volatile uint16_t signal_buff2 [ 4096 ] ;

void HAL_I2S_TxCpltCallback ( I2S_HandleTypeDef * hi2s ) <
if ( end_of_file_reached )
return ;

volatile uint16_t * temp = signal_play_buff ;
signal_play_buff = signal_read_buff ;
signal_read_buff = temp ;

UART_Printf ( «File opened, reading. \r \n » ) ;

uint32_t fileSize = 8 + ( header [ 4 ] | ( header [ 5 ] 8 ) |
( header [ 6 ] 16 ) | ( header [ 7 ] 24 ) ) ;
uint32_t headerSizeLeft = header [ 16 ] | ( header [ 17 ] 8 ) |
( header [ 18 ] 16 ) | ( header [ 19 ] 24 ) ;
uint16_t compression = header [ 20 ] | ( header [ 21 ] 8 ) ;
uint16_t channelsNum = header [ 22 ] | ( header [ 23 ] 8 ) ;
uint32_t sampleRate = header [ 24 ] | ( header [ 25 ] 8 ) |
( header [ 26 ] 16 ) | ( header [ 27 ] 24 ) ;
uint32_t bytesPerSecond = header [ 28 ] | ( header [ 29 ] 8 ) |
( header [ 30 ] 16 ) | ( header [ 31 ] 24 ) ;
uint16_t bytesPerSample = header [ 32 ] | ( header [ 33 ] 8 ) ;
uint16_t bitsPerSamplePerChannel = header [ 34 ] | ( header [ 35 ] 8 ) ;
uint32_t dataSize = header [ 40 ] | ( header [ 41 ] 8 ) |
( header [ 42 ] 16 ) | ( header [ 43 ] 24 ) ;

read_next_chunk = false ;
end_of_file_reached = false ;
signal_play_buff = signal_buff1 ;
signal_read_buff = signal_buff2 ;

Напомню, что с форматом WAV-файлов и библиотекой FatFs мы ранее познакомились в рамках статей Парсинг заголовка и проигрывание WAV-файла на Scala и Работа с FAT32 и exFAT с помощью библиотеки FatFs соответственно.

Вот и все, о чем я хотел сегодня рассказать. Исходники к этому посту вы найдете на GitHub. Если у вас есть вопросы или дополнения, используйте комментарии, не стесняйтесь!

Источник

Введение в интерфейс I2S

В данной статье рассматриваются характеристики и применение протокола последовательной связи, предназначенного специально для аудиосистем.

I2S и эпоха цифрового аудио

Растущая коллекция общепринятых электротехнических аббревиатур временами может быть немного ошеломляющей; и я не удивлюсь, если вы несколько раз видели термин «I2S» и просто предполагали, что это была просто опечатка в аббревиатуре «I2C».

Между этими двумя протоколами действительно существует определенная связь. Оба были первоначально разработаны компанией Philips Semiconductors (теперь NXP), и названия обоих начинаются с «I2», потому что они предназначены для связи между микросхемами (англ. аббревиатура «IC»). Однако I2S появился после I2C, и, если I2C является универсальным интерфейсом, I2S предназначен для передачи аудиоданных – «S» в названии означает «sound» (звук).

I2S был создан в 1980-х годах, когда цифра начала свое завоевание рынка потребительских аудиосистем. Заявленная цель создания I2S – облегчение разработки аудиоэлектроники при помощи стандартизированного интерфейса для передачи цифровых данных между АЦП, ЦАП, цифровыми фильтрами, цифровыми сигнальными процессорами и другими типами интегральных микросхем, используемых в аудиосистемах. По сути, это двухканальный протокол, потому что он был разработан для стереофонического звука.

Характеристики I2S

Следующая диаграмма изображает три конфигурации, поддерживаемые I2S.

i2s что это такое и как Рисунок 1 – Конфигурации, поддерживаемые интерфейсо I2S. Схема взята из спецификации I2S, впервые опубликованной Philips Semiconductors в 1986 году и обновленной в 1996 году.

Данные передаются по линии SD, состояние линии WS соответствует аудиоканалу (правый или левый), который передается в данный момент, а линия синхронизации SCK передает тактовый сигнал. Как видно из диаграммы, сигналы WS и SCK могут генерироваться передатчиком, приемником или сторонним контроллером.

Ниже перечислены характерные особенности трех сигналов интерфейса I2S.

Последовательные данные (SD)

Выбор слова (WS)

Тактовый сигнал (SCK)

I2C против I2S

Если вы знакомы с протоколом I2C, то, возможно, уже поняли, что I2C и I2S намного менее похожи, чем можно предположить по их названиям.

I2C не придает особого значения высокой скорости передачи данных, но включает в себя функции установления связи, которые позволяют ему эффективно и надежно работать в (потенциально больших) сетях, состоящих из различных типов микросхем. Как показано на следующей диаграмме, в этом типе связи многое может пойти не так, а сложность протокола I2C отражает сложность задач, для которых он предназначен.

i2s что это такое и как Рисунок 3 – Что может пойти не так при связи по I2C

I2S, напротив, предназначен для эффективной передачи определенного типа цифровых данных. Скорость передачи более важна, поскольку последовательная передача в реальном времени двухканального звука с высоким разрешением требует гораздо большей пропускной способности, чем задачи связи, которые часто выполняются с помощью I2C (или UART).

Характер передачи по I2S «точка-точка» устраняет необходимость в подтягивающих резисторах, как I2C, а использование третьего сигнала для синхронизации на уровне слов позволяет нам обойтись без усложнений протокола, которые помогают I2C поддерживать организацию передачи данных по двухпроводной шине.

I2S больше похож на SPI, чем на I2C. Фактически, реализация SPI, предназначенная для однонаправленной передачи данных, использует, по сути, ту же конфигурацию: одна линия для тактового сигнала, одна линия для данных, и третья линия для синхронизации на уровне слов.

Заключение

I2S – эффективный, простой протокол последовательной связи, который отлично подходит для оцифрованного звука. Тем не менее, нет закона о том, что он ограничен только аудиоданными. Несколько лет назад я использовал его для создания прототипа программно определяемой радиосистемы (SDR); I2S предлагал скорость передачи, достаточную для сигналов основной полосы частот, и был удобно встроен в платформу разработки DSP, с которой я работал.

Источник

i2s что это такое и как

Hi-Fi и High-End техника или энциклопедия звука и видео

ЗВУКОМАНИЯ

Hi-Fi и High-End техника или энциклопедия звука и видео

Что такое I2S?

Что такое I2S?

i2s что это такое и как

Что такое I2S?

I2S (Inter-IC Sound) — это конструкция последовательной шины (тракта) для цифровых аудиоустройств и технологий, таких как проигрыватели компакт-дисков ( CD ), цифровые звуковые процессоры и звук цифрового телевидения ( DTV ). Конструкция I2S обрабатывает аудиоданные отдельно от тактовых сигналов. Разделяя данные и тактовые сигналы, ошибки, связанные со временем, что устраняет необходимость в устройствах, предотвращающих джиттер. Конструкция шины I2S состоит из трех последовательных шинных линий: линия с двумя каналами данных мультиплексирования с временным разделением ( TDM ), линия выбора и линия синхронизации.

I²S ( Inter-IC Sound ), — стандарт интерфейса последовательной электрической шины, используемой для соединения цифровых аудиоустройств. Он используется для передачи аудиоданных ИКМ между интегральными схемами в электронном устройстве. Шина I²S разделяет тактовые сигналы и сигналы последовательных данных, в результате чего получатели становятся проще, чем те, которые требуются для асинхронных систем связи, которым необходимо восстановить тактовые импульсы из потока данных. Альтернативно I²S пишется как I2S или IIS. Несмотря на похожее название, I²S не имеет отношения к двунаправленной шине I²C (IIC).

i2s что это такое и какЦАП I2S DSD256-PCM

Немного истории I2S

Этот стандарт был введен в 1986 году компанией Philips Semiconductor (в настоящее время NXP Semiconductors ) и в последний раз пересматривался 5 июня 1996 года

Протокол I²S описывает один конкретный тип цифровой аудиосвязи PCM с определенными параметрами, указанными в спецификации Philips.

Состоит он как минимум из трех линий:

i2s что это такое и какЦАП ESS-902 внутри

И2С также может включать следующие строки:

44,1 кГц × 16 × 2 = 1,4112 МГц

Часы выбора слова позволяют устройству узнать, отправляется ли в данный момент канал 0 или канал 1, поскольку I²S позволяет отправлять два канала по одной и той же линии данных. Это сигнал с коэффициентом заполнения 50%, частота которого совпадает с частотой дискретизации. Для стерео материала спецификация I²S гласит, что левый звук передается в низком цикле тактового сигнала выбора слова, а правый канал передается в верхнем цикле. Обычно он синхронизируется с задним фронтом последовательных часов, так как данные фиксируются на переднем фронте.

i2s что это такое и какI2S ЦАП

В качестве аудио-соединения I2S

В звуковом оборудовании I²S иногда используется как внешнее соединение между проигрывателем компакт-дисков и отдельным блоком ЦАП, в отличие от чисто внутреннего соединения внутри одного блока проигрывателя. Это может сформировать альтернативу обычно используемым стандартам AES / EBU или Toslink или S / PDIF.

Соединение I²S не предназначалось для использования через кабели, и большинство интегральных микросхем не будет иметь правильного сопротивления для коаксиальных кабелей. Поскольку ошибка адаптации импеданса, связанная с разной длиной линии, может привести к разнице в задержке распространения между тактовой линией и строкой данных, это может привести к проблеме синхронизации между SCK, WS и сигналами данных, в основном на высокой частоте дискретизации и битрейте. Поскольку I²S не имеет никакого механизма обнаружения ошибок, это может вызвать важную ошибку декодирования.

i2s что это такое и какЦАП 4398+2706

ЭТО ДОСТАТОЧНО ПРОСТОЙ ИНТЕРФЕЙС

Не путайте его с другим протоколом Philips Semiconductor: I2C. Протокол Inter-Integrated Circuit имеет инициалы IIC, и двойная буква была сокращена, чтобы придумать номенклатуру «в квадрате», которую мы полюбили с I2C. Возрожденный в 1982 году, этот предшествующий I2S на четыре года, что объясняет несколько странную аббревиатуру «Inter-Integrated Circuit Sound».

i2s что это такое и какi2s_dac

Протокол застрял, потому что он очень не удобен для работы с последовательных данных, связанных с высококачественным цифровым звуком. Это так не удобно, что вы, вероятно, слышали о том, что он используется для других целей, кроме аудио. Но сначала, что на самом деле делает 2S?

Цифровой источник звука обычно создает два слова данных, одно для левого канала и одно для правого, один раз для каждого интервала выборки. Например, источник аудио CD с частотой дискретизации 44,1 кГц, который будет передавать два 16-битных слова 44 100 раз каждую секунду. На одной последовательной линии это колоссальные 1 411 200 бит в секунду (44100 x 16 x 2).

i2s что это такое и какЦАП Audiophile V2 на 9038 + клон FM711

Как справляется эта плохая последовательная линия передачи данных? Ну, одна строка последовательных данных не может легко передать границы слов для левой и правой. Также трудно (или невозможно) надежно извлечь часы из него без джиттера. Поэтому для передачи аудио нам действительно нужны другие способы доставки этих фрагментов информации.

I2S решает обе эти проблемы с помощью дополнительных строк, предоставляя строку выбора слова (также иногда называемую тактовыми импульсами L / R) для выбора левого или правого отсчетов, а также битовую линию тактового сигнала для синхронизации всего. Вот и все, что есть в I 2 S: строка данных, строка синхронизации слов и строка синхронизации битов.

i2s что это такое и как

i2s что это такое и как

Итак, у вас есть I2S

Все, что вам нужно знать о межкомпонентных аудиоразъемах, в четырех удобных параграфах.

i2s что это такое и как

ESP32 I2S намного сложнее, чем базовый стандарт.

i2s что это такое и какRaspberry Pi 4 + клон дартЗил

Возможно, эта номенклатура имеет корни в ESP8266, имеющем периферийное устройство I 2 S на чипе, и общее периферийное устройство в более позднем устройстве.

i2s что это такое и какRaspberry Pi 4 + клон Зил

Поскольку большинство интерфейсов I 2 S могут работать с тактовой частотой в несколько мегагерц, их пропускная способность может быть на удивление высокой. Это то же самое, что и принцип, заложенный в любой программно-определяемый радиопередатчик: одним махом и с очень небольшим количеством дополнительного оборудования вы перенесли задачу создания произвольных спектров в диапазоне МГц с аппаратного на программное обеспечение.

i2s что это такое и какRaspberry Pi 4 и флешка

Даже самые современные микроконтроллеры обладают достаточной вычислительной мощностью для выполнения этой задачи, что делает относительно простыми некоторые приложения для I 2 S, которые были бы за гранью воображения тех инженеров Philips 1980-х годов. Однако, I2S к которой можно было только подключить аудио ЦАП, не останавливает аудиофилов от подключения, и этот интерфейс становится намного полезнее, а возможности безграничны.

i2s что это такое и как

Я надеюсь, что эта статья «Что такое I2S?» немного помогла. Пожалуйста, оставляйте комментарии ниже, чтобы я мог вернуться к вам. Не бойтесь меня и добавляйтесь в ВК, Ютуб

Если вы хотите узнать больше об этой теме, и быть в курсе, пожалуйста, подпишитесь на наш сайт.

Не забывайте сохранять нас в закладках! (CTRL+SHiFT+D) Подписывайтесь, комментируйте, делитесь в соц.сетях. Желаю удачи в поиске своего звука!

На нашем сайте Звукомания есть полезная информация по звуку и видео, которая пригодится для каждого, причем на каждый день, мы обновляем сайт «Звукомания» постоянно и стараемся искать и писать только отличную, проверенную и нужную информацию.

Вам нужен хороший фонокорректор, новый ламповый усилитель или отличный ЦАП, плеер, наушники, АС или другую звуковую технику, (усилитель, ресивер и т.д.) то пишите в ВК, помогу выгодно и с гарантией приобрести хорошую звуковую технику…

Если вы являетесь производителем, рекламодателем, импортером, дистрибьютором или агентом в области качественного воспроизведения звука и хотели бы связаться с нами, пожалуйста, пишите в

ВК или ОК или ИНСТА или по эл. почте: anl555@bk.ru

Источник

STM Урок 46. I2S AUDIO. Часть 1

Урок 46

I2S AUDIO

Сегодня мы начинаем изучение нового для нас интерфейса – это шина I2S, чем то похожая на I2C, но заточенная непосредственно на передачу цифрового аудиопотока. Описание и диаграммы протокола данной шины можно найти на странице 894 STM32F4 Reference manual. Ну если кратко, данная шина является также синхронной, причем синхронизация обеспечивается не только для каждого переданного бита, как у I2C, а также поканально. То есть отдельный провод синхронизации задействован так, что при передачи полностью всех битов (их может быть 8, 16, 24) одного канала он находится в состоянии 1, а при передачи всех битов другого канала – в 0. Данное условие обеспечивает невозможность случайного обмена каналов между собой вследствие искажения сигнала потока.

Свой проект мы создадим из одного из предыдущих проектов USB_HOST_MSC_FATFS, так как работать мы будем с USB Flash Drive, ибо нам для изучения преобразования цифрового аудио надо это цифровое аудио откуда-то взять. Было принято решение взять его из WAV файлов, расположенных на данном носителе. Проект мы назовём по наименованию шины I2S_AUDIO. Так как мы ещё будем подключать к плате Discovery носитель USB Flash Drive, то необходимо туда скопировать для WAV-файла со звуком: Track1.wav и Track2.wav. Частота сэмплирования данных файлов может быть любая, но желательно не больше 48 кГц.

Посмотрим подключение аудио-микросхемы в плате Discovery (нажмите на картинку для увеличения изображения)

i2s что это такое и как

Данная микросхема именуется CS43L22. Основной её характеристикой является поддерживаемая частота дискретизации. Это от 4 кГц до 96 кГц. Откроем её даташит. Там существуют четыре вида протокола I2S. Мы используем самый первый стандарт. Единственное из даташита непонятно зачем нужен контакт MCLK. В даташите дано следующее описание данного контакта:

MCLK – Master Clock (Input) – Clock source for the delta-sigma modulators.

Пролистав несколько форумов, я нашел, что это ещё третий вид синхронизации – тактирование сэмплов.

Вот так у нас всё подключено к плате

i2s что это такое и как

Откроем наш проект в MS Cube и сделаем необходимое добавление определённых настроек. Включим первым делом саму шину I2S

i2s что это такое и как

Ножки никакие не переопределяем. Оставим так как есть. Именно по этим ножкам и подключена микросхема Аудио ЦАП.

Внесем также некоторые корректировки в настройки I2S

i2s что это такое и как

Для работы лапки RESET микросхемы нам будет ещё необходимо включить на выход и настроить данную лапку порта (PD4)

i2s что это такое и как

i2s что это такое и как

Также добавим и настроим DMA на шине I2S

i2s что это такое и как

А так как управление микросхемой происходит в отличии от основного аудио-потока уже по шине I2C, то необходимо включить ещё и эту шину

i2s что это такое и как

Только I2C3 мы отдадим под символьный дисплей, а I2C1 нам понадобится именно для аудио-микросхемы. Мало того, лапку PB7 нужно будет переопределить на PB9. Я думаю, все уже умеют это делать. Сначала сбросим её, а затем переопределим

i2s что это такое и как i2s что это такое и как

Теперь переходник дисплея у нас будет подключен к другим лапкам портов:

Сгенерируем проект для среды Keil, настроим программатор на авторезет, добавим в дерево проекта файл lcd.c и скомпилируем проект.

Создадим и добавим в проект новые файлы, предназначенные для работы со звуком, audioplay.c и audioplay.h следующего содержания:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *