I2S-protokoll: Arbete, skillnader och dess tillämpningar

Prova Vårt Instrument För Att Eliminera Problem





Digitala system och dess ljuddatakrav inom mobila telefoner, datorer och Hemautomation produkter har dramatiskt förändrats under en tidsperiod. Ljudsignalen från eller till processorerna håller på att digitaliseras. Dessa data i olika system bearbetas genom många enheter som DSP:er , ADC, DAC, Digital I/O-gränssnitt, etc. För att dessa enheter ska kunna kommunicera ljuddata med varandra krävs ett standardprotokoll. Ett sådant är I2S-protokollet. Det är ett seriellt bussgränssnitt, designat av Philip Semiconductor i februari 1986 för digitalt ljudgränssnitt mellan enheterna. Den här artikeln diskuterar en översikt av I 2S-protokoll det arbetar med applikationer.


Vad är I2S-protokollet?

Protokollet som används för att överföra digital ljuddata från en enhet till en annan enhet kallas I2S eller Inter-IC Sound-protokoll. Detta protokoll överför PCM (pulskodsmodulerad) ljuddata från en IC till en annan inom en elektronisk enhet. I2S spelar en nyckelroll vid överföring av ljudfiler som är förinspelade från en MCU till en DAC eller förstärkare. Detta protokoll kan också användas för att digitalisera ljud med hjälp av en mikrofon. Det finns ingen komprimering inom I2S-protokoll, så du kan inte spela OGG eller MP3 eller andra ljudformat som kondenserar ljudet, däremot kan du spela WAV-filer.



Funktioner

De I2S-protokollfunktioner inkluderar följande.

  • Den har 8 till 32 databitar för varje sampel.
  • Tx & Rx FIFO avbryter.
  • Den stöder DMA.
  • 16-bitars, 32-bitars, 48-bitars eller 64-bitars ordvalsperiod.
  • Samtidig dubbelriktad ljudströmning.
  • 8-bitars, 16-bitars och 24-bitars sampelbredd.
  • Den har olika samplingsfrekvenser.
  • Datahastigheten är upp till 96 kHz genom 64-bitars ordvalsperioden.
  • Interleaved stereo FIFO eller oberoende höger och vänster kanal FIFO
  • Oberoende aktivering av Tx & Rx.

I2S kommunikationsprotokoll fungerar

I2S kommunikationsprotokoll är ett 3-trådsprotokoll som helt enkelt hanterar ljuddata via en 3-linjers seriell buss som inkluderar SCK (Continuous Serial Clock), WS (Word Select) & SD (Serial Data).



3-trådsanslutning av I2S:

SCK

SCK eller Serial Clock är den första raden i I2S-protokollet som också är känt som BCLK eller bitklocklinje som används för att erhålla data på en liknande cykel. Den seriella klockfrekvensen definieras enkelt genom att använda formeln som Frequency = Sample Rate x Bits för varje kanal x no. av kanaler.

WS

I I2S-kommunikationsprotokollet är WS eller ordval den linje som också är känd som FS (Frame Select)-tråd som separerar höger eller vänster kanal.

Om WS = 0 används vänster kanal eller kanal-1.

Om WS = 1 används höger kanal eller kanal-2.

SD

Seriedata eller SD är den sista tråden där nyttolasten överförs inom 2 komplement. Så det är mycket viktigt att MSB först överförs, eftersom både sändaren och mottagaren kan innehålla olika ordlängder. Således måste sändaren eller mottagaren känna igen hur många bitar som sänds.

  • Om ordlängden på mottagaren är större än sändaren, förkortas ordet (LSB-bitar är nollställda).
  • Om mottagarens ordlängd är mindre än sändarens ordlängd, ignoreras LSB-bitarna.

De sändare kan skicka uppgifterna antingen på framkant eller bakkant av klockpulsen . Detta kan konfigureras i motsvarande kontrollregister . Men mottagaren låser seriedata och WS endast på framkanten av klockpulsen . Sändaren sänder data endast efter en klockpuls efter ändring i WS. Mottagaren använder WS-signalen för synkronisering av seriella data.

I2S nätverkskomponenter

När flera I2S-komponenter är anslutna till varandra kallas detta ett I2S-nätverk. Komponenten i detta nätverk innehåller olika namn och även olika funktioner. Så, följande diagram visar 3 olika nätverk. Här används ett ESP NodeMCU-kort som sändare och ett I2S-ljudbrytarkort används som mottagare. De tre ledningarna som används för att ansluta sändaren och mottagaren är SCK, WS & SD.

  I2S nätverkskomponenter
I2S nätverkskomponenter

I det första diagrammet är sändaren (Tx) mastern så den styr linjerna SCK (seriell klocka) och WS (ordval).

I det andra diagrammet är mottagaren master. Så både SCK & WS linjerna börjar från mottagaren & sändaren slutar.

I det tredje diagrammet är en extern styrenhet ansluten till noderna inom nätverket som fungerar som huvudenheten. Så den här enheten genererar SCK & WS.

