I2S-protokol: Arbejde, forskelle og dens applikationer

Prøv Vores Instrument Til At Fjerne Problemer





Digitale systemer og dets lyddatakrav inden for mobiltelefoner, computere og Home Automation produkter har ændret sig dramatisk over en periode. Lydsignalet fra eller til processorerne bliver digitaliseret. Disse data i forskellige systemer behandles gennem mange enheder som f.eks DSP'er , ADC'er, DAC'er, digitale I/O-grænseflader osv. For at disse enheder kan kommunikere lyddata med hinanden kræves en standardprotokol. En sådan er I2S-protokollen. Det er en seriel bus-interface, designet af Philip Semiconductor i februar 1986 til digital audio-interface mellem enhederne. Denne artikel diskuterer en oversigt over I 2S protokol det arbejder med applikationer.


Hvad er I2S-protokol?

Protokollen, der bruges til at overføre digitale lyddata fra en enhed til en anden enhed, er kendt som I2S eller Inter-IC Sound-protokol. Denne protokol transmitterer PCM (pulskodemoduleret) lyddata fra en IC til en anden i en elektronisk enhed. I2S spiller en nøglerolle i transmission af lydfiler, som er forudindspillet fra en MCU til en DAC eller forstærker. Denne protokol kan også bruges til at digitalisere lyd ved hjælp af en mikrofon. Der er ingen komprimering inden for I2S-protokoller, så du kan ikke afspille OGG eller MP3 eller andre lydformater, der kondenserer lyden, men du kan afspille WAV-filer.



Funktioner

Det I2S protokol funktioner omfatte følgende.

  • Den har 8 til 32 databits for hver prøve.
  • Tx & Rx FIFO afbryder.
  • Det understøtter DMA.
  • 16-bit, 32-bit, 48-bit eller 64-bit ordvalgsperiode.
  • Samtidig bi-direktionel audiostreaming.
  • 8-bit, 16-bit og 24-bit prøvebredde.
  • Det har forskellige sample rates.
  • Datahastigheden er op til 96 kHz gennem 64-bit ordvalgsperioden.
  • Interleaved stereo FIFO'er eller uafhængige højre og venstre kanal FIFO'er
  • Uafhængig aktivering af Tx & Rx.

I2S kommunikationsprotokol fungerer

I2S kommunikationsprotokol er en 3-leder protokol, der simpelthen håndterer lyddata gennem en 3-line seriel bus, som inkluderer SCK (Continuous Serial Clock), WS (Word Select) & SD (Serial Data).



3-leder forbindelse af I2S:

SCK

SCK eller Serial Clock er den første linje i I2S-protokollen, som også er kendt som BCLK eller bit clock line, som bruges til at opnå dataene på en lignende cyklus. Den serielle clock-frekvens er ganske enkelt defineret ved at bruge formlen som Frequency = Sample Rate x Bits for hver kanal x no. af kanaler.

WS

I I2S kommunikationsprotokollen er WS eller ordvalg den linje, der også er kendt som FS (Frame Select) ledning, der adskiller højre eller venstre kanal.

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

Hvis WS = 1, bruges den højre kanal eller kanal-2.

SD

De serielle data eller SD er den sidste ledning, hvor nyttelasten overføres inden for 2 komplementer. Så det er meget vigtigt, at MSB først overføres, fordi både sender og modtager kan indeholde forskellige ordlængder. Således skal senderen eller modtageren genkende, hvor mange bits der transmitteres.

  • Hvis ordlængden på modtageren er større end senderen, forkortes ordet (LSB-bits er sat til nul).
  • Hvis ordlængden af ​​modtageren er mindre end ordlængden af ​​senderen, ignoreres LSB-bittene.

Det sender kan sende data enten på forkant eller bagkant af urpulsen . Dette kan konfigureres i den tilsvarende kontrolregistre . Men modtageren låser de serielle data og WS kun på forkanten af ​​urimpulsen . Senderen transmitterer kun data efter én clock-impuls efter ændring i WS. Modtageren bruger WS-signalet til synkronisering af de serielle data.

I2S netværkskomponenter

Når flere I2S-komponenter er forbundet med hinanden, kaldes dette et I2S-netværk. Komponenten i dette netværk inkluderer forskellige navne og også forskellige funktioner. Så det følgende diagram viser 3 forskellige netværk. Her bruges et ESP NodeMCU board som sender og et I2S audio breakout board bruges som modtager. De tre ledninger, der bruges til at forbinde senderen og modtageren, er SCK, WS & SD.

  I2S netværkskomponenter
I2S netværkskomponenter

I det første diagram er senderen (Tx) masteren, så den styrer linjerne SCK (serielt ur) og WS (ordvalg).

I det andet diagram er modtageren masteren. Så både SCK & WS linjer starter fra modtageren & senderen slutter.

I det tredje diagram er en ekstern controller forbundet til noderne i netværket, som fungerer som masterenheden. Så denne enhed genererer SCK & WS.

