I2S-i protokoll: töö, erinevused ja rakendused

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Digitaalsed süsteemid ja nende heliandmete nõuded mobiiltelefonides, arvutites ja Koduautomaatika tooted on aja jooksul dramaatiliselt muutunud. Helisignaal protsessoritest või protsessoritele digitaliseerub. Neid andmeid erinevates süsteemides töödeldakse paljude seadmete kaudu, näiteks DSP-d , ADC-d, DAC-id, digitaalsed I/O liidesed jne. Nende seadmete omavaheliseks heliandmete edastamiseks on vaja standardprotokolli. Üks selline on I2S-protokoll. See on jadaliides, mille Philip Semiconductor kujundas 1986. aasta veebruaris seadmetevahelise digitaalse heliliidese jaoks. See artikkel käsitleb ülevaadet I 2S protokoll see töötab rakendustega.


Mis on I2S-protokoll?

Protokolli, mida kasutatakse digitaalsete heliandmete edastamiseks ühest seadmest teise, tuntakse kui I2S-i või Inter-IC Soundi protokolli. See protokoll edastab PCM-i (impulsskoodiga moduleeritud) heliandmeid ühelt IC-lt teisele elektroonilises seadmes. I2S mängib võtmerolli MCU-st DAC-i või võimendisse eelsalvestatud helifailide edastamisel. Seda protokolli saab kasutada ka heli digiteerimiseks mikrofoni abil. I2S-protokollides pole tihendamist, seega ei saa te esitada OGG-d, MP3-d ega muid heli tihendavaid helivorminguid, kuid saate esitada WAV-faile.



Funktsioonid

The I2S-protokolli funktsioonid sisaldama järgmist.

  • Sellel on iga proovi jaoks 8–32 andmebitti.
  • Tx & Rx FIFO katkestused.
  • See toetab DMA-d.
  • 16-bitine, 32-bitine, 48-bitine või 64-bitine sõnavaliku periood.
  • Samaaegne kahesuunaline heli voogesitus.
  • 8-bitine, 16-bitine ja 24-bitine näidislaius.
  • Sellel on erinevad valimisagedused.
  • Andmeedastuskiirus on 64-bitise sõnavaliku perioodi jooksul kuni 96 kHz.
  • Interleaved stereo-FIFO-d või sõltumatud parema ja vasaku kanali FIFO-d
  • Tx & Rx sõltumatu lubamine.

I2S-i sideprotokoll töötab

I2S sideprotokoll on 3 Wire protokoll, mis lihtsalt käsitleb heliandmeid 3-realise jadasiini kaudu, mis sisaldab SCK (Continuous Serial Clock), WS (Word Select) ja SD (jadaandmed).



I2S 3-juhtmeline ühendus:

SCK

SCK ehk Serial Clock on I2S-protokolli esimene rida, mida tuntakse ka kui BCLK või bitikella rida, mida kasutatakse andmete hankimiseks sarnases tsüklis. Jada kella sagedus on lihtsalt määratletud, kasutades valemit nagu Frequency = Sample Rate x bits iga kanali x nr. kanalitest.

WS

I2S-i sideprotokolli puhul on WS ehk sõnavalik joon, mida tuntakse ka FS (Frame Select) juhtmena, mis eraldab paremat või vasakut kanalit.

Kui WS = 0, kasutatakse vasakut kanalit või kanalit 1.

Kui WS = 1, siis kasutatakse õiget kanalit või kanalit-2.

SD

Jadaandmed ehk SD on viimane juhe, mille kaudu kasulik koormus edastatakse kahe komplemendi piires. Seega on väga oluline, et esmalt edastataks MSB, kuna nii saatja kui ka vastuvõtja võivad sisaldada erineva pikkusega sõna. Seega peab saatja või vastuvõtja tuvastama, kui palju bitte edastatakse.

  • Kui vastuvõtja sõna pikkus on suurem kui saatja, siis sõna lühendatakse (LSB bitid seatakse nulli).
  • Kui vastuvõtja sõna pikkus on väiksem kui saatja sõna pikkus, siis LSB bitte ignoreeritakse.