I de framför allt I2S-nätverken finns det bara en enda masterenhet tillgänglig och många andra komponenter som sänder eller tar emot ljuddata.

I I2S kan vilken enhet som helst vara master genom att tillhandahålla klocksignalen.

I2S tidsdiagram

För en bättre förståelse av I2S och dess funktionalitet har vi I2S-kommunikationsprotokollets tidsdiagram som visas nedan. Tidsdiagrammet för I2S-protokollet visas nedan som inkluderar tre ledningar SCK, WS & SD.

  I2S Protocol Timing Diagram
I2S Protocol Timing Diagram

I diagrammet ovan har den seriella klockan först en Frequency = Sample Rate * Bits för varje kanal * nr. av kanaler). Ordet välj rad är den andra raden som växlar mellan '1' för höger kanal och '0' för vänster kanal.

Den tredje raden är den seriella datalinjen där datan sänds på varje klockcykel på den fallande flanken betecknad med punkter från HÖG till LÅG.

Dessutom kan vi notera att WS-linjen varierar en CLK-cykel innan MSB sänds vilket ger mottagaren tid för att lagra det tidigare ordet & rensa ingångsregistret för nästa ord. MSB skickas när SCK ändras efter WS förändringar.

Närhelst en data överförs mellan sändaren och mottagaren uppstår en utbredningsfördröjning  som skulle vara

utbredningsfördröjning = (tidsskillnad mellan den externa klockan och den interna klockan på mottagaren )+( tidsskillnaden mellan den interna klockan till när data tas emot).

För att minimera utbredningsfördröjningen och för synkronisering av dataöverföringen mellan sändaren och mottagaren krävs det att sändaren har en klockperiod på

T > tr  – Att anta att T är sändarens klockperiod och tr är sändarens minsta klockperiod.

Under ovanstående villkor om vi betraktar till exempel en sändare  med dataöverföringshastigheten 2,5 MHz då:

tr = 360ns

klocka Hög tHC (minst) >0,35 T.

klocka Låg tLC (minst > > 0,35T.

Mottagare som slav med dataöverföringshastigheten 2,5 MHz då:

klocka Hög tHC (minst) < 0,35 T

klocka Låg tLC (minimum) < 0,35T.

inställningstid tst(minimum) < 0,20T.

I2S Protocol Arduino

Huvudsyftet med detta projekt är att skapa ett I2S  theremin-gränssnitt med hjälp av Arduino I2S-biblioteket. De komponenter som krävs för att göra detta projekt är; Arduino MKR Zero, Bakbord , Bygelkablar, Adafruit MAX98357A, 3W, 4 ohm högtalare och RobotGeek Slider.

Arduino I2S-biblioteket låter dig enkelt överföra och ta emot digital ljuddata över I2S-bussen. Så det här exemplet syftar till att förklara hur man använder det här biblioteket för att driva en I2S DAC för att återskapa ljud beräknat i Arduino-designen.

Denna krets kan anslutas som; Den I2S DAC som används i detta exempel kräver helt enkelt tre ledningar samt en strömförsörjning för I2S-bussen. Anslutningarna för I2S på Arduino MKRZero följer som;

Seriella data (SD) på stift A6;

Seriell klocka (SCK) på stift 2;

Ramen eller Word Select (FS) på pin3;

Arbetssätt

I grund och botten har theremin två kontroller för tonhöjd och volym. Så dessa två parametrar ändras genom att flytta två skjutpotentiometrar, men du kan också justera dem för att läsa dem. De två potentiometrarna är sammankopplade i en spänningsdelare, så om du flyttar dessa potentiometrar får du värden från 0 till 1023. Därefter mappas dessa värden mellan högsta och lägsta frekvens och minsta och högsta volym.

  I2S Thermin-diagram
I2S Thermin-diagram

Ljudet som överförs på I2S-bussen är en enkel sinusvåg vars amplitud och frekvens modifieras baserat på avläsningen av potentiometrarna.

Koda

Koden för att gränssnitta en Theremin med en Arduino MKRZero, 2-slider potentiometrar och en I2S DAC ges nedan.

#include

const int maxFrequency = 5000; //maximal genererad frekvens
const int minFrequency = 220; //minsta genererade frekvens
const int maxVolume = 100; //max volym för den genererade frekvensen
const int minVolym = 0; //min volym av den genererade frekvensen
const int sampleRate = 44100; //sampler av den genererade frekvensen
const int wavSize = 256; //buffertstorlek
kort sinus[wavSize]; //buffert där sinusvärdena lagras
const int frequencyPin = A0; //pin ansluten till potten som bestämmer frekvensen på signalen
const int amplitudPin = Al; //pin ansluten till potten som bestämmer amplituden på signalen
const int knapp = 6; //pin ansluten till knappkontrollen  för att visa frekvensen

void setup()
{

Serial.begin(9600); //konfigurera serieporten
// Initiera I2S-sändaren.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(“Det gick inte att initiera I2S!”);

medan (1);
}

generSine(); // fyll buffert med sinusvärden
pinMode(knapp, INPUT_PULLUP); //sätta knappstiftet i input pullup

}
void loop() {

if (digitalRead(knapp) == LÅG)

{

float frequency = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //kartfrekvens
int amplitud = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //karta amplitud
playWave(frekvens, 0,1, amplitud); //Spelljud
//skriv ut värden på seriell
Serial.print(“Frequency = “);
Serial.println(frekvens);
Serial.print(“Amplitud = “);
Serial.println(amplitud);

}

}
void generSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / wavSize) * i)); //100 används för att inte ha små tal
}
}
void playWave(float frekvens, float sekunder, int amplitud) {
// Spela upp den tillhandahållna vågformsbufferten för den specificerade
// antal sekunder.
// Beräkna först hur många prover som behöver spelas upp för att köras
// i önskat antal sekunder.

osignerade int iterationer = sekunder * sampleRate;

// Beräkna sedan 'hastigheten' med vilken vi rör oss genom vågen
// buffert baserat på frekvensen av tonen som spelas.

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

// Gå nu igenom alla prover och spela dem, beräkna
// position inom vågbufferten för varje ögonblick i tiden.

for (osignerad int i = 0; i < iterationer; ++i) {
kort pos = (osignerad int)(i * delta) % wavSize;
kort sampel = amplitud * sinus[pos];

// Duplicera provet så att det skickas till både vänster och höger kanal.
// Det verkar som om ordningen är höger kanal, vänster kanal om du vill skriva
// stereoljud.

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

}
}

