Protokol I2S: Funkce, rozdíly a jeho aplikace

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





Digitální systémy a jejich požadavky na audio data v rámci mobilních telefonů, počítačů a Automatizace domácnosti produkty se v průběhu času dramaticky změnily. Audio signál z nebo do procesorů se digitalizuje. Tato data v různých systémech jsou zpracovávána prostřednictvím mnoha zařízení, jako je např DSP , ADC, DAC, digitální I/O rozhraní atd. Aby tato zařízení mohla mezi sebou komunikovat audio data, je vyžadován standardní protokol. Jedním z nich je protokol I2S. Jedná se o sériové sběrnicové rozhraní, které navrhl Philip Semiconductor v únoru 1986 pro digitální audio rozhraní mezi zařízeními. Tento článek pojednává o přehledu I protokol 2S jeho práce s aplikacemi.


Co je protokol I2S?

Protokol, který se používá k přenosu digitálních zvukových dat z jednoho zařízení do druhého, je známý jako I2S nebo Inter-IC Sound protokol. Tento protokol přenáší PCM (pulse-code modulated) audio data z jednoho IC do druhého v rámci elektronického zařízení. I2S hraje klíčovou roli při přenosu audio souborů, které jsou předem nahrané z MCU do DAC nebo zesilovače. Tento protokol lze také využít k digitalizaci zvuku pomocí mikrofonu. V protokolech I2S není žádná komprese, takže nemůžete přehrávat OGG nebo MP3 nebo jiné zvukové formáty, které zhušťují zvuk, můžete však přehrávat soubory WAV.



Funkce

The Funkce protokolu I2S zahrnout následující.

  • Má 8 až 32 datových bitů pro každý vzorek.
  • Přerušení Tx & Rx FIFO.
  • Podporuje DMA.
  • 16bitové, 32bitové, 48bitové nebo 64bitové období výběru slova.
  • Současné obousměrné streamování zvuku.
  • 8bitová, 16bitová a 24bitová šířka vzorku.
  • Má různé vzorkovací frekvence.
  • Přenosová rychlost je až 96 kHz přes 64bitovou periodu výběru slova.
  • Prokládané stereo FIFO nebo nezávislé FIFO pravého a levého kanálu
  • Nezávislé povolení Tx & Rx.

Komunikační protokol I2S funguje

I2S komunikační protokol je 3Wire protokol, který jednoduše zpracovává zvuková data prostřednictvím 3-linkové sériové sběrnice, která zahrnuje SCK (Continuous Serial Clock), WS (Word Select) a SD (Serial Data).



3vodičové připojení I2S:

SCK

SCK nebo Serial Clock je první řádek protokolu I2S, který je také známý jako BCLK nebo řádek bitových hodin, který se používá k získání dat v podobném cyklu. Frekvence sériového hodin je jednoduše definována pomocí vzorce jako Frekvence = vzorkovací frekvence x bity pro každý kanál x ne. kanálů.

WS

V komunikačním protokolu I2S je WS nebo word select vedení, které je také známé jako FS (Frame Select) vodič, který odděluje pravý nebo levý kanál.

Pokud WS = 0, použije se levý kanál nebo kanál 1.

Pokud WS = 1, použije se pravý kanál nebo kanál 2.

SD

Sériová data nebo SD je poslední vodič, kde se užitečné zatížení přenáší v rámci 2 komplementů. Je tedy velmi důležité, že se nejprve přenese MSB, protože vysílač i přijímač mohou obsahovat různé délky slov. Vysílač nebo přijímač tedy musí rozpoznat, kolik bitů je přenášeno.

  • Pokud je délka slova přijímače větší než vysílač, pak se slovo zkrátí (bity LSB jsou nastaveny na nulu).
  • Pokud je délka slova přijímače menší než délka slova vysílače, pak jsou bity LSB ignorovány.

