I2S-protocol: werken, verschillen en toepassingen

Probeer Ons Instrument Voor Het Oplossen Van Problemen





Digitale systemen en de vereisten voor audiogegevens binnen mobiele telefoons, computers en Domotica producten zijn in de loop van de tijd drastisch veranderd. Het audiosignaal van of naar de processors wordt gedigitaliseerd. Deze gegevens in verschillende systemen worden verwerkt via veel apparaten zoals: DSP's , ADC's, DAC's, digitale I/O-interfaces, enz. Om ervoor te zorgen dat deze apparaten audiogegevens met elkaar kunnen communiceren, is een standaardprotocol vereist. Een daarvan is het I2S-protocol. Het is een seriële businterface, ontworpen door Philip Semiconductor in februari 1986 voor een digitale audio-interface tussen de apparaten. Dit artikel bespreekt een overzicht van I 2S-protocol het werkt met applicaties.


Wat is het I2S-protocol?

Het protocol dat wordt gebruikt om digitale audiogegevens van het ene apparaat naar het andere te verzenden, staat bekend als I2S of Inter-IC Sound-protocol. Dit protocol verzendt PCM (pulscode-gemoduleerde) audiogegevens van het ene IC naar het andere binnen een elektronisch apparaat. I2S speelt een sleutelrol bij het verzenden van audiobestanden die vooraf zijn opgenomen van een MCU naar een DAC of versterker. Dit protocol kan ook worden gebruikt om audio te digitaliseren met behulp van een microfoon. Er is geen compressie binnen I2S-protocollen, dus u kunt geen OGG of MP3 of andere audioformaten afspelen die de audio condenseren, maar u kunt WAV-bestanden afspelen.



Functies

De I2S-protocolfuncties omvatten het volgende.

  • Het heeft 8 tot 32 databits voor elk monster.
  • Tx & Rx FIFO-onderbrekingen.
  • Het ondersteunt DMA.
  • 16-bits, 32-bits, 48-bits of 64-bits woordselectieperiode.
  • Gelijktijdige bidirectionele audiostreaming.
  • 8-bits, 16-bits en 24-bits steekproefbreedte.
  • Het heeft verschillende samplerates.
  • De gegevenssnelheid is tot 96 kHz via de 64-bits woordselectieperiode.
  • Interleaved stereo FIFO's of onafhankelijke rechter- en linkerkanaal FIFO's
  • Onafhankelijke inschakelen van Tx & Rx.

I2S-communicatieprotocol werkt:

De I2S communicatie protocol is een 3-draads protocol dat eenvoudig audiogegevens verwerkt via een seriële bus met 3 lijnen die SCK (Continuous Serial Clock), WS (Word Select) en SD (Serial Data) omvat.



3-draads aansluiting van I2S:

SCK

De SCK of seriële klok is de eerste regel van het I2S-protocol dat ook bekend staat als BCLK of bitkloklijn die wordt gebruikt om de gegevens op een vergelijkbare cyclus te verkrijgen. De seriële klokfrequentie wordt eenvoudig gedefinieerd met behulp van de formule Frequentie = Sample Rate x Bits voor elk kanaal x nee. van kanalen.

WS

In het I2S-communicatieprotocol is de WS of woordselectie de lijn die ook bekend staat als FS (Frame Select)-draad die het rechter- of linkerkanaal scheidt.

Als WS = 0 dan wordt linkerkanaal of kanaal-1 gebruikt.

Als WS = 1 dan wordt het rechterkanaal of kanaal-2 gebruikt.

SD

De Serial Data of SD is de laatste draad waar de payload binnen 2 complementen wordt verzonden. Het is dus heel belangrijk dat de MSB eerst wordt overgedragen, omdat zowel de zender als de ontvanger verschillende woordlengtes kunnen hebben. De zender of de ontvanger moet dus herkennen hoeveel bits er worden verzonden.

  • Als de woordlengte van de ontvanger groter is dan die van de zender, wordt het woord ingekort (LSB-bits worden op nul gezet).
  • Als de woordlengte van de ontvanger kleiner is dan de woordlengte van de zender, worden de LSB-bits genegeerd.

