I2S protokolas: veikimas, skirtumai ir taikymas

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Skaitmeninės sistemos ir jų garso duomenų reikalavimai mobiliuosiuose telefonuose, kompiuteriuose ir Namų automatika gaminiai per tam tikrą laiką labai pasikeitė. Garso signalas iš procesorių arba į juos skaitmeninamas. Šie duomenys įvairiose sistemose apdorojami per daugelį įrenginių, pvz DSP , ADC, DAC, skaitmeninės įvesties/išvesties sąsajos ir kt. Kad šie įrenginiai galėtų perduoti garso duomenis tarpusavyje, reikalingas standartinis protokolas. Vienas iš tokių yra I2S protokolas. Tai nuosekliosios magistralės sąsaja, kurią Philip Semiconductor 1986 m. vasario mėn. sukūrė skaitmeninei garso sąsajai tarp įrenginių. Šiame straipsnyje aptariama I apžvalga 2S protokolas jos darbas su programomis.


Kas yra I2S protokolas?

Protokolas, naudojamas skaitmeniniams garso duomenims perduoti iš vieno įrenginio į kitą, yra žinomas kaip I2S arba Inter-IC Sound protokolas. Šis protokolas perduoda PCM (impulsiniu kodu moduliuotus) garso duomenis iš vieno IC į kitą elektroniniame įrenginyje. I2S vaidina pagrindinį vaidmenį perduodant garso failus, kurie iš anksto įrašyti iš MCU į DAC arba stiprintuvą. Šis protokolas taip pat gali būti naudojamas garsui skaitmeninti naudojant mikrofoną. I2S protokoluose nėra suspaudimo, todėl negalite leisti OGG ar MP3 ar kitų garso formatų, kurie sutrumpina garsą, tačiau galite leisti WAV failus.



funkcijos

The I2S protokolo ypatybės įtraukti toliau nurodytus dalykus.

  • Kiekvienam pavyzdžiui yra nuo 8 iki 32 duomenų bitų.
  • Tx & Rx FIFO pertraukia.
  • Jis palaiko DMA.
  • 16 bitų, 32 bitų, 48 bitų arba 64 bitų žodžių pasirinkimo laikotarpis.
  • Vienalaikis dviejų krypčių garso transliavimas.
  • 8 bitų, 16 bitų ir 24 bitų mėginio plotis.
  • Jis turi skirtingus imties dažnius.
  • Duomenų perdavimo sparta yra iki 96 kHz per 64 bitų žodžio pasirinkimo laikotarpį.
  • Interleaved stereo FIFO arba nepriklausomi dešiniojo ir kairiojo kanalo FIFO
  • Nepriklausomas Tx & Rx įjungimas.

Veikia I2S ryšio protokolas

I2S ryšio protokolas yra 3 laidų protokolas, kuris tiesiog tvarko garso duomenis per 3 eilučių nuosekliąją magistralę, apimančią SCK (nuolatinį serijos laikrodį), WS (žodžių pasirinkimą) ir SD (nuosekliuosius duomenis).



3 laidų I2S jungtis:

SCK

SCK arba Serial Clock yra pirmoji I2S protokolo eilutė, kuri taip pat žinoma kaip BCLK arba bitų laikrodžio linija, kuri naudojama duomenims gauti panašiu ciklu. Nuosekliojo laikrodžio dažnis tiesiog apibrėžiamas naudojant formulę, pvz., Dažnis = Atrankos dažnis x bitai kiekvienam kanalui x Nr. kanalų.

WS

I2S ryšio protokole WS arba žodžio pasirinkimas yra linija, kuri taip pat žinoma kaip FS (Frame Select) laidas, skiriantis dešinįjį arba kairįjį kanalą.

Jei WS = 0, naudojamas kairysis kanalas arba kanalas-1.

Jei WS = 1, tada naudojamas dešinysis kanalas arba kanalas-2.

SD

Serial Data arba SD yra paskutinis laidas, kuriuo naudingoji apkrova perduodama per 2 komplementus. Taigi, labai svarbu, kad MSB pirmiausia būtų perkeltas, nes tiek siųstuvas, tiek imtuvas gali turėti skirtingą žodžių ilgį. Taigi siųstuvas arba imtuvas turi atpažinti, kiek bitų yra perduota.

  • Jei imtuvo žodžio ilgis yra didesnis nei siųstuvo, tada žodis sutrumpinamas (LSB bitai nustatomi į nulį).
  • Jei imtuvo žodžio ilgis yra mažesnis už siųstuvo žodžio ilgį, LSB bitai ignoruojami.