The saatja saab andmeid saata kas kella impulsi esi- või tagaserv . Seda saab konfigureerida vastavas kontrollregistrid . Kuid vastuvõtja lukustab jadaandmed ja WS-i ainult taktimpulsi esiservas . Saatja edastab andmeid ainult pärast ühte taktimpulssi pärast WS muutmist. Vastuvõtja kasutab jadaandmete sünkroonimiseks WS-signaali.

I2S võrgu komponendid

Kui mitu I2S-komponenti on omavahel ühendatud, nimetatakse seda I2S-võrguks. Selle võrgu komponent sisaldab erinevaid nimesid ja ka erinevaid funktsioone. Niisiis, järgmine diagramm näitab 3 erinevat võrku. Siin kasutatakse saatjana ESP NodeMCU plaati ja vastuvõtjana I2S-i helieraldusplaati. Saatja ja vastuvõtja ühendamiseks kasutatavad kolm juhtmest on SCK, WS ja SD.

  I2S-i võrgukomponendid
I2S võrgu komponendid

Esimesel diagrammil on saatja (Tx) juht, nii et see juhib SCK (jadakell) ja WS (sõnavalik) ridu.

Teisel diagrammil on vastuvõtja juht. Nii et nii SCK kui ka WS liinid algavad vastuvõtjast ja lõppevad saatjast.

Kolmandal diagrammil on võrgus olevate sõlmedega ühendatud välimine kontroller, mis töötab nagu põhiseade. Nii et see seade genereerib SCK & WS.

Eelkõige I2S-võrkudes on saadaval ainult üks peaseade ja palju muid komponente, mis edastavad või võtavad vastu heliandmeid.

I2S-is võib mis tahes seade olla juht, edastades kellasignaali.

I2S ajastusskeem

I2S-i ja selle funktsionaalsuse paremaks mõistmiseks on meil allpool näidatud I2S-i sideprotokolli ajastusskeem. Allpool on näidatud I2S-protokolli ajastusskeem, mis sisaldab kolme juhtmest SCK, WS ja SD.

  I2S-i protokolli ajastusskeem
I2S-i protokolli ajastusskeem

Ülaltoodud diagrammil on esiteks jadakellal sagedus = diskreetimissagedus * iga kanali bitid * nr. kanalitest). Sõnavalimisrida on teine ​​rida, mis vahetub parempoolse kanali puhul „1” ja vasakpoolse kanali „0” vahel.

Kolmas rida on jadaandmeliin, kus andmed edastatakse igal kellatsüklil langeval serval, mis on tähistatud punktidega vahemikus HIGH kuni LOW.

Lisaks võime märgata, et WS-rida muutub ühe CLK-tsükli jooksul enne MSB edastamist, mis annab vastuvõtjale aega varasema sõna salvestamiseks ja järgmise sõna sisendregistri tühjendamiseks. MSB saadetakse, kui SCK muutub pärast WS-i muutusi.

Kui andmeid edastatakse saatja ja vastuvõtja vahel, tekib levimisviivitus, mis oleks

levimise viivitus = (ajavahe välise ja vastuvõtja sisemise kella vahel)+( ajavahe sisemise kella ja andmete vastuvõtmise vahel).

Levimisviivituse minimeerimiseks ning andmeedastuse sünkroonimiseks saatja ja vastuvõtja vahel on nõutav, et saatjal oleks kella periood

T > tr  – Eeldada, et T on saatja taktsagedus ja tr on saatja minimaalne taktiperiood.

Ülaltoodud tingimusel, kui arvestame näiteks a saatja andmeedastuskiirusega 2,5 MHz, seejärel:

tr = 360 ns

kell Kõrge tHC (minimaalne) >0,35 T.

