Protocolul I2S: Funcționare, diferențe și aplicațiile sale

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





Sistemele digitale și cerințele sale de date audio în telefoane mobile, computere și Home Automation produsele s-au schimbat dramatic de-a lungul unei perioade de timp. Semnalul audio de la sau către procesoare devine digitalizat. Aceste date în diferite sisteme sunt procesate prin multe dispozitive, cum ar fi DSP-uri , ADC-uri, DAC-uri, interfețe I/O digitale etc. Pentru ca aceste dispozitive să comunice date audio între ele, este necesar un protocol standard. Un astfel de protocol este I2S. Este o interfață de magistrală serială, proiectată de Philip Semiconductor în februarie 1986 pentru interfața audio digitală între dispozitive. Acest articol discută o privire de ansamblu asupra I protocol 2S lucrează cu aplicații.


Ce este protocolul I2S?

Protocolul care este utilizat pentru a transmite date audio digitale de la un dispozitiv la altul este cunoscut sub numele de protocol I2S sau Inter-IC Sound. Acest protocol transmite date audio PCM (pulse-code modulated) de la un IC la altul într-un dispozitiv electronic. I2S joacă un rol cheie în transmiterea fișierelor audio care sunt preînregistrate de la un MCU la un DAC sau amplificator. Acest protocol poate fi utilizat și pentru a digitiza audio folosind un microfon. Nu există compresie în cadrul protocoalelor I2S, așa că nu puteți reda OGG sau MP3 sau alte formate audio care condensează sunetul, cu toate acestea, puteți reda fișiere WAV.



Caracteristici

The Caracteristicile protocolului I2S includ următoarele.

  • Are 8 până la 32 de biți de date pentru fiecare probă.
  • Tx & Rx FIFO întrerupe.
  • Suportă DMA.
  • Perioada de selectare a cuvântului pe 16 biți, 32 biți, 48 biți sau 64 biți.
  • Streaming audio bidirecțional simultan.
  • Lățimea eșantionului de 8 biți, 16 biți și 24 de biți.
  • Are rate de eșantionare diferite.
  • Rata datelor este de până la 96 kHz prin perioada de selectare a cuvântului pe 64 de biți.
  • FIFO-uri stereo intercalate sau FIFO-uri independente de canal drept și stâng
  • Activare independentă a Tx & Rx.

Funcționează protocolul de comunicare I2S

I2S protocol de comunicare este un protocol cu ​​3 fire care gestionează pur și simplu datele audio printr-o magistrală serială cu 3 linii care include SCK (Ceas serial continuu), WS (Selectare cuvânt) și SD (Date seriale).



Conexiune cu 3 fire a I2S:

SCK

SCK sau Serial Clock este prima linie a protocolului I2S, cunoscută și sub numele de BCLK sau linie de ceas de biți, care este utilizată pentru a obține date într-un ciclu similar. Frecvența ceasului serial este definită pur și simplu folosind formula ca Frecvență = Rată de eșantionare x Biți pentru fiecare canal x nr. de canale.

WS

În protocolul de comunicație I2S, WS sau selectarea cuvântului este linia cunoscută și sub denumirea de fir FS (Selectare cadru) care separă canalul drept sau stânga.

Dacă WS = 0, atunci se utilizează canalul stâng sau canalul-1.

Dacă WS = 1, atunci se utilizează canalul drept sau canalul-2.

SD

Serial Data sau SD este ultimul fir în care sarcina utilă este transmisă în 2 complemente. Deci, este foarte important ca MSB să fie mai întâi transferat, deoarece atât emițătorul, cât și receptorul pot include lungimi de cuvinte diferite. Astfel, emițătorul sau receptorul trebuie să recunoască câți biți sunt transmisi.

  • Dacă lungimea cuvântului receptorului este mai mare decât a emițătorului, atunci cuvântul este scurtat (biții LSB sunt setați la zero).
  • Dacă lungimea cuvântului receptorului este mai mică decât lungimea cuvântului emițătorului, atunci biții LSB sunt ignorați.