The siųstuvas gali siųsti duomenis arba į Laikrodžio impulso priekinis arba galinis kraštas . Tai galima sukonfigūruoti atitinkamame lange kontrolės registrai . Bet imtuvas užfiksuoja serijinius duomenis ir WS tik priekiniame laikrodžio impulso krašte . Siųstuvas perduoda duomenis tik po vieno laikrodžio impulso, pasikeitus WS. Imtuvas naudoja WS signalą serijiniams duomenims sinchronizuoti.

I2S tinklo komponentai

Kai keli I2S komponentai yra sujungti vienas su kitu, tai vadinama I2S tinklu. Šio tinklo komponentas turi skirtingus pavadinimus ir taip pat skirtingas funkcijas. Taigi, šioje diagramoje pavaizduoti 3 skirtingi tinklai. Čia ESP NodeMCU plokštė naudojama kaip siųstuvas, o I2S garso pertraukimo plokštė naudojama kaip imtuvas. Siųstuvui ir imtuvui prijungti naudojami trys laidai: SCK, WS ir SD.

  I2S tinklo komponentai
I2S tinklo komponentai

Pirmoje diagramoje siųstuvas (Tx) yra pagrindinis, todėl jis valdo SCK (serijinis laikrodis) ir WS (žodžio pasirinkimas) eilutes.

Antroje diagramoje imtuvas yra pagrindinis. Taigi tiek SCK, tiek WS linijos prasideda nuo imtuvo, ir baigiasi siųstuvas.

Trečioje diagramoje išorinis valdiklis yra prijungtas prie tinklo mazgų, kurie veikia kaip pagrindinis įrenginys. Taigi šis įrenginys generuoja SCK ir WS.

Visų pirma, I2S tinkluose yra tik vienas pagrindinis įrenginys ir daug kitų komponentų, kurie perduoda arba priima garso duomenis.

I2S bet kuris įrenginys gali būti pagrindinis, pateikdamas laikrodžio signalą.

I2S laiko diagrama

Norėdami geriau suprasti I2S ir jo funkcijas, turime I2S ryšio protokolo laiko diagramą, parodytą žemiau. Žemiau parodyta I2S protokolo laiko schema, kurioje yra trys laidai SCK, WS ir SD.

  I2S protokolo laiko diagrama
I2S protokolo laiko diagrama

Pirmiau pateiktoje diagramoje, pirma, serijinis laikrodis turi dažnį = mėginio dažnis * bitai kiekvienam kanalui * Nr. kanalų). Žodžio pasirinkimo eilutė yra antroji eilutė, kuri keičiasi tarp „1“ dešiniajam kanalui ir „0“ kairiajam kanalui.

Trečioji eilutė yra nuosekli duomenų linija, kurioje duomenys perduodami kiekvienu laikrodžio ciklu krentančioje briaunoje, pažymėtoje taškais nuo HIGH iki LOW.

Be to, galime pastebėti, kad WS eilutė keičia vieną CLK ciklą prieš perduodant MSB, o tai suteikia imtuvui laiko išsaugoti ankstesnį žodį ir išvalyti kito žodžio įvesties registrą. MSB siunčiamas, kai keičiasi SCK po WS pakeitimų.

Kai duomenys perduodami tarp siųstuvo ir imtuvo, atsiranda sklidimo delsa, tai būtų

sklidimo delsa = (laiko skirtumas tarp išorinio laikrodžio ir imtuvo vidinio laikrodžio)+( laiko skirtumas nuo vidinio laikrodžio iki duomenų gavimo).

Siekiant sumažinti sklidimo delsą ir sinchronizuoti duomenų perdavimą tarp siųstuvo ir imtuvo, siųstuvas turi turėti laikrodžio periodą

T > tr  – Daryti prielaidą, kad T yra siųstuvo laikrodžio periodas, o tr yra minimalus siųstuvo laikrodžio periodas.

Esant aukščiau nurodytai sąlygai, jei atsižvelgsime, pavyzdžiui, a siųstuvas, kurio duomenų perdavimo sparta 2,5 MHz, tada:

tr = 360 ns

laikrodis Aukštas tHC (minimalus) >0,35 T.