kell Madal tLC (minimaalne > > 0,35T.

Vastuvõtja kui ori andmeedastuskiirusega 2,5 MHz, siis:

kell Kõrge tHC (minimaalne) < 0,35 T

kell Madal tLC (minimaalne) < 0,35T.

seadistusaeg tst(minimaalne) < 0,20T.

I2S-i protokoll Arduino

Selle projekti põhieesmärk on teha Arduino I2S teeki kasutades I2S-i theremini liides. Selle projekti tegemiseks vajalikud komponendid on; Arduino MKR Zero, Leivalaud , Jumper juhtmed, Adafruit MAX98357A, 3 W, 4 oomi kõlar ja RobotGeek Slider.

Arduino I2S teek võimaldab lihtsalt edastada ja vastu võtta digitaalseid heliandmeid I2S siini kaudu. Selle näite eesmärk on selgitada, kuidas seda teeki kasutada I2S DAC-i juhtimiseks Arduino disainis arvutatud heli taasesitamiseks.

Seda vooluringi saab ühendada kui; Selles näites kasutatav I2S DAC vajab lihtsalt kolme juhtmest ja I2S siini toiteallikat. Arduino MKRZero I2S-i ühendused on järgmised:

Jadaandmed (SD) kontaktil A6;

jadakell (SCK) pin2-l;

raam või sõnavalik (FS) pin3-l;

Töötab

Põhimõtteliselt on thereminil kaks helikõrguse ja helitugevuse juhtelementi. Nii et neid kahte parameetrit muudetakse kahe liuguri potentsiomeetri liigutamisega, kuid saate neid ka lugemiseks reguleerida. Need kaks potentsiomeetrit on ühendatud pingejaguri kujul, nii et neid potentsiomeetreid liigutades saate väärtused vahemikus 0 kuni 1023. Pärast seda kaardistatakse need väärtused maksimaalse ja minimaalse sageduse ning väikseima ja suurima helitugevuse vahele.

  I2S Thermini diagramm
I2S Thermini diagramm

I2S siinil edastatav heli on lihtne siinuslaine, mille amplituudi ja sagedust muudetakse potentsiomeetrite näidu põhjal.

Kood

Allpool on toodud kood Theremini liidestamiseks Arduino MKRZero, kahe liuguriga potentsiomeetrite ja I2S DAC-iga.

#include

const int max Sagedus = 5000; //maksimaalne genereeritud sagedus
const int minSagedus = 220; //minimaalne genereeritud sagedus
const int maxVolume = 100; //genereeritud sageduse maksimaalne maht
const int minVolume = 0; //min genereeritud sageduse maht
const int sampleRate = 44100; //genereeritud sageduse proovivõtt
const int wavSize = 256; //puhvri suurus
lühike siinus[wavSize]; //puhver, kuhu siinusväärtused salvestatakse
const int sagedusPin = A0; //pin ühendatud potiga, mis määrab signaali sageduse
const int amplituudPin = A1; //kontakt, mis on ühendatud potiga, mis määrab signaali amplituudi
const int nupp = 6; //nööpnõel, mis on sageduse kuvamiseks ühendatud nupujuhtseadmega

tühine seadistus ()
{

Serial.begin(9600); //jadapordi seadistamine
// Initsialiseerige I2S saatja.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println ('I2S-i lähtestamine nurjus!');

samas (1);
}

genereeriSine(); // täitke puhver siinusväärtustega
pinMode(nupp, INPUT_PULLUP); //pane nupu tihvt sisendi tõmbamisse

}
void loop() {

if (digitalRead(button) == LOW)

{

ujumissagedus = map(analogRead(sagedusPin), 0, 1023, minSagedus, maxFrequency); //kaardi sagedus
int amplituud = map(analogRead(amplituudPin), 0, 1023, minMaht, maxVolume); //kaardi amplituud
playWave(sagedus, 0,1, amplituud); //mängi heli
//prindi väärtused jadale
Serial.print('Sagedus = ');
Serial.println(sagedus);
Serial.print('Amplituud = ');
Serial.println(amplituud);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
siinus[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / lainesuurus) * i)); //100 kasutatakse selleks, et numbrid ei oleks väikesed
}
}
void playWave(ujuksagedus, hõljuksekundid, int amplituud) {
// Esitab määratud lainekuju puhvri
// sekundite hulk.
// Esmalt arvutage, mitu näidist tuleb käivitamiseks taasesitada
// soovitud sekundite pikkuseks.

märgita interatsioonid = sekundid * sampleRate;

// Seejärel arvutage 'kiirus', millega me läbi laine liigume
// puhver, mis põhineb esitatava tooni sagedusel.

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

// Nüüd sirvige läbi kõik näidised ja esitage need, arvutades
// asukoht lainepuhvris igal ajahetkel.

for (märgita int i = 0; i < iteratsioonid; ++i) {
lühike pos = (märgita int)(i * delta) % wavSize;
lühike näidis = amplituud * siinus[pos];

// Kopeerige proov, nii et see saadetakse nii vasakusse kui ka paremasse kanalisse.
// Näib, et järjestus on parem kanal, vasak kanal, kui soovite kirjutada
// stereoheli.

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

}
}