The vysílač může odesílat data buď na náběžná hrana nebo sestupná hrana hodinového pulsu . To lze nakonfigurovat v odpovídajícím kontrolní registry . Ale přijímač zachytí sériová data a WS pouze na přední hraně hodinového pulsu . Vysílač vysílá data pouze po jednom hodinovém impulsu po změně WS. Přijímač využívá signál WS pro synchronizaci sériových dat.

Síťové komponenty I2S

Když je vzájemně propojeno více komponent I2S, nazývá se to síť I2S. Komponenta této sítě obsahuje různá jména a také různé funkce. Následující diagram tedy ukazuje 3 různé sítě. Zde je deska ESP NodeMCU použita jako vysílač a deska I2S audio breakout je použita jako přijímač. Tři vodiče použité k propojení vysílače a přijímače jsou SCK, WS a SD.

  Síťové komponenty I2S
Síťové komponenty I2S

V prvním diagramu je vysílač (Tx) hlavní, takže řídí linky SCK (sériové hodiny) a WS (výběr slov).

Ve druhém schématu je přijímač hlavní. Takže obě linky SCK a WS začínají od přijímače a končí vysílač.

Ve třetím schématu je k uzlům v síti připojen externí ovladač, který funguje jako hlavní zařízení. Takže toto zařízení generuje SCK & WS.

Ve výše uvedených sítích I2S je k dispozici pouze jediné hlavní zařízení a mnoho dalších komponent, které přenášejí nebo přijímají zvuková data.

V I2S může být každé zařízení master poskytnutím hodinového signálu.

I2S časový diagram

Pro lepší pochopení I2S a jeho funkčnosti máme níže zobrazený časový diagram komunikačního protokolu I2S. Níže je zobrazen časový diagram protokolu I2S, který zahrnuje tři vodiče SCK, WS a SD.

  Diagram časování protokolu I2S
Diagram časování protokolu I2S

Ve výše uvedeném diagramu mají sériové hodiny nejprve frekvenci = vzorkovací frekvence * bity pro každý kanál * ne. kanálů). Řádek výběru slova je druhý řádek, který se mění mezi „1“ pro pravý kanál a „0“ pro levý kanál.

Třetí řádek je sériová datová linka, kde jsou data přenášena v každém hodinovém cyklu na sestupné hraně označené tečkami od HIGH do LOW.

Kromě toho si můžeme všimnout, že linka WS se mění jeden cyklus CLK před přenosem MSB, což dává přijímači čas pro uložení dřívějšího slova a vymazání vstupního registru pro další slovo. MSB se odešle, když se změní SCK po změně WS.

Kdykoli dojde k přenosu dat mezi vysílačem a přijímačem, dojde ke zpoždění šíření, které by bylo

zpoždění šíření = (časový rozdíl mezi externími hodinami a interními hodinami přijímače)+( časový rozdíl mezi interními hodinami a okamžikem příjmu dat).

Pro minimalizaci zpoždění šíření a pro synchronizaci přenosu dat mezi vysílačem a přijímačem je vyžadováno, aby vysílač měl periodu hodin  

T > tr  – Předpokládejme, že T je hodinová perioda vysílače a tr je minimální hodinová perioda vysílače.

Za výše uvedené podmínky, vezmeme-li v úvahu například a vysílač  s rychlostí přenosu dat 2,5 MHz, poté:

tr = 360ns

hodiny Vysoká tHC (minimum) >0,35 T.

