Protokol I2S: Delovanje, razlike in njegove aplikacije

Preizkusite Naš Instrument Za Odpravo Težav





Digitalni sistemi in njihove zahteve za zvočne podatke v mobilnih telefonih, računalnikih in Avtomatizacija doma izdelki so se v določenem obdobju močno spremenili. Zvočni signal od ali do procesorjev se digitalizira. Ti podatki v različnih sistemih se obdelujejo prek številnih naprav, npr DSP-ji , ADC-ji, DAC-ji, digitalni V/I vmesniki itd. Da lahko te naprave med seboj komunicirajo zvočne podatke, je potreben standardni protokol. Eden takih je protokol I2S. Gre za vmesnik serijskega vodila, ki ga je februarja 1986 zasnoval Philip Semiconductor za digitalni avdio vmesnik med napravami. Ta članek obravnava pregled I 2S protokol delo z aplikacijami.


Kaj je protokol I2S?

Protokol, ki se uporablja za prenos digitalnih zvočnih podatkov iz ene naprave v drugo, je znan kot protokol I2S ali Inter-IC Sound. Ta protokol prenaša zvočne podatke PCM (pulzno kodno modulirani) z enega IC na drugega znotraj elektronske naprave. I2S ima ključno vlogo pri prenosu zvočnih datotek, ki so vnaprej posnete iz MCU v DAC ali ojačevalnik. Ta protokol je mogoče uporabiti tudi za digitalizacijo zvoka z uporabo mikrofona. Znotraj protokolov I2S ni stiskanja, zato ne morete predvajati OGG ali MP3 ali drugih zvočnih formatov, ki kondenzirajo zvok, lahko pa predvajate datoteke WAV.



Lastnosti

The Lastnosti protokola I2S vključujejo naslednje.

  • Za vsak vzorec ima od 8 do 32 podatkovnih bitov.
  • Tx & Rx FIFO prekinitve.
  • Podpira DMA.
  • 16-bitno, 32-bitno, 48-bitno ali 64-bitno obdobje izbire besede.
  • Simultano dvosmerno pretakanje zvoka.
  • 8-bitna, 16-bitna in 24-bitna širina vzorca.
  • Ima različne stopnje vzorčenja.
  • Hitrost prenosa podatkov je do 96 kHz skozi obdobje izbire 64-bitne besede.
  • Prepleteni stereo FIFO ali neodvisni desni in levi kanal FIFO
  • Neodvisno omogočanje Tx & Rx.

Komunikacijski protokol I2S deluje

I2S komunikacijski protokol je 3-žični protokol, ki preprosto obravnava zvočne podatke prek 3-vrstičnega serijskega vodila, ki vključuje SCK (Continuous Serial Clock), WS (Word Select) in SD (Serial Data).



3-žična povezava I2S:

SCK

SCK ali serijska ura je prva vrstica protokola I2S, ki je znana tudi kot BCLK ali bitna ura, ki se uporablja za pridobivanje podatkov v podobnem ciklu. Serijska taktna frekvenca je preprosto definirana z uporabo formule, kot je frekvenca = hitrost vzorčenja x bitov za vsak kanal x št. kanalov.

WS

V komunikacijskem protokolu I2S je WS ali word select linija, ki je znana tudi kot žica FS (Frame Select), ki ločuje desni ali levi kanal.

Če je WS = 0, se uporabi levi kanal ali kanal-1.

Če je WS = 1, se uporabi desni kanal ali kanal-2.

SD

Serijski podatki ali SD so zadnja žica, kjer se koristni tovor prenaša v dveh komplementih. Zato je zelo pomembno, da se najprej prenese MSB, saj lahko tako oddajnik kot sprejemnik vključujeta različne dolžine besed. Tako mora oddajnik ali sprejemnik prepoznati, koliko bitov se prenaša.

  • Če je dolžina besede sprejemnika večja od dolžine oddajnika, se beseda skrajša (LSB biti nastavljeni na nič).
  • Če je dolžina besede sprejemnika manjša od dolžine besede oddajnika, so LSB biti prezrti.