De zender kan de gegevens ofwel op de voorflank of achterflank van de klokpuls . Dit kan worden geconfigureerd in de bijbehorende controleregisters . Maar de ontvanger vergrendelt de seriële gegevens en WS alleen op de voorflank van de klokpuls . De zender zendt pas gegevens na één klokpuls na verandering in WS. De ontvanger gebruikt het WS-signaal voor de synchronisatie van de seriële data.

I2S-netwerkcomponenten

Wanneer er meerdere I2S-componenten met elkaar zijn verbonden, wordt dit een I2S-netwerk genoemd. Het onderdeel van dit netwerk bevat verschillende namen en ook verschillende functies. Het volgende diagram toont dus 3 verschillende netwerken. Hier wordt een ESP NodeMCU-bord gebruikt als zender en een I2S-audio-breakout-bord als ontvanger. De drie draden die worden gebruikt om de zender en ontvanger aan te sluiten, zijn SCK, WS en SD.

  I2S-netwerkcomponenten
I2S-netwerkcomponenten

In het eerste diagram is de zender (Tx) de master, dus hij bestuurt de SCK (seriële klok) & WS (woordselectie) lijnen.

In het tweede diagram is de ontvanger de master. Dus zowel de SCK- als de WS-lijnen beginnen bij de ontvanger en de zender eindigt.

In het derde diagram is een externe controller verbonden met de knooppunten binnen het netwerk die werkt als het masterapparaat. Dus dit apparaat genereert de SCK & WS.

In de vooral I2S-netwerken is er slechts één master-apparaat beschikbaar en vele andere componenten die geluidsgegevens verzenden of ontvangen.

In I2S kan elk apparaat de master zijn door het kloksignaal te leveren.

I2S-timingdiagram

Voor een beter begrip van de I2S en zijn functionaliteit hebben we het onderstaande timingdiagram voor het I2S-communicatieprotocol. Het timingdiagram van het I2S-protocol wordt hieronder weergegeven, inclusief drie draden SCK, WS & SD.

  I2S-protocol timingdiagram
I2S-protocol timingdiagram

In het bovenstaande diagram heeft de seriële klok eerst een Frequentie = Sample Rate * Bits voor elk kanaal * nr. van kanalen). Het woord select line is de tweede regel die verandert tussen '1' voor het rechterkanaal en '0' voor het linkerkanaal.

De derde lijn is de seriële datalijn waar de gegevens worden verzonden bij elke klokcyclus op de dalende flank, aangegeven met stippen van HOOG naar LAAG.

Bovendien kunnen we opmerken dat de WS-lijn één CLK-cyclus varieert voordat de MSB wordt verzonden, wat de ontvanger de tijd geeft om het eerdere woord op te slaan en het invoerregister voor het volgende woord te wissen. De MSB wordt verzonden wanneer SCK verandert nadat WS is gewijzigd.

Telkens wanneer gegevens worden verzonden tussen de zender en de ontvanger, zou er een voortplantingsvertraging zijn, wat zou zijn:

voortplantingsvertraging = (tijdsverschil tussen de externe klok en de interne klok van de ontvanger) + (tijdsverschil tussen de interne klok tot wanneer gegevens worden ontvangen).

Om de voortplantingsvertraging te minimaliseren en voor de synchronisatie van de gegevensoverdracht tussen de zender en de ontvanger, is het vereist dat de zender een klokperiode heeft van

T > tr  – Aannemen dat T de klokperiode van de zender is en tr de minimale klokperiode van de zender.

Onder bovenstaande voorwaarde als we bijvoorbeeld overwegen a zender  met de datatransmissiesnelheid van 2,5 MHz en dan:

tr = 360ns

klok Hoog THC (minimum) >0.35 T.