I de ovennævnte I2S-netværk er der kun en enkelt masterenhed tilgængelig og mange andre komponenter, der transmitterer eller modtager lyddata.

I I2S kan enhver enhed være master ved at levere ursignalet.

I2S tidsdiagram

For en bedre forståelse af I2S og dets funktionalitet har vi I2S kommunikationsprotokol 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 ovenstående diagram har det serielle ur først en Frequency = Sample Rate * Bits for hver kanal * nr. af kanaler). Ordet vælg linje er den anden linje, der skifter mellem '1' for højre kanal og '0' for venstre kanal.

Den tredje linje er den serielle datalinje, hvor dataene transmitteres på hver clock-cyklus på den faldende flanke angivet med prikker fra HØJ til LAV.

Derudover kan vi bemærke, at WS-linjen varierer en CLK-cyklus, før MSB'en sendes, hvilket giver modtageren tid til at gemme det tidligere ord og rydde indgangsregistret for det næste ord. MSB'en sendes, når SCK ændres efter WS ændringer.

Når en data transmitteres mellem senderen og modtageren, vil der være en udbredelsesforsinkelse, som ville være

udbredelsesforsinkelse = (tidsforskel mellem det eksterne ur og det interne ur på modtageren )+( tidsforskel mellem det interne ur til hvornår data modtages).

For at minimere udbredelsesforsinkelsen og for synkronisering af datatransmissionen mellem sender og modtager  kræves det, at senderen har en klokkeperiode på  

T > tr  – At antage, at T er clock-perioden for senderen og tr er minimum clock-periode for senderen.

Under ovenstående betingelse, hvis vi f.eks. betragter en sender  med dataoverførselshastigheden 2,5 MHz, så:

tr = 360ns

ur Høj tHC (minimum) >0,35 T.

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

Modtager som slave med dataoverførselshastigheden 2,5 MHz så:

ur Høj tHC (minimum) < 0,35 T

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

opsætningstid tst(minimum) < 0,20T.

I2S Protocol Arduino

Hovedformålet med dette projekt er at lave en I2S  theremin-grænseflade ved hjælp af Arduino I2S-biblioteket. De nødvendige komponenter for at lave dette projekt er; Arduino MKR Zero, Brødbræt , Jumper ledninger, Adafruit MAX98357A, 3W, 4 ohm højttaler og RobotGeek Slider.

Arduino I2S-biblioteket giver dig simpelthen mulighed for at sende og modtage digitale lyddata over I2S-bussen. Så dette eksempel har til formål at forklare, hvordan man bruger dette bibliotek til at drive en I2S DAC til gengivelse af lyd beregnet i Arduino-designet.

Dette kredsløb kan tilsluttes som; Den I2S DAC, der bruges i dette eksempel, kræver blot tre ledninger samt en strømforsyning til I2S-bussen. Forbindelserne til I2S på Arduino MKRZero følger som;

Seriel data (SD) på ben A6;

Seriel ur (SCK) på pin2;

Rammen eller Word Select (FS) på pin3;

Arbejder

Grundlæggende har theremin to kontrolknapper pitch og volume. Så disse to parametre ændres ved at flytte to glidepotentiometre, men du kan også justere dem for at læse dem. De to potentiometre er forbundet i en spændingsdeler form, så ved at flytte disse potentiometre vil du få værdier fra 0 til 1023. Herefter er disse værdier kortlagt mellem maksimum og minimum frekvens og mindste og højeste volumen.

  I2S Thermin Diagram
I2S Thermin Diagram

Lyden, der transmitteres på I2S-bussen, er en simpel sinusbølge, hvis amplitude og frekvens ændres baseret på aflæsningen af ​​potentiometrene.

Kode

Koden til at forbinde en Theremin med en Arduino MKRZero, 2-skyder potentiometre og en I2S DAC er givet nedenfor.

#include

const int maxFrequency = 5000; //maksimal genereret frekvens
const int minFrequency = 220; //minimum genereret frekvens
const int maxVolume = 100; //max volumen af ​​den genererede frekvens
const int minVolume = 0; //min volumen af ​​den genererede frekvens
const int sampleRate = 44100; //sampler af den genererede frekvens
const int wavSize = 256; //bufferstørrelse
kort sinus[wavStørrelse]; //buffer, hvori sinusværdierne er gemt
const int frequencyPin = A0; //pin tilsluttet til puljen, som bestemmer frekvensen af ​​signalet
const int amplitudePin = A1; //pin tilsluttet til puljen, som bestemmer amplituden af ​​signalet
const int knap = 6; //pin tilsluttet til knapkontrollen  for at vise frekvensen

ugyldig opsætning()
{

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

mens (1);
}