The oddajnik lahko pošlje podatke bodisi na sprednji rob ali zadnji rob taktnega impulza . To je mogoče konfigurirati v ustreznem nadzorni registri . Toda sprejemnik zaklene serijske podatke in WS le na sprednjem robu taktnega impulza . Oddajnik oddaja podatke šele po enem taktnem impulzu po spremembi WS. Sprejemnik uporablja signal WS za sinhronizacijo serijskih podatkov.

Omrežne komponente I2S

Ko je med seboj povezanih več komponent I2S, se to imenuje omrežje I2S. Komponenta tega omrežja vključuje različna imena in tudi različne funkcije. Torej, naslednji diagram prikazuje 3 različna omrežja. Tukaj je plošča ESP NodeMCU uporabljena kot oddajnik, I2S audio breakout board pa kot sprejemnik. Tri žice, ki se uporabljajo za povezavo oddajnika in sprejemnika, so SCK, WS in SD.

  Omrežne komponente I2S
Omrežne komponente I2S

V prvem diagramu je oddajnik (Tx) glavni, tako da nadzoruje liniji SCK (serijska ura) in WS (izbira besede).

V drugem diagramu je sprejemnik glavni. Liniji SCK in WS se torej začneta od sprejemnika in konca oddajnika.

V tretjem diagramu je zunanji krmilnik povezan z vozlišči znotraj omrežja, ki deluje kot glavna naprava. Ta naprava torej ustvari SCK in WS.

V zgoraj navedenih omrežjih I2S je na voljo samo ena glavna naprava in številne druge komponente, ki oddajajo ali sprejemajo zvočne podatke.

V I2S je lahko katera koli naprava glavna z zagotavljanjem signala ure.

Časovni diagram I2S

Za boljše razumevanje I2S in njegove funkcionalnosti imamo spodaj prikazan časovni diagram komunikacijskega protokola I2S. Spodaj je prikazan časovni diagram protokola I2S, ki vključuje tri žice SCK, WS in SD.

  Časovni diagram protokola I2S
Časovni diagram protokola I2S

V zgornjem diagramu ima serijska ura najprej frekvenco = hitrost vzorčenja * bitov za vsak kanal * št. kanalov). Vrstica za izbiro besede je druga vrstica, ki se spreminja med »1« za desni kanal in »0« za levi kanal.

Tretja vrstica je serijska podatkovna linija, kjer se podatki prenašajo ob vsakem taktu na padajočem robu, označenem s pikami od VISOKE do NIZKE.

Poleg tega lahko opazimo, da se linija WS spremeni za en cikel CLK, preden se odda MSB, kar daje sprejemniku čas za shranjevanje prejšnje besede in počisti vhodni register za naslednjo besedo. MSB se pošlje, ko se SCK spremeni po spremembi WS.

Kadarkoli se podatki prenašajo med oddajnikom in sprejemnikom, bi prišlo do zakasnitve širjenja, ki bi bila

propagacijska zakasnitev = (časovna razlika med zunanjo uro in notranjo uro sprejemnika)+(časovna razlika med notranjo uro in prejemom podatkov).

Za zmanjšanje zamude pri širjenju in za sinhronizacijo prenosa podatkov med oddajnikom in sprejemnikom se zahteva, da ima oddajnik časovno obdobje  

T > tr  – Predpostavimo, da je T takt oddajnika in tr najmanjši takt oddajnika.

Pod zgornjim pogojem, če upoštevamo na primer a oddajnik  s hitrostjo prenosa podatkov 2,5MHz, potem:

tr = 360 ns

ura Visok tHC (najmanj) >0,35 T.

