I2S протокол: работа, разлики и приложенията му

Опитайте Нашия Инструмент За Премахване На Проблемите





Цифрови системи и техните изисквания за аудио данни в рамките на мобилни телефони, компютри и Домашна автоматизация продуктите са се променили драстично за определен период от време. Аудио сигналът от или към процесорите се цифровизира. Тези данни в различни системи се обработват чрез много устройства като DSP , ADC, DAC, цифрови I/O интерфейси и т.н. За да могат тези устройства да комуникират аудио данни едно с друго, е необходим стандартен протокол. Един такъв е протоколът I2S. Това е интерфейс със серийна шина, проектиран от Philip Semiconductor през февруари 1986 г. за цифров аудио интерфейс между устройствата. Тази статия обсъжда преглед на I 2S протокол работата му с приложения.


Какво е I2S протокол?

Протоколът, който се използва за предаване на цифрови аудио данни от едно устройство на друго устройство, е известен като I2S или Inter-IC Sound protocol. Този протокол предава PCM (импулсно-кодово модулирани) аудио данни от една IC към друга в рамките на електронно устройство. I2S играе ключова роля в предаването на аудио файлове, които са предварително записани от MCU към DAC или усилвател. Този протокол може да се използва и за цифровизиране на аудио с помощта на микрофон. Няма компресия в I2S протоколите, така че не можете да възпроизвеждате OGG или MP3 или други аудио формати, които кондензират аудиото, но можете да възпроизвеждате WAV файлове.



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

The Характеристики на I2S протокола включват следното.

  • Той има от 8 до 32 бита данни за всяка проба.
  • Tx & Rx FIFO прекъсвания.
  • Поддържа DMA.
  • 16-битов, 32-битов, 48-битов или 64-битов период за избор на дума.
  • Едновременно двупосочно аудио поточно предаване.
  • 8-битова, 16-битова и 24-битова ширина на семпла.
  • Има различни честоти на дискретизация.
  • Скоростта на данни е до 96 kHz през периода за избор на 64-битова дума.
  • Преплетени стерео FIFO или независими FIFO за десен и ляв канал
  • Независимо активиране на Tx & Rx.

Комуникационният протокол I2S работи

I2S комуникационен протокол е 3-жилен протокол, който просто обработва аудио данни през 3-линейна серийна шина, която включва SCK (непрекъснат сериен часовник), WS (избор на дума) и SD (серийни данни).



3-проводна връзка на I2S:

SCK

SCK или сериен часовник е първият ред на I2S протокола, който е известен също като BCLK или битова часовникова линия, която се използва за получаване на данни в подобен цикъл. Честотата на серийния часовник се определя просто с помощта на формулата като Честота = Честота на дискретизация x Битове за всеки канал x номер. на канали.

WS

В комуникационния протокол I2S, WS или избор на дума е линията, която е известна също като проводник FS (Frame Select), който разделя десния или левия канал.

Ако WS = 0, тогава се използва ляв канал или канал-1.

Ако WS = 1, тогава се използва десният канал или канал-2.

SD

Серийните данни или SD са последният проводник, където полезният товар се предава в рамките на 2 комплемента. Така че е много важно първо да се прехвърли MSB, тъй като както предавателят, така и приемникът могат да включват различни дължини на думите. По този начин предавателят или приемникът трябва да разпознае колко бита са предадени.

  • Ако дължината на думата на приемника е по-голяма от дължината на предавателя, тогава думата се съкращава (LSB битовете са зададени на нула).
  • Ако дължината на думата на приемника е по-малка от дължината на думата на предавателя, тогава LSB битовете се игнорират.

The предавател може да изпрати данните или на преден ръб или заден ръб на тактовия импулс . Това може да се конфигурира в съответния контролни регистри . Но на приемникът фиксира серийните данни и WS само на предния фронт на тактовия импулс . Предавателят предава данни само след един тактов импулс след промяна в WS. Приемникът използва WS сигнала за синхронизиране на серийните данни.

I2S мрежови компоненти

Когато множество I2S компоненти са свързани помежду си, това се нарича I2S мрежа. Компонентът на тази мрежа включва различни имена и различни функции. И така, следната диаграма показва 3 различни мрежи. Тук като предавател се използва платка ESP NodeMCU, а като приемник се използва платка за прекъсване на звука I2S. Трите проводника, използвани за свързване на предавателя и приемника, са SCK, WS и SD.

  I2S мрежови компоненти
I2S мрежови компоненти

В първата диаграма предавателят (Tx) е главният, така че той контролира линиите SCK (сериен часовник) и WS (избор на дума).

Във втората диаграма приемникът е главният. И двете SCK и WS линии започват от приемника и края на предавателя.

В третата диаграма към възлите в мрежата е свързан външен контролер, който работи като главното устройство. Така че това устройство генерира SCK & WS.