The transmiţător poate trimite datele fie pe marginea de avans sau marginea de urmărire a pulsului de ceas . Acest lucru poate fi configurat în corespunzătoare registre de control . Cu exceptia receptorul blochează datele seriale și WS numai pe marginea anterioară a pulsului de ceas . Transmițătorul transmite date numai după un impuls de ceas după schimbarea WS. Receptorul folosește semnalul WS pentru sincronizarea datelor seriale.

Componente de rețea I2S

Când mai multe componente I2S sunt conectate între ele, aceasta se numește o rețea I2S. Componenta acestei rețele include diferite nume și, de asemenea, diferite funcții. Deci, următoarea diagramă arată 3 rețele diferite. Aici o placă ESP NodeMCU este folosită ca transmițător și o placă de breakout audio I2S este folosită ca receptor. Cele trei fire folosite pentru a conecta transmițătorul și receptorul sunt SCK, WS și SD.

  Componente de rețea I2S
Componente de rețea I2S

În prima diagramă, transmițătorul (Tx) este principalul, așa că controlează liniile SCK (ceasul serial) și WS (selectare cuvânt).

În a doua diagramă, receptorul este maestru. Deci ambele linii SCK și WS încep de la receptor și emițătorul se termină.

În cea de-a treia diagramă, un controler exterior este conectat la nodurile din rețea care funcționează ca dispozitivul principal. Deci acest dispozitiv generează SCK & WS.

În rețelele I2S de mai sus, există un singur dispozitiv master disponibil și multe alte componente care transmit sau primesc date sonore.

În I2S, orice dispozitiv poate fi maestru prin furnizarea semnalului de ceas.

Diagrama de sincronizare I2S

Pentru o mai bună înțelegere a I2S și a funcționalității sale, avem diagrama de sincronizare a protocolului de comunicare I2S prezentată mai jos. Diagrama de timp a protocolului I2S este prezentată mai jos, care include trei fire SCK, WS și SD.

  Diagrama de sincronizare a protocolului I2S
Diagrama de sincronizare a protocolului I2S

În diagrama de mai sus, mai întâi, ceasul serial  are Frecvență = Rată de eșantionare * Biți pentru fiecare canal * nr. de canale). Linia de selectare a cuvântului este a doua linie care se schimbă între „1” pentru canalul din dreapta și „0” pentru canalul din stânga.

A treia linie este linia de date seriale în care datele sunt transmise pe fiecare ciclu de ceas pe frontul descendent notat cu puncte de la HIGH la LOW.

În plus, putem observa că linia WS variază cu un ciclu CLK înainte ca MSB să fie transmis, ceea ce oferă receptorului timp pentru stocarea cuvântului anterior și șterge registrul de intrare pentru cuvântul următor. MSB este trimis atunci când SCK se schimbă după modificările WS.

Ori de câte ori sunt transmise date între emițător și receptor, ar exista o întârziere de propagare, care ar fi

întârziere de propagare = (diferența de timp între ceasul extern și ceasul intern al receptorului)+( diferența de timp între ceasul intern și momentul recepționării datelor).

Pentru a minimiza întârzierea de propagare și pentru sincronizarea transmisiei de date între emițător și receptor, este necesar ca transmițătorul să aibă o perioadă de ceas de

T > tr  – Să presupunem că T este perioada de ceas a transmițătorului și tr este perioada minimă de ceas a emițătorului.

În condiția de mai sus dacă luăm în considerare de exemplu a transmițător  cu rata de transmisie a datelor de 2,5 MHz, apoi:

tr = 360ns

ceas THC ridicat (minimum) >0,35 T.