klok Lage tLC (minimum> > 0.35T.

Ontvanger als slave met de datatransmissiesnelheid van 2,5 MHz dan:

klok Hoge tHC (minimum) < 0,35 T

klok Lage tLC (minimum) < 0.35T.

insteltijd tst (minimaal) < 0.20T.

I2S-protocol Arduino

Het hoofddoel van dit project is om een ​​I2S-theremin-interface te maken met behulp van de Arduino I2S-bibliotheek. De benodigde componenten om dit project te maken zijn; Arduino MKR Nul, Breadboard , Jumper-draden, Adafruit MAX98357A, 3W, 4 ohm luidspreker en RobotGeek Slider.

Met de Arduino I2S-bibliotheek kunt u eenvoudig digitale audiogegevens verzenden en ontvangen via de I2S-bus. Dit voorbeeld is bedoeld om uit te leggen hoe deze bibliotheek kan worden gebruikt om een ​​I2S DAC aan te sturen voor het reproduceren van geluid dat is berekend in het Arduino-ontwerp.

Deze schakeling kan worden aangesloten als; De I2S DAC die in dit voorbeeld wordt gebruikt, vereist slechts drie draden en een voeding voor de I2S-bus. De aansluitingen voor de I2S op de Arduino MKRZero volgen als;

Seriële gegevens (SD) op pin A6;

Seriële klok (SCK) op pin2;

Het frame of Word Select (FS) op pin3;

Werken

Kortom, de theremin heeft twee bedieningselementen voor toonhoogte en volume. Deze twee parameters worden dus gewijzigd door twee schuifpotentiometers te verplaatsen, maar u kunt ze ook aanpassen om ze te lezen. De twee potentiometers zijn verbonden in een spanningsdelervorm, dus als u deze potentiometers verplaatst, krijgt u waarden van 0 tot 1023. Daarna worden deze waarden in kaart gebracht tussen de maximale en minimale frequentie en het minste en hoogste volume.

  I2S Thermin-diagram
I2S Thermin-diagram

Het geluid dat op de I2S-bus wordt uitgezonden, is een eenvoudige sinusgolf waarvan de amplitude en frequentie worden aangepast op basis van de uitlezing van de potentiometers.

Code

De code om een ​​Theremin te koppelen met een Arduino MKRZero, 2-schuifpotentiometers en een I2S DAC wordt hieronder gegeven.

#include

const int maxFrequency = 5000; //maximaal gegenereerde frequentie
const int minFrequentie = 220; // minimaal gegenereerde frequentie
const int maxVolume = 100; // max volume van de gegenereerde frequentie
const int minVolume = 0; //min volume van de gegenereerde frequentie
const int sampleRate = 44100; // sample van de gegenereerde frequentie
const int wavSize = 256; //buffer grootte
korte sinus[wavSize]; //buffer waarin de sinuswaarden worden opgeslagen
const int frequentiePin = A0; //pin aangesloten op de pot die de frequentie van het signaal bepaalt
const int amplitudePin = A1; //pin aangesloten op de pot die de amplitude van het signaal bepaalt
const int-knop = 6; //pin aangesloten op de knopbediening  om de frequentie weer te geven

ongeldige setup()
{

Serieel.begin(9600); // configureer de seriële poort
// Initialiseer de I2S-zender.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println ('Kan I2S niet initialiseren!');

terwijl (1);
}

genereerSine(); // vul buffer met sinuswaarden
pinMode (knop, INPUT_PULLUP); // zet de knoppin in input pullup

}
lege lus() {

if (digitalRead (knop) == LAAG)

{

float-frequentie = kaart (analogRead (frequencyPin), 0, 1023, minFrequency, maxFrequency); // kaart frequentie
int amplitude = map (analogRead (amplitudePin), 0, 1023, minVolume, maxVolume); // kaartamplitude
playWave (frequentie, 0.1, amplitude); //geluid afspelen
// print waarden op serieel
Serial.print ('Frequentie = ');
Serial.println (frequentie);
Serial.print ('Amplitude = ');
Serial.println(amplitude);

}

}
void GenereerSine() {
voor (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 wordt gebruikt om geen kleine getallen te hebben
}
}
void playWave (zwevende frequentie, zwevende seconden, int-amplitude) {
// Speel de meegeleverde golfvormbuffer af voor de opgegeven
// aantal seconden.
// Bereken eerst hoeveel samples moeten worden afgespeeld om te kunnen draaien
// voor het gewenste aantal seconden.

unsigned int iteraties = seconden * sampleRate;

// Bereken vervolgens de 'snelheid' waarmee we door de golf bewegen
// buffer op basis van de frequentie van de toon die wordt afgespeeld.

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

// Loop nu door alle samples en speel ze af, bereken de
// positie binnen de golfbuffer voor elk moment in de tijd.

for (unsigned int i = 0; i < iteraties; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
korte steekproef = amplitude * sinus[pos];

// Dupliceer het voorbeeld zodat het naar zowel het linker- als het rechterkanaal wordt gestuurd.
// Het lijkt erop dat de volgorde het rechterkanaal is, het linkerkanaal als je wilt schrijven
// stereogeluid.

terwijl (I2S.availableForWrite() < 2);
I2S.schrijven (voorbeeld);
I2S.schrijven (voorbeeld);

}
}