laikrodis Žemas tLC (minimalus> > 0,35T.

Imtuvas kaip vergas, kurio duomenų perdavimo sparta 2,5 MHz, tada:

laikrodis Aukštas tHC (minimalus) < 0,35 T

laikrodis Žemas tLC (minimalus) < 0,35T.

nustatymo laikas tst(minimalus) < 0,20T.

I2S protokolas Arduino

Pagrindinis šio projekto tikslas – sukurti I2S theremin sąsają naudojant Arduino I2S biblioteką. Šiam projektui sukurti reikalingi komponentai; Arduino MKR Zero, Bandomoji Lenta , Perjungimo laidai, Adafruit MAX98357A, 3W, 4 omų garsiakalbis ir RobotGeek Slider.

Arduino I2S biblioteka tiesiog leidžia perduoti ir gauti skaitmeninius garso duomenis per I2S magistralę. Taigi šiuo pavyzdžiu siekiama paaiškinti, kaip panaudoti šią biblioteką I2S DAC valdyti, kad būtų atkurtas garsas, apskaičiuotas naudojant Arduino dizainą.

Šią grandinę galima prijungti kaip; Šiame pavyzdyje naudojamam I2S DAC reikia tik trijų laidų ir I2S magistralės maitinimo šaltinio. „Arduino MKRZero“ I2S jungtys yra tokios;

Serijos duomenys (SD) ant kaiščio A6;

Serijos laikrodis (SCK) ant 2 kaiščio;

Rėmelis arba žodžio pasirinkimas (FS) ant pin3;

Darbas

Iš esmės theremin turi du žingsnio ir garsumo valdiklius. Taigi, šie du parametrai yra modifikuojami perkeliant du slydimo potenciometrus, tačiau taip pat galite juos koreguoti, kad juos nuskaitytumėte. Du potenciometrai yra sujungti įtampos daliklio pavidalu, todėl judindami šiuos potenciometrus gausite reikšmes nuo 0 iki 1023. Po to šios reikšmės susietos tarp didžiausio ir mažiausio dažnio bei mažiausio ir didžiausio garsumo.

  I2S Thermin diagrama
I2S Thermin diagrama

Garsas, perduodamas I2S magistrale, yra paprasta sinusinė banga, kurios amplitudė ir dažnis keičiami pagal potenciometrų rodmenis.

Kodas

Kodas, skirtas Theremin sąsajai su Arduino MKRZero, 2 slankiklių potenciometrais ir I2S DAC, pateiktas žemiau.

#include

const int maxDažnis = 5000; //didžiausias generuojamas dažnis
const int minDažnis = 220; //minimalus generuojamas dažnis
const int maxTūris = 100; //maksimalus generuojamo dažnio tūris
const int minTimtis = 0; //min generuojamo dažnio tūris
const int sampleRate = 44100; //sugeneruoto dažnio atranka
const int wavSize = 256; //buferio dydis
trumpas sinusas [wavSize]; //buferis, kuriame saugomos sinusinės reikšmės
const int dažnisPin = A0; //pin prijungtas prie puodo, kuris nustato signalo dažnį
const int amplitudėPin = A1; //pin prijungtas prie puodo, kuris nustato signalo amplitudę
const int mygtukas = 6; //smeigtukas prijungtas prie mygtuko valdiklio  kad būtų rodomas dažnis

negaliojantis nustatymas ()
{

Serial.begin(9600); //konfigūruoti nuoseklųjį prievadą
// Inicijuoti I2S siųstuvą.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println („Nepavyko inicijuoti I2S!“);

o (1);
}

generuotiSine(); // užpildyti buferį sinusinėmis reikšmėmis
pinMode(mygtukas, INPUT_PULLUP); //Įdėkite mygtuko kaištį į įvesties ištraukimą

}
void loop() {

if (skaitmeninis skaitymas(mygtukas) == LOW)

{

float dažnis = map(analogRead(dažnioPin), 0, 1023, minDažnis, maksimalus dažnis); //žemėlapio dažnis
int amplitudė = map(analogRead(amplitudėPin), 0, 1023, minTūris, maksimalus tūris); //žemėlapio amplitudė
playWave(dažnis, 0,1, amplitudė); //Paleisti garsą
//spausdinti vertes serijoje
Serial.print('Dažnis = ');
Serial.println(dažnis);
Serial.print('Amplitudė = ');
Serial.println(amplitudė);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sinusas[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / wavSize) * i)); //100 naudojamas, kad nebūtų mažų skaičių
}
}
void playWave(plūduriuojantis dažnis, slankiosios sekundės, tarpinė amplitudė) {
// Atkurkite nurodytą bangos formos buferį
// sekundžių skaičius.
// Pirmiausia apskaičiuokite, kiek mėginių reikia atkurti, kad būtų paleistas
// norimą sekundžių skaičių.

nepasirašytos tarpinės iteracijos = sekundės * mėginio dažnis;

// Tada apskaičiuokite „greitį“, kuriuo judame per bangą
// buferis, pagrįstas grojamo tono dažniu.

float delta = (dažnis * wavSize) / float(sampleRate);

// Dabar peržiūrėkite visus pavyzdžius ir paleiskite juos, apskaičiuodami
// padėtis bangos buferyje kiekvienam laiko momentui.

for (nesigned int i = 0; i < iteracijos; ++i) {
trumpas poz = (nesigned int)(i * delta) % wavSize;
trumpas pavyzdys = amplitudė * sinusas[poz];

// Kopijuokite pavyzdį, kad jis būtų siunčiamas ir į kairįjį, ir į dešinįjį kanalus.
// Atrodo, kad tvarka yra dešinysis kanalas, kairysis kanalas, jei norite rašyti
// stereo garsas.

while (I2S.availableForWrite() < 2);
I2S.write(sample);
I2S.write(sample);

}
}