hodiny Nízká tLC (minimum> > 0,35T.

Přijímač jako slave s rychlostí přenosu dat 2,5 MHz pak:

hodiny Vysoké tHC (minimum) < 0,35 T

hodiny Nízká tLC (minimum) < 0,35T.

doba nastavení tst(minimum) < 0,20T.

I2S protokol Arduino

Hlavním cílem tohoto projektu je vytvořit I2S  theremin rozhraní pomocí knihovny Arduino I2S. Potřebné komponenty k vytvoření tohoto projektu jsou; Arduino MKR Zero, Breadboard , propojovací kabely, Adafruit MAX98357A, 3W, 4 ohmy reproduktor a RobotGeek Slider.

Knihovna Arduino I2S vám jednoduše umožňuje přenášet a přijímat digitální zvuková data přes sběrnici I2S. Tento příklad se tedy zaměřuje na vysvětlení, jak využít tuto knihovnu k řízení I2S DAC pro reprodukci zvuku počítaného v designu Arduino.

Tento obvod lze zapojit jako; I2S DAC použitý v tomto příkladu vyžaduje pouze tři vodiče a také napájecí zdroj pro I2S sběrnici. Připojení pro I2S na Arduino MKRZero následuje takto;

Sériová data (SD) na kolíku A6;

Sériové hodiny (SCK) na kolíku 2;

Rámeček nebo Word Select (FS) na kolíku 3;

Pracovní

Theremin má v podstatě dva ovládací prvky pitch a volume. Tyto dva parametry se tedy upravují pohybem dvou posuvných potenciometrů, lze je však upravit i pro jejich odečítání. Dva potenciometry jsou spojeny ve formě děliče napětí, takže pohybem těchto potenciometrů získáte hodnoty od 0 do 1023. Poté jsou tyto hodnoty mapovány mezi maximální a minimální frekvenci a nejmenší a nejvyšší hlasitost.

  Diagram I2S Thermin
Diagram I2S Thermin

Zvuk přenášený na sběrnici I2S je jednoduchá sinusovka, jejíž amplituda a frekvence se mění na základě čtení potenciometrů.

Kód

Kód pro propojení Thereminu s Arduino MKRZero, 2-slider potenciometry a I2S DAC je uveden níže.

#include

const int maxFrequency = 5000; //maximální generovaná frekvence
const int minFrekvence = 220; //minimální generovaná frekvence
const int maxVolume = 100; //max hlasitost generované frekvence
const int minVolume = 0; //min objem generované frekvence
const int sampleRate = 44100; //vzorkovač generované frekvence
const int wavSize = 256; //velikost vyrovnávací paměti
krátký sinus[wavSize]; //vyrovnávací paměť, ve které jsou uloženy sinusové hodnoty
const int frekvencePin = A0; //pin připojený k hrnci, který určuje frekvenci signálu
const int amplitudaPin = A1; //pin připojený k hrnci, který určuje amplitudu signálu
tlačítko const int = 6; //pin připojený k ovládacímu tlačítku  pro zobrazení frekvence

void setup()
{

Serial.begin(9600); //nakonfigurujte sériový port
// Inicializujte vysílač I2S.
if (!I2S.begin(I2S_PHILIPS_MODE, vzorkovací frekvence, 16)) {
Serial.println(“Nepodařilo se inicializovat I2S!”);

zatímco (1);
}

generujSine(); // naplnění bufferu sinusovými hodnotami
pinMode(tlačítko, INPUT_PULLUP); //umístění pinu tlačítka do input pullup

}
void loop() {

if (digitalRead(tlačítko) == NÍZKÁ)

{

float frekvence = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //mapovat frekvenci
int amplituda = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //amplituda mapy
playWave(frekvence, 0,1, amplituda); //přehrát zvuk
//tisk hodnot na serial
Serial.print(“Frekvence = “);
Serial.println(frekvence);
Serial.print(“Amplituda = “);
Serial.println(amplituda);

}

}
void createSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / wavSize) * i)); //100 se používá k tomu, aby neměla malá čísla
}
}
void playWave(float frekvence, float sekund, int amplituda) {
// Přehrání poskytnuté vyrovnávací paměti křivek pro zadané
// počet sekund.
// Nejprve spočítejte, kolik vzorků je třeba přehrát, aby se spustily
// na požadovaný počet sekund.

unsigned int iterations = sekund * sampleRate;

// Potom vypočítejte ‚rychlost‘, kterou se pohybujeme vlnou
// buffer na základě frekvence přehrávaného tónu.

float delta = (frekvence * wavSize) / float (sampleRate);

// Nyní projděte všechny vzorky a přehrajte je, vypočítejte
// pozice ve vyrovnávací paměti vln pro každý časový okamžik.

for (unsigned int i = 0; i < iterace; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
krátký vzorek = amplituda * sinus[pos];

// Zduplikujte vzorek, aby byl odeslán do levého i pravého kanálu.
// Zdá se, že pořadí je pravý kanál, levý kanál, pokud chcete psát
// stereo zvuk.

while (I2S.availableForWrite() < 2);
I2S.write(ukázka);
I2S.write(ukázka);

}
}