Erinevus I2C ja I2S protokolli vahel

I2C ja I2S protokolli erinevus hõlmab järgmist.

2C

I2S

The I2C protokoll tähistab inter-IC siini protokolli I2S tähistab Inter-IC Sound protokolli .
Seda kasutatakse peamiselt signaalide käivitamiseks sarnasele PCB-le paigutatud integraallülituste vahel. Seda kasutatakse digitaalsete heliseadmete ühendamiseks.
See kasutab kahte rida mitme ülem- ja alamseadme vahel, nagu SDA ja SCL . See kasutab kolme rida WS, SCK ja SD.
See toetab mitut juhti ja mitut alamseadet. See toetab ühte meistrit.
See protokoll toetab CLK venitamist. Sellel protokollil puudub CLK venitus.
I2C sisaldab täiendavaid käivitus- ja seiskamisbitte. I2S ei sisalda ühtegi algus- ja lõppbitti.

Eelised

The I2S siini eelised sisaldama järgmist.

  • I2S kasutab eraldi CLK- ja jadaandmeliini. Seega on sellel asünkroonsete süsteemidega võrreldes väga lihtne vastuvõtja disain.
  • See on üks juhtseade, nii et andmete sünkroonimisega pole probleeme.
  • I2S o/p-l põhinev mikrofon ei vaja analoogset esiotsa, kuid seda kasutatakse juhtmeta mikrofonis digitaalse saatja abil. Seda kasutades saate saatja ja muunduri vahel luua täiesti digitaalse ühenduse.

Puudused

The I2S siini puudused sisaldama järgmist.

  • I2S-i ei soovitata kaablite kaudu andmete edastamiseks.
  • Kõrgetasemelistes rakendustes I2S-i ei toetata.
  • Sellel protokollil on kolme signaaliliini vaheline sünkroniseerimisprobleem, mida täheldatakse suure bitikiiruse ja diskreetimissageduse korral. Seega ilmneb see probleem peamiselt kellaliinide ja andmeliinide levimisviivituste varieerumise tõttu.
  • I2S ei sisalda veatuvastusmehhanismi, seega võib see andmete dekodeerimisel põhjustada vigu.
  • Seda kasutatakse peamiselt IC-devaheliseks suhtluseks sarnasel PCB-l.
  • I2S-i jaoks pole tüüpilisi pistikuid ja ühenduskaableid, seega kasutavad erinevad disainerid erinevaid pistikuid.

Rakendused

The I2S-protokolli rakendusi sisaldama järgmist.

  • I2S-i kasutatakse digitaalsete heliseadmete ühendamiseks.
  • Seda protokolli kasutatakse laialdaselt heliandmete edastamiseks DSP-st või mikrokontrollerist helikoodekisse heli esitamiseks.
  • Esialgu kasutatakse I2S-liidest CD-mängija kujunduses. Nüüd on võimalik leida koht, kus IC-de vahel saadetakse digitaalseid heliandmeid.
  • I2S-i kasutatakse DSP-des, heli-ADC-des, DAC-des, mikrokontrollerites, diskreetimissagedusmuundurites jne.
  • I2S on spetsiaalselt loodud kasutamiseks integraallülituste vahel digitaalsete heliandmete edastamiseks.
  • See protokoll mängib võtmerolli mikrokontrolleri ja selle välisseadmete ühendamisel, kui I2S keskendub heliandmete edastamisele digitaalsete heliseadmete vahel.

Seega on see kõik seotud ülevaatega I2S-protokolli spetsifikatsioon mis hõlmab tööd, erinevusi ja selle rakendusi. I²S on kolmejuhtmeline sünkroonne jadaprotokoll kasutatakse digitaalse stereoheli edastamiseks kahe integraallülituse vahel. The I2S protokolli analüsaator on signaalidekooder, mis sisaldab kõiki DigiView loogikaanalüsaatoreid. See DigiView tarkvara pakub lihtsalt laia otsingu-, navigeerimis-, ekspordi-, mõõtmis-, graafiku- ja printimisvõimalust igat tüüpi signaalidele. Siin on teile küsimus, mis on I3C protokoll?