ceas TLC scăzut (minimum> > 0,35T.

Receptor ca slave cu viteza de transmisie a datelor de 2,5 MHz, atunci:

ceas THC ridicat (minim) < 0,35 T

ceas TLC scăzut (minim) < 0,35T.

timp de configurare tst(minim) < 0,20T.

Protocolul I2S Arduino

Obiectivul principal al acestui proiect este de a realiza o interfață I2S  theremin folosind biblioteca Arduino I2S. Componentele necesare pentru realizarea acestui proiect sunt; Arduino MKR Zero, Breadboard , fire jumper, Adafruit MAX98357A, difuzor de 3W, 4 ohmi și RobotGeek Slider.

Biblioteca Arduino I2S vă permite pur și simplu să transmiteți și să primiți date audio digitale prin magistrala I2S. Deci, acest exemplu vizează explicarea modului de utilizare a acestei biblioteci pentru a conduce un DAC I2S pentru reproducerea sunetului calculat în designul Arduino.

Acest circuit poate fi conectat ca; DAC-ul I2S utilizat în acest exemplu necesită doar trei fire, precum și o sursă de alimentare pentru magistrala I2S. Conexiunile pentru I2S pe Arduino MKRZero urmează ca;

Date seriale (SD) pe pinul A6;

Ceas serial (SCK) pe pin2;

Cadrul sau Word Select (FS) pe pin3;

Lucru

Practic, thereminul are două comenzi pentru înălțimea și volumul. Deci, acești doi parametri sunt modificați prin mișcarea a două potențiometre glisante, totuși, le puteți ajusta și pentru a le citi. Cele două potențiometre sunt conectate într-o formă de divizor de tensiune, astfel încât mișcând aceste potențiometre veți obține valori de la 0 la 1023. După aceea, aceste valori sunt mapate între frecvența maximă și minimă și cel mai mic și cel mai mare volum.

  Diagrama I2S Thermin
Diagrama I2S Thermin

Sunetul transmis pe magistrala I2S este o undă sinusoidală simplă a cărei amplitudine și frecvență sunt modificate pe baza citirii potențiometrelor.

Cod

Codul pentru interfața unui Theremin cu un Arduino MKRZero, potențiometre cu 2 glisoare și un DAC I2S este prezentat mai jos.

#include

const int maxFrequency = 5000; //frecvența maximă generată
const int minFrequency = 220; //frecvența minimă generată
const int maxVolume = 100; //volumul maxim al frecvenței generate
const int minVolum = 0; //min volum al frecvenței generate
const int sampleRate = 44100; //rata de eșantionare a frecvenței generate
const int wavSize = 256; //dimensiunea memoriei tampon
sinus scurt[wavSize]; //buffer în care sunt stocate valorile sinusului
const int frecventaPin = A0; //pin conectat la oala care determină frecvența semnalului
const int amplitudePin = A1; //pin conectat la oală care determină amplitudinea semnalului
buton const int = 6; //pin conectat la butonul de control  pentru a afișa frecvența

void setup()
{

Serial.begin(9600); //configurează portul serial
// Inițializați transmițătorul I2S.
dacă (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(„Inițializarea I2S a eșuat!”);

în timp ce (1);
}

generateSine(); // umple tamponul cu valori sinusoidale
pinMode(button, INPUT_PULLUP); //puneți pinul butonului în pullup de intrare

}
void loop() {

dacă (digitalRead(button) == LOW)

{

float frequency = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //frecvența hărții
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //amplitudinea hărții
playWave (frecvență, 0,1, amplitudine); //reda sunet
//printează valorile pe serial
Serial.print(“Frecventa = “);
Serial.println(frecvență);
Serial.print(„Amplitudine = “);
Serial.println(amplitudine);

}

}
void generateSine() {
pentru (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 este folosit pentru a nu avea numere mici
}
}
void playWave (frecvență flotantă, secunde float, amplitudine int) {
// Redați bufferul de formă de undă furnizat pentru cel specificat
// cantitate de secunde.
// Mai întâi calculează câte mostre trebuie redate pentru a rula
// pentru cantitatea dorită de secunde.

unsigned int iterații = secunde * sampleRate;

// Apoi calculați „viteza” cu care ne deplasăm prin val
// tampon în funcție de frecvența sunetului redat.

float delta = (frecvență * wavSize) / float(sampleRate);

// Acum treceți în buclă prin toate mostrele și redați-le, calculând
// poziție în bufferul de unde pentru fiecare moment de timp.

pentru (unsigned int i = 0; i < iterații; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
eșantion scurtă = amplitudine * sinus[poz];

// Duplicați eșantionul, astfel încât să fie trimis atât la canalul stâng cât și la cel drept.
// Se pare că ordinea este canalul din dreapta, canalul din stânga dacă doriți să scrieți
// sunet stereo.

în timp ce (I2S.availableForWrite() < 2);
I2S.write(eșantion);
I2S.write(eșantion);

}
}

Diferența dintre protocolul I2C și I2S

Diferența dintre protocolul I2C și I2S include următoarele.

2C

I2S

The Protocolul I2C reprezintă protocolul de magistrală inter-IC I2S înseamnă protocol Inter-IC Sound .
Este folosit în principal pentru a rula semnale între circuite integrate plasate pe un PCB similar. Este utilizat pentru conectarea dispozitivelor audio digitale.
Folosește două linii între mai mulți master și slave, cum ar fi SDA și SCL . Utilizează trei linii WS, SCK  și SD.
Suportă multi-master și multi-slave. Acceptă un singur master.
Acest protocol acceptă întinderea CLK. Acest protocol nu are CLK stretching.
I2C include biți suplimentari de pornire și oprire. I2S nu include niciun bit de pornire și oprire.

Avantaje

The avantajele magistralei I2S includ următoarele.

  • I2S utilizează linii separate de date CLK și seriale. Deci are un design de receptor foarte simplu în comparație cu sistemele asincrone.
  • Este un singur dispozitiv principal, așa că nu există nicio problemă cu sincronizarea datelor.
  • Microfonul bazat pe I2S o/p nu are nevoie de un front-end analogic, dar este utilizat într-un microfon fără fir folosind un transmițător digital. Folosind aceasta, puteți avea o conexiune total digitală între transmițător și traductor.

Dezavantaje

The dezavantajele magistralei I2S includ următoarele.

  • I2S nu este propus pentru transferul de date prin cabluri.
  • I2S nu este acceptat în aplicațiile de nivel înalt.
  • Acest protocol are o problemă de sincronizare între trei linii de semnal, care este observată la o rată de biți mare și o frecvență de eșantionare. Deci, această problemă apare în principal din cauza variației întârzierilor de propagare între liniile de ceas și liniile de date.
  • I2S nu include un mecanism de detectare a erorilor, astfel încât poate provoca erori în decodificarea datelor.
  • Este utilizat în principal pentru comunicarea inter-IC pe un PCB similar.
  • Nu există conectori și cabluri de interconectare tipice pentru I2S, așa că diferiți designeri folosesc conectori diferiți.

Aplicații

The aplicații ale protocolului I2S includ următoarele.

  • I2S este utilizat pentru conectarea dispozitivelor audio digitale.
  • Acest protocol este utilizat pe scară largă în transferul de date audio de la un DSP sau un microcontroler la un codec audio pentru a reda audio.
  • Inițial, interfața I2S este utilizată în cadrul modelelor de CD player. Acum, poate fi găsit unde sunt trimise date audio digitale între circuite integrate.
  • I2S este utilizat în DSP-uri, ADC-uri audio, DAC-uri, microcontrolere, convertoare de frecvență de eșantionare etc.
  • I2S este special conceput pentru a fi utilizat între circuitele integrate pentru comunicarea datelor audio digitale.
  • Acest protocol joacă un rol cheie în conectarea microcontrolerului și a dispozitivelor periferice ale acestuia atunci când I2S se concentrează pe transmisia de date audio între dispozitivele audio digitale.

Astfel, este vorba despre o privire de ansamblu asupra Specificația protocolului I2S care include funcționarea, diferențele și aplicațiile sale. I²S este un protocol serial sincron cu 3 fire folosit pentru a transfera audio digital stereo între două circuite integrate. The Analizor de protocol I2S este un decodor de semnal care include toate analizoarele DigiView Logic. Acest software DigiView oferă pur și simplu capabilități largi de căutare, navigare, export, măsurare, trasare și imprimare pentru toate tipurile de semnale. Iată o întrebare pentru tine, ce este protocolul I3C?