Rozdíl mezi protokoly I2C a I2S

Rozdíl mezi protokoly I2C a I2S zahrnuje následující.

2C

I2S

The I2C protokol je zkratka pro inter-IC bus protokol I2S znamená Inter-IC Sound protokol .
Používá se hlavně pro vedení signálů mezi integrovanými obvody umístěnými na podobné desce plošných spojů. Používá se pro připojení digitálních audio zařízení.
Používá dvě linky mezi několika mastery a slave, jako je SDA a SCL . Používá tři řádky WS, SCK a SD.
Podporuje multi-master a multi-slave. Podporuje jeden master.
Tento protokol podporuje CLK roztahování. Tento protokol nemá CLK roztahování.
I2C obsahuje další nadzemní startovací a zastavovací bity. I2S neobsahuje žádné start & stop bity.

Výhody

The výhody sběrnice I2S zahrnout následující.

  • I2S využívá samostatné CLK a sériové datové linky. Má tedy velmi jednoduché konstrukce přijímače ve srovnání s asynchronními systémy.
  • Jedná se o jediné hlavní zařízení, takže není problém se synchronizací dat.
  • Mikrofon založený na I2S o/p nepotřebuje analogový přední konec, ale používá se v bezdrátovém mikrofonu pomocí digitálního vysílače. Pomocí tohoto můžete mít zcela digitální spojení mezi vysílačem a převodníkem.

Nevýhody

The nevýhody I2S sběrnice zahrnout následující.

  • I2S není navržen pro přenos dat přes kabely.
  • I2S není podporováno v aplikacích na vysoké úrovni.
  • Tento protokol má problém se synchronizací mezi třemi signálovými linkami, který je zaznamenán při vysoké bitové rychlosti a vzorkovací frekvenci. K tomuto problému tedy dochází hlavně kvůli kolísání zpoždění šíření mezi hodinovými linkami a datovými linkami.
  • I2S neobsahuje mechanismus detekce chyb, takže může způsobit chyby při dekódování dat.
  • Používá se hlavně pro komunikaci mezi IC na podobném PCB.
  • Neexistují žádné typické konektory a propojovací kabely pro I2S, takže různí návrháři používají různé konektory.

Aplikace

The aplikace protokolu I2S zahrnout následující.

  • I2S se používá pro připojení digitálních audio zařízení.
  • Tento protokol je široce využíván při přenosu audio dat z DSP nebo mikrokontroléru do audio kodeku pro přehrávání zvuku.
  • Zpočátku se rozhraní I2S využívá v rámci návrhů CD přehrávačů. Nyní lze zjistit, kde jsou digitální audio data posílána mezi IC.
  • I2S se používá v DSP, audio ADC, DAC, mikrokontrolérech, převodnících vzorkovací frekvence atd.
  • I2S je speciálně navržen pro použití mezi integrovanými obvody pro komunikaci digitálních audio dat.
  • Tento protokol hraje klíčovou roli při propojování mikrokontroléru a jeho periferních zařízení, když se I2S zaměřuje na přenos zvukových dat mezi digitálními zvukovými zařízeními.

Jde tedy o celkový přehled Specifikace protokolu I2S která zahrnuje práci, rozdíly a její aplikace. I²S je 3drátový synchronní sériový protokol slouží k přenosu digitálního stereo zvuku mezi dvěma integrovanými obvody. The I2S protokolový analyzátor je dekodér signálu, který zahrnuje všechny logické analyzátory DigiView. Tento software DigiView jednoduše poskytuje široké možnosti vyhledávání, navigace, exportu, měření, vykreslování a tisku všech typů signálů. Zde je pro vás otázka, co je protokol I3C?