Skirtumas tarp I2C ir I2S protokolų

Skirtumas tarp I2C ir I2S protokolų yra toks.

2C

I2S

The I2C protokolas reiškia inter-IC magistralės protokolą I2S reiškia Inter-IC Sound protokolą .
Jis daugiausia naudojamas signalams paleisti tarp integrinių grandynų, esančių panašioje PCB. Jis naudojamas skaitmeniniams garso įrenginiams prijungti.
Jis naudoja dvi linijas tarp kelių pagrindinių ir vergų, tokių kaip SDA ir SCL . Jis naudoja tris eilutes WS, SCK ir SD.
Jis palaiko kelių šeimininkų ir kelių vergų. Jis palaiko vieną meistrą.
Šis protokolas palaiko CLK tempimą. Šiame protokole nėra CLK tempimo.
I2C apima papildomus paleidimo ir sustabdymo bitus. I2S neapima jokių pradžios ir pabaigos bitų.

Privalumai

The I2S magistralės pranašumai įtraukti toliau nurodytus dalykus.

  • I2S naudoja atskiras CLK ir nuosekliąsias duomenų linijas. Taigi, palyginti su asinchroninėmis sistemomis, jis turi labai paprastą imtuvų dizainą.
  • Tai vienas pagrindinis įrenginys, todėl nėra jokių problemų su duomenų sinchronizavimu.
  • Mikrofonui, pagrįstam I2S o/p, nereikia analoginės priekinės dalies, bet jis naudojamas belaidžiame mikrofone naudojant skaitmeninį siųstuvą. Naudodami tai galite turėti visiškai skaitmeninį ryšį tarp siųstuvo ir keitiklio.

Trūkumai

The I2S magistralės trūkumai įtraukti toliau nurodytus dalykus.

  • I2S nėra siūlomas duomenims perduoti kabeliais.
  • I2S nepalaikomas aukšto lygio programose.
  • Šis protokolas turi sinchronizavimo tarp trijų signalo linijų problemą, kuri pastebima esant dideliam bitų greičiui ir atrankos dažniui. Taigi ši problema daugiausia kyla dėl sklidimo vėlavimų skirtumų tarp laikrodžio linijų ir duomenų linijų.
  • I2S neapima klaidų aptikimo mechanizmo, todėl gali sukelti duomenų dekodavimo klaidų.
  • Jis daugiausia naudojamas IC ryšiui per panašią PCB.
  • I2S nėra tipiškų jungčių ir jungiamųjų kabelių, todėl skirtingi dizaineriai naudoja skirtingas jungtis.

Programos

The I2S protokolo programos įtraukti toliau nurodytus dalykus.

  • I2S naudojamas skaitmeniniams garso įrenginiams prijungti.
  • Šis protokolas plačiai naudojamas perduodant garso duomenis iš DSP arba mikrovaldiklio į garso kodeką, kad būtų galima atkurti garsą.
  • Iš pradžių I2S sąsaja naudojama kompaktinių diskų grotuvo dizaine. Dabar jį galima rasti, kur skaitmeniniai garso duomenys siunčiami tarp IC.
  • I2S naudojamas DSP, garso ADC, DAC, mikrovaldikliuose, mėginių ėmimo dažnio keitikliuose ir kt.
  • I2S yra ypač sukurtas naudoti tarp integrinių grandynų skaitmeniniams garso duomenims perduoti.
  • Šis protokolas atlieka pagrindinį vaidmenį jungiant mikrovaldiklį ir jo išorinius įrenginius, kai I2S daugiausia dėmesio skiria garso duomenų perdavimui tarp skaitmeninių garso įrenginių.

Taigi, visa tai yra apie apžvalgą I2S protokolo specifikacija kuri apima veikimą, skirtumus ir jo taikymą. I²S yra 3 laidų sinchroninis nuoseklusis protokolas naudojamas skaitmeniniam stereo garsui perduoti tarp dviejų integrinių grandynų. The I2S protokolo analizatorius yra signalo dekoderis, kuriame yra visi „DigiView“ logikos analizatoriai. Ši „DigiView“ programinė įranga tiesiog suteikia plačias visų tipų signalų paieškos, naršymo, eksportavimo, matavimo, brėžinių ir spausdinimo galimybes. Štai jums klausimas, kas yra I3C protokolas?