Verschil tussen I2C- en I2S-protocol

Het verschil tussen I2C en I2S-protocol omvat het volgende.

2C

I2S

De I2C-protocol staat voor inter-IC bus protocol De I2S staat voor Inter-IC Sound protocol .
Het wordt voornamelijk gebruikt om signalen te laten lopen tussen geïntegreerde schakelingen die op een vergelijkbare PCB zijn geplaatst. Het wordt gebruikt voor het aansluiten van digitale audioapparaten.
Het gebruikt twee lijnen tussen verschillende masters & slaves zoals SDA & SCL . Het gebruikt drie lijnen WS, SCK en SD.
Het ondersteunt multi-master en multi-slave. Het ondersteunt een enkele master.
Dit protocol ondersteunt CLK-stretching. Dit protocol heeft geen CLK stretching.
I2C bevat extra overhead start- en stopbits. I2S bevat geen start- en stopbits.

Voordelen:

De voordelen van de I2S-bus omvatten het volgende.

  • I2S maakt gebruik van aparte CLK & seriële datalijnen. Het heeft dus zeer eenvoudige ontvangerontwerpen in vergelijking met asynchrone systemen.
  • Het is een single master-apparaat, dus er is geen probleem met gegevenssynchronisatie.
  • De microfoon op basis van I2S o/p heeft geen analoge front-end nodig, maar wordt gebruikt in een draadloze microfoon met behulp van een digitale zender. Door dit te gebruiken, kunt u een volledig digitale verbinding hebben tussen de zender en de transducer.

nadelen

De nadelen van de I2S-bus omvatten het volgende.

  • I2S wordt niet voorgesteld voor gegevensoverdracht via kabels.
  • I2S wordt niet ondersteund in applicaties op hoog niveau.
  • Dit protocol heeft een synchronisatieprobleem tussen drie signaallijnen dat wordt opgemerkt bij hoge bitsnelheid en bemonsteringsfrequentie. Dit probleem treedt dus voornamelijk op vanwege de variatie in voortplantingsvertragingen tussen kloklijnen en datalijnen.
  • I2S bevat geen foutdetectiemechanisme, dus het kan fouten veroorzaken bij het decoderen van gegevens.
  • Het wordt voornamelijk gebruikt voor inter-IC-communicatie op een vergelijkbare PCB.
  • Er zijn geen typische connectoren en verbindingskabels voor I2S, dus verschillende ontwerpers gebruiken verschillende connectoren.

Toepassingen

De toepassingen van het I2S-protocol omvatten het volgende.

  • I2S wordt gebruikt voor het aansluiten van digitale audioapparaten.
  • Dit protocol wordt uitgebreid gebruikt bij het overbrengen van audiogegevens van een DSP of microcontroller naar een audiocodec om audio af te spelen.
  • Aanvankelijk wordt de I2S-interface gebruikt in cd-spelerontwerpen. Nu kan worden gevonden waar digitale audiogegevens tussen IC's worden verzonden.
  • I2S wordt gebruikt in DSP's, audio-ADC's, DAC's, microcontrollers, sample rate-converters, enz.
  • I2S is speciaal ontworpen om tussen geïntegreerde schakelingen te gebruiken voor het communiceren van digitale audiogegevens.
  • Dit protocol speelt een sleutelrol bij het verbinden van de microcontroller en zijn randapparatuur wanneer de I2S zich richt op de overdracht van audiogegevens tussen digitale audioapparaten.

Dit gaat dus allemaal over een overzicht van de I2S-protocolspecificatie: waaronder werken, verschillen en de toepassingen ervan. I²S is een 3-draads synchroon serieel protocol gebruikt voor de overdracht van digitale stereo-audio tussen twee geïntegreerde schakelingen. De I2S-protocolanalysator is een seindecoder die alle DigiView Logic Analyzers bevat. Deze DigiView-software biedt eenvoudig uitgebreide zoek-, navigatie-, export-, meet-, plot- en printmogelijkheden voor alle soorten signalen. Hier is een vraag voor u, wat is het I3C-protocol?