ura Nizek tLC (najmanj> > 0,35T.

Sprejemnik kot podrejeni s hitrostjo prenosa podatkov 2,5MHz, potem:

ura Visok tHC (najmanj) < 0,35 T

ura Nizek tLC (najmanj) < 0,35T.

čas namestitve tst (najmanj) < 0,20T.

I2S protokol Arduino

Glavni cilj tega projekta je izdelava vmesnika teremin I2S z uporabo knjižnice Arduino I2S. Potrebne komponente za izdelavo tega projekta so: Arduino MKR Zero, Breadboard , premostitvene žice, Adafruit MAX98357A, 3W, 4 ohmski zvočnik in RobotGeek Slider.

Knjižnica Arduino I2S vam preprosto omogoča prenos in sprejemanje digitalnih avdio podatkov prek vodila I2S. Cilj tega primera je torej pojasniti, kako uporabiti to knjižnico za pogon I2S DAC za reprodukcijo zvoka, izračunanega v zasnovi Arduino.

To vezje je mogoče povezati kot; DAC I2S, uporabljen v tem primeru, potrebuje preprosto tri žice in napajalnik za vodilo I2S. Povezave za I2S na Arduino MKRZero sledijo kot;

Serijski podatki (SD) na nožici A6;

Serijska ura (SCK) na pin2;

Okvir ali izbira besede (FS) na pin3;

Delo

V bistvu ima teremin dva nadzora višine in glasnosti. Ta dva parametra se torej spremenita s premikanjem dveh drsnih potenciometrov, vendar ju lahko prilagodite tudi tako, da ju odčitate. Oba potenciometra sta povezana v obliki napetostnega delilnika, tako da boste s premikanjem teh potenciometrov dobili vrednosti od 0 do 1023. Po tem se te vrednosti preslikajo med največjo in najmanjšo frekvenco ter najmanjšo in najvišjo glasnostjo.

  Diagram I2S Thermin
Diagram I2S Thermin

Zvok, ki se prenaša po vodilu I2S, je preprost sinusni val, katerega amplituda in frekvenca se spreminjata glede na odčitavanje potenciometrov.

Koda

Koda za povezovanje Theremina z Arduino MKRZero, 2-drsnimi potenciometri in I2S DAC je podana spodaj.

#include

const int maxFrequency = 5000; //največja generirana frekvenca
const int minFrequency = 220; //najmanjša generirana frekvenca
const int maxVolume = 100; //največja glasnost generirane frekvence
const int minVolume = 0; //min. glasnost generirane frekvence
const int sampleRate = 44100; //vzorčenje generirane frekvence
const int wavSize = 256; //velikost medpomnilnika
kratki sinus [wavSize]; //medpomnilnik, v katerem so shranjene sinusne vrednosti
const int frequencyPin = A0; //zatič, priključen na pot, ki določa frekvenco signala
const int amplitudaPin = A1; //pin, povezan z loncem, ki določa amplitudo signala
gumb const int = 6; //zatič, povezan s kontrolnikom gumba  za prikaz frekvence

prazna nastavitev()
{

Serial.begin(9600); //konfigurirajte serijska vrata
// Inicializacija oddajnika I2S.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('Inicializacija I2S ni uspela!');

medtem ko (1);
}

generirajSine(); // napolni medpomnilnik s sinusnimi vrednostmi
pinMode(gumb, INPUT_PULLUP); //vstavite zatič gumba v vhod

}
void loop() {

if (digitalRead(button) == LOW)

{

plavajoča frekvenca = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //frekvenca zemljevida
int amplituda = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //preslikava amplitude
playWave(frekvenca, 0,1, amplituda); //predvajaj zvok
//natisni vrednosti na serijo
Serial.print(“Frekvenca = “);
Serial.println(frekvenca);
Serial.print(“Amplituda = “);
Serial.println(amplituda);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / wavSize) * i)); //100 se uporablja, da ni majhnih števil
}
}
void playWave(float frekvenca, float seconds, int amplituda) {
// Predvajaj posredovani vmesni pomnilnik valovne oblike za določeno
// število sekund.
// Najprej izračunajte, koliko vzorcev je treba predvajati, da se izvede
// za želeno število sekund.

unsigned int iterations = seconds * sampleRate;

// Nato izračunajte 'hitrost', s katero se premikamo skozi val
// medpomnilnik glede na frekvenco predvajanega tona.

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

// Zdaj preglejte vse vzorce in jih predvajajte ter izračunajte
// položaj znotraj medpomnilnika valov za vsak trenutek v času.

for (unsigned int i = 0; i < iterations; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
kratek vzorec = amplituda * sinus [poz];

// Podvojite vzorec, tako da bo poslan na levi in ​​desni kanal.
// Videti je, da je vrstni red desni kanal, levi kanal, če želite pisati
// stereo zvok.

medtem ko (I2S.availableForWrite() < 2);
I2S.write(vzorec);
I2S.write(vzorec);

}
}

