I2S-protokoll: Arbeid, forskjeller og applikasjoner

Prøv Instrumentet Vårt For Å Eliminere Problemer





Digitale systemer og dets lyddatakrav innen mobile håndsett, datamaskiner og Hjemmeautomatisering produktene har endret seg dramatisk over en periode. Lydsignalet fra eller til prosessorene blir digitalisert. Disse dataene i forskjellige systemer behandles gjennom mange enheter som DSP-er , ADC-er, DAC-er, digitale I/O-grensesnitt osv. For at disse enhetene skal kunne kommunisere lyddata med hverandre, kreves det en standardprotokoll. En slik er I2S-protokollen. Det er et serielt bussgrensesnitt, designet av Philip Semiconductor i februar 1986 for digitalt lydgrensesnitt mellom enhetene. Denne artikkelen diskuterer en oversikt over I 2S protokoll det jobber med applikasjoner.


Hva er I2S-protokollen?

Protokollen som brukes til å overføre digitale lyddata fra en enhet til en annen enhet er kjent som I2S eller Inter-IC Sound-protokollen. Denne protokollen overfører PCM (pulskodemodulert) lyddata fra en IC til en annen i en elektronisk enhet. I2S spiller en nøkkelrolle i overføring av lydfiler som er forhåndsinnspilt fra en MCU til en DAC eller forsterker. Denne protokollen kan også brukes til å digitalisere lyd ved hjelp av en mikrofon. Det er ingen komprimering innenfor I2S-protokoller, så du kan ikke spille OGG eller MP3 eller andre lydformater som kondenserer lyden, men du kan spille av WAV-filer.



Funksjoner

De I2S-protokollfunksjoner Inkluder følgende.

  • Den har 8 til 32 databiter for hver prøve.
  • Tx & Rx FIFO avbryter.
  • Den støtter DMA.
  • 16-biters, 32-biters, 48-biters eller 64-biters ordvalgperiode.
  • Samtidig toveis lydstrømming.
  • 8-biters, 16-biters og 24-biters prøvebredde.
  • Den har forskjellige samplingsfrekvenser.
  • Datahastigheten er opptil 96 kHz gjennom den 64-biters ordvalgperioden.
  • Interleaved stereo FIFOer eller uavhengige høyre og venstre kanal FIFOer
  • Uavhengig aktivering av Tx & Rx.

I2S kommunikasjonsprotokoll fungerer

I2S kommunikasjonsprotokoll er en 3-trådsprotokoll som ganske enkelt håndterer lyddata gjennom en 3-linjers seriell buss som inkluderer SCK (Continuous Serial Clock), WS (Word Select) & SD (Serial Data).



3-leder tilkobling av I2S:

SCK

SCK eller Serial Clock er den første linjen i I2S-protokollen som også er kjent som BCLK eller bitklokkelinje som brukes til å hente dataene på en lignende syklus. Den serielle klokkefrekvensen er ganske enkelt definert ved å bruke formelen som Frekvens = Sample Rate x Bits for hver kanal x no. av kanaler.

WS

I I2S-kommunikasjonsprotokollen er WS eller ordvalg linjen som også er kjent som FS (Frame Select)-ledningen som skiller høyre eller venstre kanal.

Hvis WS = 0, brukes venstre kanal eller kanal-1.

Hvis WS = 1, brukes høyre kanal eller kanal-2.

SD

Seriedata eller SD er den siste ledningen der nyttelasten overføres innen 2 komplementer. Så det er veldig viktig at MSB først overføres, fordi både sender og mottaker kan inneholde forskjellige ordlengder. Dermed må senderen eller mottakeren gjenkjenne hvor mange biter som sendes.

  • Hvis ordlengden til mottakeren er større enn senderen, blir ordet forkortet (LSB-biter er satt til null).
  • Hvis ordlengden til mottakeren er mindre enn ordlengden til senderen, ignoreres LSB-bitene.