В горепосочените I2S мрежи има само едно налично главно устройство и много други компоненти, които предават или получават звукови данни.

В I2S всяко устройство може да бъде главно, като предоставя часовниковия сигнал.

Времева диаграма на I2S

За по-добро разбиране на I2S и неговата функционалност имаме времевата диаграма на комуникационния протокол на I2S, показана по-долу. Времевата диаграма на протокола I2S е показана по-долу, която включва три проводника SCK, WS и SD.

  Времева диаграма на I2S протокол
Времева диаграма на I2S протокол

В горната диаграма, първо, серийният часовник  има Честота = Честота на дискретизация * Битове за всеки канал * бр. на канали). Редът за избор на дума е вторият ред, който се променя между „1“ за десния канал и „0“ за левия канал.

Третият ред е линията за серийни данни, където данните се предават на всеки тактов цикъл на падащия фронт, обозначен с точки от HIGH до LOW.

В допълнение, можем да забележим, че WS линията варира един CLK цикъл преди MSB да бъде предаден, което дава на приемника време за съхраняване на по-ранната дума и изчистване на входния регистър за следващата дума. MSB се изпраща, когато SCK се промени след WS промени.

Всеки път, когато се предават данни между предавателя и приемника, ще има забавяне на разпространението, което ще бъде

забавяне на разпространението = (разлика във времето между външния часовник и вътрешния часовник на приемника)+(разлика във времето между вътрешния часовник и момента на получаване на данните).

За да се сведе до минимум забавянето на разпространението и за синхронизиране на предаването на данни между предавателя и приемника, е необходимо предавателят да има часовников период от

T > tr  – Да приемем, че T е тактовият период на предавателя и tr е минималният тактов период на предавателя.

При горното условие, ако разгледаме например a предавател  със скорост на предаване на данни 2,5MHz след това:

tr = 360ns

часовник Висок tHC (минимум) >0,35 T.

часовник Нисък tLC (минимум > > 0,35T.

Приемник като подчинен със скорост на предаване на данни 2,5MHz след това:

часовник Висок tHC (минимум) < 0,35 T

часовник Нисък tLC (минимум) < 0,35T.

време за настройка tst(минимум) < 0.20T.

I2S протокол Arduino

Основната цел на този проект е да се направи I2S  теремин интерфейс с помощта на библиотеката Arduino I2S. Необходимите компоненти за реализиране на този проект са; Arduino MKR Zero, Бредборд , джъмперни кабели, Adafruit MAX98357A, 3W, 4 ома високоговорител и RobotGeek Slider.

Библиотеката Arduino I2S просто ви позволява да предавате и получавате цифрови аудио данни през I2S шината. Така че този пример има за цел да обясни как да използваме тази библиотека за управление на I2S DAC за възпроизвеждане на звук, изчислен в дизайна на Arduino.

Тази верига може да бъде свързана като; I2S DAC, използван в този пример, изисква просто три проводника, както и захранване за I2S шината. Връзките за I2S на Arduino MKRZero следват както следва;

Серийни данни (SD) на щифт A6;

Сериен часовник (SCK) на pin2;

Рамката или Word Select (FS) на pin3;

Работещ

По принцип терменминът има два контрола за височина и сила на звука. И така, тези два параметъра се променят чрез преместване на два плъзгащи се потенциометъра, но можете също да ги регулирате, за да ги прочетете. Двата потенциометъра са свързани под формата на делител на напрежението, така че при преместване на тези потенциометри ще получите стойности от 0 до 1023. След това тези стойности се картографират между максималната и минималната честота и най-малката и най-високата сила на звука.

  Диаграма I2S Thermin
Диаграма I2S Thermin

Звукът, предаван по шината I2S, е проста синусоида, чиято амплитуда и честота се променят въз основа на показанията на потенциометрите.

Код

Кодът за свързване на Теремин с Arduino MKRZero, 2-плъзгащи потенциометри и I2S DAC е даден по-долу.

#include

const int maxFrequency = 5000; //максимална генерирана честота
const int minFrequency = 220; //минимална генерирана честота
const int maxVolume = 100; //максимален обем на генерираната честота
const int minVolume = 0; //минимален обем на генерираната честота
const int sampleRate = 44100; //семплиране на генерираната честота
const int wavSize = 256; //размер на буфера
къс синус [wavSize]; //буфер, в който се съхраняват синусовите стойности
const int frequencyPin = A0; //щифт, свързан към пота, който определя честотата на сигнала
const int amplitudePin = A1; //щифт, свързан към пота, който определя амплитудата на сигнала
бутон const int = 6; //щифт, свързан с контролния бутон, за да покаже честотата

void setup()
{

Serial.begin(9600); //конфигуриране на серийния порт
// Инициализирайте I2S предавателя.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(“Неуспешно инициализиране на I2S!”);

докато (1);
}

генериране на синус(); // запълване на буфер със синусовидни стойности
pinMode(бутон, INPUT_PULLUP); //поставете щифта на бутона във входно изтегляне

}
void loop() {

if (digitalRead(button) == LOW)

{

плаваща честота = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //честота на картата
int амплитуда = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //амплитуда на картата
playWave(честота, 0,1, амплитуда); //Пусни звук
//отпечатване на стойности на сериен номер
Serial.print(“Честота = “);
Serial.println(честота);
Serial.print(“Амплитуда = “);
Serial.println(амплитуда);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 се използва, за да няма малки числа
}
}
void playWave(плаваща честота, плаващи секунди, int амплитуда) {
// Възпроизвеждане на предоставения буфер за формата на вълната за указаното
// количество секунди.
// Първо изчислете колко проби трябва да се възпроизведат, за да се изпълни
// за желаното количество секунди.

unsigned int итерации = секунди * sampleRate;

// След това изчислете „скоростта“, с която се движим през вълната
// буфер въз основа на честотата на възпроизвеждания тон.

float delta = (честота * wavSize) / float(sampleRate);

// Сега преминете през всички проби и ги пуснете, като изчислите
// позиция във вълновия буфер за всеки момент от времето.

for (unsigned int i = 0; i < итерации; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
кратка проба = амплитуда * синус [поз];

// Дублиране на пробата, така че да бъде изпратена както в левия, така и в десния канал.
// Изглежда, че редът е десният канал, левият канал, ако искате да пишете
// стерео звук.

докато (I2S.availableForWrite() < 2);
I2S.write(проба);
I2S.write(проба);

}
}