Skillnaden mellan I2C och I2S Protocol

Skillnaden mellan I2C och I2S Protocol inkluderar följande.

2C

I2S

De I2C-protokoll står för inter-IC-bussprotokoll I2S står för Inter-IC Sound protocol .
Det används främst för att köra signaler bland integrerade kretsar placerade på ett liknande PCB. Den används för att ansluta digitala ljudenheter.
Den använder två linjer mellan flera masters & slavar som SDA & SCL . Den använder tre rader WS, SCK & SD.
Den stöder multi-master & multi-slave. Den stöder en enda master.
Detta protokoll stöder CLK-sträckning. Detta protokoll har inte CLK-sträckning.
I2C inkluderar extra start- och stoppbitar. I2S inkluderar inga start- och stoppbitar.

Fördelar

De fördelarna med I2S-bussen inkluderar följande.

  • I2S använder separata CLK och seriella datalinjer. Så den har väldigt enkla mottagardesigner jämfört med asynkrona system.
  • Det är en enda huvudenhet så det finns inga problem med datasynkronisering.
  • Mikrofonen baserad på I2S o/p behöver inte en analog frontend utan används i en trådlös mikrofon genom att använda en digital sändare. Genom att använda detta kan du få en helt digital anslutning mellan sändaren och givaren.

Nackdelar

De nackdelar med I2S-bussen inkluderar följande.

  • I2S föreslås inte för överföring av data via kablar.
  • I2S stöds inte i högnivåapplikationer.
  • Detta protokoll har ett synkroniseringsproblem mellan tre signallinjer som märks vid hög bithastighet och samplingsfrekvens. Så detta problem uppstår huvudsakligen på grund av variationen av utbredningsfördröjningar mellan klocklinjer och datalinjer.
  • I2S inkluderar ingen feldetekteringsmekanism, så det kan orsaka fel inom dataavkodning.
  • Den används främst för inter-IC-kommunikation på ett liknande PCB.
  • Det finns inga typiska kontakter och sammankopplingskablar för I2S, så olika designers använder olika kontakter.

Ansökningar

De tillämpningar av I2S-protokollet inkluderar följande.

  • I2S används för att ansluta digitala ljudenheter.
  • Detta protokoll används i stor utsträckning för att överföra ljuddata från en DSP eller mikrokontroller till en ljudcodec för att spela upp ljud.
  • Inledningsvis används I2S-gränssnittet inom CD-spelares design. Nu kan den hittas där digital ljuddata skickas mellan IC:er.
  • I2S används i DSP, audio ADC, DAC, mikrokontroller, samplingsfrekvensomvandlare, etc.
  • I2S är speciellt utformad för att användas mellan integrerade kretsar för att kommunicera digital ljuddata.
  • Detta protokoll spelar en nyckelroll för att ansluta mikrokontrollern och dess kringutrustning när I2S fokuserar på ljuddataöverföring mellan digitala ljudenheter.

Alltså handlar allt om en översikt över I2S-protokollspecifikation som inkluderar arbete, skillnader och dess tillämpningar. I²S är ett 3-tråds synkront seriellt protokoll används för att överföra digitalt stereoljud mellan två integrerade kretsar. De I2S Protocol Analyzer är en signalavkodare som inkluderar alla DigiView Logic Analyzers. Denna DigiView-mjukvara ger helt enkelt breda söknings-, navigerings-, export-, mätnings-, plot- och utskriftsmöjligheter för alla typer av signaler. Här är en fråga till dig, vad är I3C-protokollet?