De sender kan sende dataene enten på forkant eller bakkant av klokkepulsen . Dette kan konfigureres i den tilsvarende kontrollregistre . Men mottakeren låser seriedata og WS bare på forkanten av klokkepulsen . Senderen sender data kun etter én klokkepuls etter endring i WS. Mottakeren bruker WS-signalet for synkronisering av seriedata.

I2S nettverkskomponenter

Når flere I2S-komponenter er koblet til hverandre, kalles dette et I2S-nettverk. Komponenten i dette nettverket inkluderer forskjellige navn og også forskjellige funksjoner. Så, følgende diagram viser 3 forskjellige nettverk. Her brukes et ESP NodeMCU-kort som sender og et I2S audio breakout-kort som mottaker. De tre ledningene som brukes til å koble sammen sender og mottaker er SCK, WS & SD.

  I2S nettverkskomponenter
I2S nettverkskomponenter

I det første diagrammet er senderen (Tx) masteren, så den kontrollerer linjene SCK (seriell klokke) og WS (ordvalg).

I det andre diagrammet er mottakeren masteren. Så både SCK- og WS-linjene starter fra mottakeren og senderen slutter.

I det tredje diagrammet er en ekstern kontroller koblet til nodene i nettverket som fungerer som hovedenheten. Så denne enheten genererer SCK & WS.

I de over alle I2S-nettverkene er det bare en enkelt masterenhet tilgjengelig og mange andre komponenter som sender eller mottar lyddata.

I I2S kan enhver enhet være master ved å gi klokkesignalet.

I2S tidsdiagram

For en bedre forståelse av I2S og dens funksjonalitet, har vi I2S kommunikasjonsprotokoll timing diagram vist nedenfor. Tidsdiagrammet for I2S-protokollen er vist nedenfor som inkluderer tre ledninger SCK, WS & SD.

  I2S Protocol Timing Diagram
I2S Protocol Timing Diagram

I diagrammet ovenfor har den serielle klokken først en Frequency = Sample Rate * Bits for hver kanal * No. av kanaler). Ordet velgerlinje er den andre linjen som veksler mellom '1' for høyre kanal og '0' for venstre kanal.

Den tredje linjen er den serielle datalinjen hvor dataene overføres på hver klokkesyklus på den fallende flanken angitt med prikker fra HØY til LAV.

I tillegg kan vi legge merke til at WS-linjen varierer en CLK-syklus før MSB sendes, noe som gir mottakeren tid til å lagre det tidligere ordet og slette inngangsregisteret for neste ord. MSB sendes når SCK endres etter WS endringer.

Hver gang en data overføres mellom senderen og mottakeren vil det oppstå en forplantningsforsinkelse  som vil være

forplantningsforsinkelse = (tidsforskjell mellom den eksterne klokken og den interne klokken til mottakeren )+( tidsforskjellen mellom den interne klokken til når data mottas).

For å minimere forplantningsforsinkelsen og for synkronisering av dataoverføringen mellom senderen og mottakeren kreves det at senderen har en klokkeperiode på  

T > tr  – Å anta at T er klokkeperioden til senderen og tr er minimumsklokkeperioden til senderen.

Under ovenstående betingelser hvis vi vurderer for eksempel en sender  med dataoverføringshastigheten 2,5 MHz, så:

tr = 360ns

klokke Høy tHC (minimum) >0,35 T.