generereSine(); // fyld buffer med sinusværdier
pinMode(knap, INPUT_PULLUP); //sæt knappenålen i input pullup

}
void loop() {

if (digitalRead(knap) == LAV)

{

float frekvens = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //kortfrekvens
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //kort amplitude
playWave(frekvens, 0,1, amplitude); //Afspil lyd
//udskriv værdier på seriel
Serial.print(“Frekvens = “);
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 bruges til ikke at have små tal
}
}
void playWave(float frekvens, float sekunder, int amplitude) {
// Afspil den medfølgende bølgeformbuffer for den specificerede
// antal sekunder.
// Beregn først, hvor mange prøver der skal afspilles for at køre
// i det ønskede antal sekunder.

unsigned int iterations = sekunder * sampleRate;

// Beregn derefter ’hastigheden’, hvormed vi bevæger os gennem bølgen
// buffer baseret på frekvensen af ​​den tone, der spilles.

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

// Gå nu gennem alle prøverne og afspil dem, udregn
// position inden for bølgebufferen for hvert tidspunkt i tiden.

for (usigneret int i = 0; i < iterationer; ++i) {
kort pos = (usigneret int)(i * delta) % wavSize;
kort prøve = amplitude * sinus[pos];

// Dupliker prøven, så den sendes til både venstre og højre kanal.
// Det ser ud til, at rækkefølgen er højre kanal, venstre kanal, hvis du vil skrive
// stereolyd.

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

}
}

Forskellen mellem I2C og I2S Protocol

Forskellen mellem I2C og I2S Protocol inkluderer følgende.

2C

I2S

Det I2C protokol står for inter-IC bus protokol I2S står for Inter-IC Sound protocol .
Det bruges hovedsageligt til at køre signaler blandt integrerede kredsløb placeret på et lignende printkort. Den bruges til tilslutning af digitale lydenheder.
Den bruger to linjer mellem flere mastere og slaver som SDA & SCL . Den bruger tre linjer WS, SCK og SD.
Det understøtter multi-master og multi-slave. Det understøtter en enkelt master.
Denne protokol understøtter CLK-strækning. Denne protokol har ikke CLK-strækning.
I2C inkluderer ekstra overhead-start- og stopbits. I2S inkluderer ingen start- og stopbits.

Fordele

Det fordelene ved I2S-bussen omfatte følgende.

  • I2S bruger separate CLK og serielle datalinjer. Så det har meget enkle modtagerdesign sammenlignet med asynkrone systemer.
  • Det er en enkelt masterenhed, så der er ingen problemer med datasynkronisering.
  • Mikrofonen baseret på I2S o/p behøver ikke en analog frontend, men bruges i en trådløs mikrofon ved at bruge en digital sender. Ved at bruge dette kan du få en fuldstændig digital forbindelse mellem senderen og transduceren.

Ulemper

Det ulemper ved I2S-bussen omfatte følgende.

  • I2S foreslås ikke til overførsel af data via kabler.
  • I2S understøttes ikke i applikationer på højt niveau.
  • Denne protokol har et synkroniseringsproblem mellem tre signallinjer, som bemærkes ved høj bithastighed og samplingsfrekvens. Så dette problem opstår hovedsageligt på grund af variationen i udbredelsesforsinkelser blandt clock-linjer og datalinjer.
  • I2S inkluderer ikke en fejldetektionsmekanisme, så det kan forårsage fejl inden for dataafkodning.
  • Det bruges hovedsageligt til inter-IC-kommunikation på et lignende printkort.
  • Der er ingen typiske stik og forbindelseskabler til I2S, så forskellige designere bruger forskellige stik.

Ansøgninger

Det applikationer af I2S-protokollen omfatte følgende.

  • I2S bruges til tilslutning af digitale lydenheder.
  • Denne protokol bruges i vid udstrækning til at overføre lyddata fra en DSP eller mikrocontroller til et audio-codec for at afspille lyd.
  • I første omgang bruges I2S-grænsefladen i CD-afspillerdesigns. Nu kan den findes, hvor digitale lyddata sendes mellem IC'er.
  • I2S bruges i DSP'er, audio ADC'er, DAC'er, mikrocontrollere, sample rate konvertere osv.
  • I2S er specielt designet til brug mellem integrerede kredsløb til kommunikation af digitale lyddata.
  • Denne protokol spiller en nøglerolle i forbindelse med tilslutning af mikrocontrolleren og dens perifere enheder, når I2S fokuserer på lyddatatransmissionen mellem digitale lydenheder.

Det handler altså om et overblik over I2S protokol specifikation som omfatter arbejde, forskelle og dets applikationer. I²S er en 3-leder synkron seriel protokol bruges til at overføre digital stereolyd mellem to integrerede kredsløb. Det I2S Protocol Analyzer er en signaldekoder, der inkluderer alle DigiView Logic Analyzere. Denne DigiView-software giver ganske enkelt bred søgning, navigation, eksport, måling, plot og udskrivning til alle typer signaler. Her er et spørgsmål til dig, hvad er I3C-protokollen?