Razlika med protokoloma I2C in I2S

Razlika med protokoloma I2C in I2S vključuje naslednje.

2C

I2S

The protokol I2C pomeni inter-IC vodilni protokol I2S je kratica za Inter-IC Sound protocol .
Uporablja se predvsem za vodenje signalov med integriranimi vezji, nameščenimi na podobnem tiskanem vezju. Uporablja se za povezovanje digitalnih avdio naprav.
Uporablja dve liniji med več glavnimi in podrejenimi, kot sta SDA in SCL . Uporablja tri črte WS, SCK  & SD.
Podpira multi-master & multi-slave. Podpira enega glavnega.
Ta protokol podpira raztezanje CLK. Ta protokol nima raztezanja CLK.
I2C vključuje dodatne zagonske in zaustavitvene bite. I2S ne vključuje nobenih start & stop bitov.

Prednosti

The prednosti vodila I2S vključujejo naslednje.

  • I2S uporablja ločene CLK in serijske podatkovne linije. Zato ima zelo preprosto zasnovo sprejemnika v primerjavi z asinhronimi sistemi.
  • To je ena glavna naprava, tako da ni težav s sinhronizacijo podatkov.
  • Mikrofon, ki temelji na I2S o/p, ne potrebuje analognega sprednjega dela, ampak se uporablja v brezžičnem mikrofonu z uporabo digitalnega oddajnika. Z uporabo tega lahko vzpostavite popolnoma digitalno povezavo med oddajnikom in pretvornikom.

Slabosti

The slabosti vodila I2S vključujejo naslednje.

  • I2S ni predlagan za prenos podatkov prek kablov.
  • I2S ni podprt v aplikacijah na visoki ravni.
  • Ta protokol ima težave s sinhronizacijo med tremi signalnimi linijami, kar je opaziti pri visoki bitni hitrosti in frekvenci vzorčenja. Torej se ta težava pojavlja predvsem zaradi variacije zakasnitev širjenja med urnimi in podatkovnimi linijami.
  • I2S ne vključuje mehanizma za odkrivanje napak, zato lahko povzroči napake pri dekodiranju podatkov.
  • Uporablja se predvsem za komunikacijo med IC na podobnem tiskanem vezju.
  • Za I2S ni tipičnih konektorjev in povezovalnih kablov, zato različni oblikovalci uporabljajo različne konektorje.

Aplikacije

The aplikacije protokola I2S vključujejo naslednje.

  • I2S se uporablja za povezovanje digitalnih avdio naprav.
  • Ta protokol se v veliki meri uporablja pri prenosu zvočnih podatkov iz DSP ali mikrokrmilnika v zvočni kodek za predvajanje zvoka.
  • Sprva se vmesnik I2S uporablja v zasnovah CD predvajalnikov. Zdaj ga je mogoče najti tam, kjer se digitalni zvočni podatki pošiljajo med IC-ji.
  • I2S se uporablja v DSP-jih, zvočnih ADC-jih, DAC-jih, mikrokontrolerjih, pretvornikih hitrosti vzorčenja itd.
  • I2S je posebej zasnovan za uporabo med integriranimi vezji za komuniciranje digitalnih zvočnih podatkov.
  • Ta protokol ima ključno vlogo pri povezovanju mikrokrmilnika in njegovih perifernih naprav, ko se I2S osredotoča na prenos zvočnih podatkov med digitalnimi zvočnimi napravami.

Gre torej za pregled nad Specifikacija protokola I2S ki vključuje delovanje, razlike in njegove aplikacije. I²S je 3-žilni sinhroni serijski protokol uporablja se za prenos digitalnega stereo zvoka med dvema integriranima vezjema. The Analizator protokola I2S je dekoder signala, ki vključuje vse logične analizatorje DigiView. Ta programska oprema DigiView preprosto omogoča široko iskanje, navigacijo, izvoz, meritve, risanje in tiskanje vseh vrst signalov. Tukaj je vprašanje za vas, kaj je protokol I3C?