klokke Lav tLC (minimum> > 0,35T.

Mottaker som slave med dataoverføringshastigheten 2,5 MHz da:

klokke Høy tHC (minimum) < 0,35 T

klokke Lav tLC (minimum) < 0,35T.

oppsettstid tst(minimum) < 0,20T.

I2S-protokoll Arduino

Hovedmålet med dette prosjektet er å lage et I2S  theremin-grensesnitt ved å bruke Arduino I2S-biblioteket. De nødvendige komponentene for å lage dette prosjektet er; Arduino MKR Zero, Brødbrett , Jumper ledninger, Adafruit MAX98357A, 3W, 4 ohm høyttaler og RobotGeek Slider.

Arduino I2S-biblioteket lar deg ganske enkelt overføre og motta digitale lyddata over I2S-bussen. Så dette eksemplet tar sikte på å forklare hvordan du bruker dette biblioteket til å drive en I2S DAC for å gjengi lyd beregnet i Arduino-designen.

Denne kretsen kan kobles til som; I2S DAC-en som brukes i dette eksemplet krever bare tre ledninger samt en strømforsyning for I2S-bussen. Tilkoblingene for I2S på Arduino MKRZero følger som;

Seriedata (SD) på pinne A6;

Seriell klokke (SCK) på pin2;

Rammen eller Word Select (FS) på pin3;

Jobber

I utgangspunktet har theremin to kontroller tonehøyde og volum. Så disse to parametrene endres ved å flytte to glidepotensiometre, men du kan også justere dem for å lese dem. De to potensiometrene er koblet sammen i en spenningsdeler form, så ved å flytte disse potensiometrene vil du få verdier fra 0 til 1023. Etter det blir disse verdiene kartlagt mellom maksimum og minimum frekvens og minste og høyeste volum.

  I2S Thermin-diagram
I2S Thermin-diagram

Lyden som sendes på I2S-bussen er en enkel sinusbølge hvis amplitude og frekvens er modifisert basert på avlesningen av potensiometrene.

Kode

Koden for å koble en Theremin med en Arduino MKRZero, 2-skyvepotensiometre og en I2S DAC er gitt nedenfor.

#include

const int maxFrequency = 5000; //maksimal generert frekvens
const int minFrequency = 220; //minste genererte frekvens
const int maxVolum = 100; //maks volum av den genererte frekvensen
const int minVolum = 0; //min volum av den genererte frekvensen
const int sampleRate = 44100; //sample av den genererte frekvensen
const int wavSize = 256; //buffer størrelse
kort sinus[wavSize]; //buffer der sinusverdiene er lagret
const int frequencyPin = A0; //pin koblet til potten som bestemmer frekvensen på signalet
const int amplitudePin = A1; //pin koblet til potten som bestemmer amplituden til signalet
const int-knapp = 6; //pin koblet til knappekontrollen  for å vise frekvensen

ugyldig oppsett()
{

Serial.begin(9600); //konfigurer den serielle porten
// Initialiser I2S-senderen.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(“Kunne ikke initialisere I2S!”);

mens (1);
}

generereSine(); // fyll buffer med sinusverdier
pinMode(knapp, INPUT_PULLUP); //sett knappenålen i input pullup

}
void loop() {

if (digitalRead(knapp) == LAV)

{

flytefrekvens = map(analogRead(frekvensPin), 0, 1023, minFrequency, maxFrequency); //kartfrekvens
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolum, maxVolume); //kartamplitude
playWave(frekvens, 0,1, amplitude); //spill lyd
//skriv ut verdier på seriell
Serial.print(“Frequency = “);
Serial.println(frekvens);
Serial.print(“Amplitude = “);
Serial.println(amplitude);

}

}
void generSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 brukes for å ikke ha små tall
}
}
void playWave(flytefrekvens, flytesekunder, int amplitude) {
// Spill av den angitte bølgeformbufferen for den spesifiserte
// antall sekunder.
// Beregn først hvor mange prøver som må spilles av for å kjøre
// i ønsket antall sekunder.

usignerte int iterasjoner = sekunder * sampleRate;

// Regn deretter ut 'hastigheten' vi beveger oss gjennom bølgen med
// buffer basert på frekvensen til tonen som spilles.

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

// Gå nå gjennom alle prøvene og spill dem, beregne
// posisjon innenfor bølgebufferen for hvert øyeblikk i tid.

for (usignert int i = 0; i < iterasjoner; ++i) {
kort pos = (usignert int)(i * delta) % wavSize;
kort eksempel = amplitude * sinus[pos];

// Dupliser prøven slik at den sendes til både venstre og høyre kanal.
// Det ser ut til at rekkefølgen er høyre kanal, venstre kanal hvis du vil skrive
// stereolyd.

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

}
}