Разлика между I2C и I2S протокол

Разликата между I2C и I2S протокола включва следното.

2C

I2S

The I2C протокол означава inter-IC шинен протокол I2S означава Inter-IC Sound protocol .
Използва се главно за предаване на сигнали между интегрални схеми, поставени на подобна печатна платка. Използва се за свързване на цифрови аудио устройства.
Той използва две линии между няколко главни и подчинени, като SDA и SCL . Той използва три линии WS, SCK и SD.
Поддържа multi-master & multi-slave. Поддържа един главен.
Този протокол поддържа CLK разтягане. Този протокол няма CLK разтягане.
I2C включва допълнителни начални и стоп битове. I2S не включва старт и стоп битове.

Предимства

The предимства на I2S шината включват следното.

  • I2S използва отделни CLK и серийни линии за данни. Така че има много прост приемник в сравнение с асинхронните системи.
  • Това е едно главно устройство, така че няма проблем със синхронизирането на данни.
  • Микрофонът, базиран на I2S o/p, не се нуждае от аналогов преден край, но се използва в рамките на безжичен микрофон с помощта на цифров предавател. Използвайки това, можете да имате напълно цифрова връзка между предавателя и трансдюсера.

Недостатъци

The недостатъци на I2S шината включват следното.

  • I2S не се предлага за прехвърляне на данни чрез кабели.
  • I2S не се поддържа в приложения от високо ниво.
  • Този протокол има проблем със синхронизацията между три сигнални линии, който се забелязва при висока побитова скорост и честота на семплиране. Така че този проблем възниква главно поради вариациите в закъсненията на разпространението между линиите на часовника и линиите за данни.
  • I2S не включва механизъм за откриване на грешки, така че може да причини грешки при декодирането на данни.
  • Използва се главно за комуникация между IC на подобна печатна платка.
  • Няма типични конектори и свързващи кабели за I2S, така че различните дизайнери използват различни конектори.

Приложения

The приложения на I2S протокола включват следното.

  • I2S се използва за свързване на цифрови аудио устройства.
  • Този протокол се използва широко при прехвърляне на аудио данни от DSP или микроконтролер към аудио кодек за възпроизвеждане на аудио.
  • Първоначално интерфейсът I2S се използва в дизайна на CD плейъри. Сега може да се намери там, където се изпращат цифрови аудио данни между интегрални схеми.
  • I2S се използва в DSP, аудио ADC, DAC, микроконтролери, преобразуватели на честота на дискретизация и др.
  • I2S е специално проектиран да се използва между интегрални схеми за предаване на цифрови аудио данни.
  • Този протокол играе ключова роля при свързването на микроконтролера и неговите периферни устройства, когато I2S се фокусира върху предаването на аудио данни между цифрови аудио устройства.

По този начин всичко е свързано с преглед на Спецификация на I2S протокола което включва работа, разлики и приложения. I²S е 3-проводен синхронен сериен протокол използва се за прехвърляне на цифрово стерео аудио между две интегрални схеми. The I2S анализатор на протоколи е сигнален декодер, който включва всички DigiView логически анализатори. Този софтуер DigiView просто предоставя широки възможности за търсене, навигация, експортиране, измерване, чертане и печат на всички видове сигнали. Ето един въпрос към вас, какво представлява протоколът I3C?