Forskjellen mellom I2C og I2S Protocol

Forskjellen mellom I2C og I2S Protocol inkluderer følgende.

2C

I2S

De I2C-protokoll står for inter-IC-bussprotokoll I2S står for Inter-IC Sound protocol .
Den brukes hovedsakelig til å kjøre signaler blant integrerte kretser plassert på en lignende PCB. Den brukes til å koble til digitale lydenheter.
Den bruker to linjer mellom flere mastere og slaver som SDA og SCL . Den bruker tre linjer WS, SCK og SD.
Den støtter multi-master og multi-slave. Den støtter en enkelt master.
Denne protokollen støtter CLK-strekking. Denne protokollen har ikke CLK-strekking.
I2C inkluderer ekstra overhead start- og stoppbits. I2S inkluderer ingen start- og stoppbits.

Fordeler

De fordelene med I2S-bussen Inkluder følgende.

  • I2S bruker separate CLK og serielle datalinjer. Så den har veldig enkle mottakerdesign sammenlignet med asynkrone systemer.
  • Det er en enkelt hovedenhet, så det er ingen problemer med datasynkronisering.
  • Mikrofonen basert på I2S o/p trenger ikke en analog frontend, men brukes i en trådløs mikrofon ved å bruke en digital sender. Ved å bruke dette kan du få en helt digital forbindelse mellom sender og transduser.

Ulemper

De ulemper med I2S-bussen Inkluder følgende.

  • I2S er ikke foreslått for overføring av data gjennom kabler.
  • I2S støttes ikke i høynivåapplikasjoner.
  • Denne protokollen har et synkroniseringsproblem mellom tre signallinjer som blir lagt merke til ved høy bithastighet og samplingsfrekvens. Så dette problemet oppstår hovedsakelig på grunn av variasjonen av forplantningsforsinkelser mellom klokkelinjer og datalinjer.
  • I2S inkluderer ikke en feildeteksjonsmekanisme, så det kan forårsake feil i datadekoding.
  • Den brukes hovedsakelig for inter-IC-kommunikasjon på en lignende PCB.
  • Det er ingen typiske kontakter og sammenkoblingskabler for I2S, så forskjellige designere bruker forskjellige kontakter.

applikasjoner

De applikasjoner av I2S-protokollen Inkluder følgende.

  • I2S brukes til å koble til digitale lydenheter.
  • Denne protokollen er mye brukt til å overføre lyddata fra en DSP eller mikrokontroller til en lydkodek for å spille av lyd.
  • I utgangspunktet brukes I2S-grensesnittet i CD-spillerdesign. Nå kan den bli funnet hvor digitale lyddata sendes mellom IC-er.
  • I2S brukes i DSP-er, lyd-ADC-er, DAC-er, mikrokontrollere, samplingsfrekvensomformere, etc.
  • I2S er spesielt designet for bruk mellom integrerte kretser for å kommunisere digitale lyddata.
  • Denne protokollen spiller en nøkkelrolle i å koble til mikrokontrolleren og dens perifere enheter når I2S fokuserer på lyddataoverføring mellom digitale lydenheter.

Altså handler dette om en oversikt over I2S-protokollspesifikasjon som inkluderer arbeid, forskjeller og dets applikasjoner. I²S er en 3-leder synkron seriell protokoll brukes til å overføre digital stereolyd mellom to integrerte kretser. De I2S Protocol Analyzer er en signaldekoder som inkluderer alle DigiView Logic Analyzers. Denne DigiView-programvaren gir ganske enkelt brede søk, navigasjon, eksport, måling, plott og utskriftsmuligheter for alle typer signaler. Her er et spørsmål til deg, hva er I3C-protokollen?