I2S-protokolla: Toiminta, erot ja sen sovellukset

Kokeile Instrumenttia Ongelmien Poistamiseksi





Digitaaliset järjestelmät ja niiden äänidatavaatimukset matkapuhelimissa, tietokoneissa ja Kodin automatisointi tuotteet ovat muuttuneet dramaattisesti ajan kuluessa. Äänisignaali prosessoreista tai prosessoreihin digitalisoituu. Nämä tiedot eri järjestelmissä käsitellään monien laitteiden, kuten DSP:t , ADC:t, DAC:t, digitaaliset I/O-liitännät jne. Jotta nämä laitteet voisivat viestiä äänidataa keskenään, tarvitaan standardiprotokolla. Yksi tällainen on I2S-protokolla. Se on sarjaväyläliitäntä, jonka Philip Semiconductor suunnitteli helmikuussa 1986 laitteiden välistä digitaalista audioliitäntää varten. Tässä artikkelissa käsitellään yleiskatsausta I 2S-protokolla se toimii sovellusten kanssa.


Mikä on I2S-protokolla?

Protokolla, jota käytetään digitaalisen äänidatan siirtämiseen laitteesta toiseen, tunnetaan nimellä I2S tai Inter-IC Sound -protokolla. Tämä protokolla lähettää PCM-äänidataa (pulssikoodimoduloitua) IC:stä toiseen elektroniikkalaitteessa. I2S:llä on keskeinen rooli MCU:sta valmiiksi tallennettujen äänitiedostojen siirtämisessä DAC:hen tai vahvistimeen. Tätä protokollaa voidaan käyttää myös äänen digitoimiseen mikrofonin avulla. I2S-protokollien sisällä ei ole pakkausta, joten et voi toistaa OGG:tä tai MP3:a tai muita ääntä tiivistäviä äänimuotoja, mutta voit toistaa WAV-tiedostoja.



ominaisuudet

The I2S-protokollan ominaisuudet Sisällytä seuraavat.

  • Siinä on 8-32 databittiä jokaista näytettä kohden.
  • Tx & Rx FIFO keskeyttää.
  • Se tukee DMA:ta.
  • 16-bittinen, 32-bittinen, 48-bittinen tai 64-bittinen sanavalintajakso.
  • Samanaikainen kaksisuuntainen äänen suoratoisto.
  • 8-bittinen, 16-bittinen ja 24-bittinen näyteleveys.
  • Siinä on erilaiset näytteenottotaajuudet.
  • Tiedonsiirtonopeus on jopa 96 kHz 64-bittisen sanavalintajakson ajan.
  • Lomitetut stereo-FIFOt tai itsenäiset oikean ja vasemman kanavan FIFO:t
  • Tx & Rx:n itsenäinen käyttöönotto.

I2S-viestintäprotokolla toimii

I2S viestintäprotokolla on 3 Wire -protokolla, joka yksinkertaisesti käsittelee äänidataa 3-rivisen sarjaväylän kautta, joka sisältää SCK (Continuous Serial Clock), WS (Word Select) ja SD (Serial Data).



I2S:n 3-johtiminen liitäntä:

SCK

SCK tai Serial Clock on I2S-protokollan ensimmäinen rivi, joka tunnetaan myös nimellä BCLK tai bittikellolinja, jota käytetään tietojen hankkimiseen samanlaisessa jaksossa. Sarjakellotaajuus määritellään yksinkertaisesti käyttämällä kaavaa kuten Frequency = Sample Rate x Bits kullekin kanavalle x no. kanavista.

WS

I2S-viestintäprotokollassa WS tai sanavalinta on linja, joka tunnetaan myös nimellä FS (Frame Select) -johto, joka erottaa oikean tai vasemman kanavan.

Jos WS = 0, käytetään vasenta kanavaa tai kanavaa 1.

Jos WS = 1, käytetään oikeaa kanavaa tai kanavaa 2.

SD

Sarjadata tai SD on viimeinen johto, jossa hyötykuorma siirretään 2 komplementin sisällä. Joten on erittäin tärkeää, että MSB siirretään ensin, koska sekä lähetin että vastaanotin voivat sisältää eri sanapituuksia. Siten lähettimen tai vastaanottimen on tunnistettava, kuinka monta bittiä lähetetään.

  • Jos vastaanottimen sanan pituus on suurempi kuin lähettimen, sanaa lyhennetään (LSB-bitit asetetaan nollaan).
  • Jos vastaanottimen sanan pituus on pienempi kuin lähettimen sanan pituus, LSB-bitit ohitetaan.

The lähetin voi lähettää tiedot joko kellopulssin etureuna tai takareuna . Tämä voidaan konfiguroida vastaavassa ohjausrekisterit . Mutta vastaanotin lukitsee sarjatiedot ja WS:n vain kellopulssin etureunaan . Lähetin lähettää dataa vain yhden kellopulssin jälkeen WS:n muutoksen jälkeen. Vastaanotin käyttää WS-signaalia sarjatietojen synkronointiin.

I2S-verkkokomponentit

Kun useita I2S-komponentteja on kytketty toisiinsa, tätä kutsutaan I2S-verkoksi. Tämän verkon komponentti sisältää erilaisia ​​nimiä ja myös erilaisia ​​toimintoja. Joten seuraava kaavio näyttää 3 eri verkkoa. Tässä ESP NodeMCU -korttia käytetään lähettimenä ja I2S-äänen katkeamiskorttia käytetään vastaanottimena. Kolme lähettimen ja vastaanottimen yhdistämiseen käytettyä johdinta ovat SCK, WS & SD.

  I2S-verkkokomponentit
I2S-verkkokomponentit

Ensimmäisessä kaaviossa lähetin (Tx) on isäntä, joten se ohjaa SCK (sarjakello) ja WS (sanavalinta) -linjoja.

Toisessa kaaviossa vastaanotin on isäntä. Joten sekä SCK- että WS-linjat alkavat vastaanottimesta ja lähetin päättyy.

Kolmannessa kaaviossa verkon solmuihin on kytketty ulkoinen ohjain, joka toimii kuten päälaite. Joten tämä laite luo SCK & WS:n.

Ennen kaikkea I2S-verkoissa on käytettävissä vain yksi isäntälaite ja monia muita äänidataa lähettäviä tai vastaanottavia komponentteja.

I2S:ssä mikä tahansa laite voi olla isäntä antamalla kellosignaalin.

I2S-ajoituskaavio

Jotta ymmärrämme paremmin I2S:n ja sen toiminnallisuuden, meillä on alla oleva I2S-viestintäprotokollan ajoituskaavio. Alla on esitetty I2S-protokollan ajoituskaavio, joka sisältää kolme johdinta SCK, WS & SD.

  I2S-protokollan ajoituskaavio
I2S-protokollan ajoituskaavio

Yllä olevassa kaaviossa sarjakellon arvo on ensinnäkin Frequency = Sample Rate * Bittiä jokaiselle kanavalle * no. kanavista). Sanan valintarivi on toinen rivi, joka vaihtuu välillä '1' oikealle kanavalle ja '0' vasemmalle kanavalle.

Kolmas rivi on sarjadatalinja, jossa data lähetetään jokaisella kellojaksolla laskevalla reunalla, joka on merkitty pisteillä HIGH:sta LOW:iin.

Lisäksi voimme huomata, että WS-linja vaihtelee yhden CLK-jakson ennen MSB:n lähettämistä, mikä antaa vastaanottimelle aikaa tallentaa aikaisempi sana ja tyhjentää seuraavan sanan syöttörekisterin. MSB lähetetään, kun SCK muuttuu WS-muutosten jälkeen.

Aina kun dataa siirretään lähettimen ja vastaanottimen välillä, esiintyy etenemisviivettä, joka olisi

etenemisviive = (aikaero ulkoisen kellon ja vastaanottimen sisäisen kellon välillä)+( aikaero sisäisen kellon ja tiedon vastaanottamisen välillä).

Etenemisviiveen minimoimiseksi ja tiedonsiirron synkronoimiseksi lähettimen ja vastaanottimen välillä vaaditaan, että lähettimen kellojakso on

T > tr  – Oletetaan, että T on lähettimen kellojakso ja tr on lähettimen minimikellojakso.

Yllä olevassa tilanteessa, jos otetaan huomioon esimerkiksi a lähetin, jonka tiedonsiirtonopeus on 2,5 MHz, sitten:

tr = 360ns

kello Korkea tHC (minimi) >0,35 T.

kello Matala tLC (minimi> > 0,35T.

Vastaanotin orjana, jonka tiedonsiirtonopeus on 2,5 MHz, sitten:

kello Korkea tHC (minimi) < 0,35 T

kello Matala tLC (minimi) < 0,35T.

asetusaika tst(minimi) < 0,20T.

I2S-protokolla Arduino

Tämän projektin päätavoitteena on tehdä I2S-theremin-rajapinta käyttämällä Arduino I2S -kirjastoa. Tämän projektin tekemiseen vaadittavat komponentit ovat; Arduino MKR Zero, Leipälauta , Hyppyjohdot, Adafruit MAX98357A, 3 W, 4 ohmin kaiutin ja RobotGeek Slider.

Arduino I2S -kirjasto antaa sinun yksinkertaisesti lähettää ja vastaanottaa digitaalista äänidataa I2S-väylän kautta. Tämän esimerkin tarkoituksena on selittää, kuinka tätä kirjastoa käytetään I2S-DAC:n ohjaamiseen Arduinon suunnittelussa lasketun äänen toistamiseksi.

Tämä piiri voidaan kytkeä; Tässä esimerkissä käytetty I2S DAC vaatii yksinkertaisesti kolme johtoa sekä virtalähteen I2S-väylää varten. Arduino MKRZeron I2S:n liitännät ovat seuraavat:

Sarjatiedot (SD) nastassa A6;

Sarjakello (SCK) pin2:ssa;

Kehys tai sanavalinta (FS) pin3:ssa;

Työskentely

Pohjimmiltaan thereminissä on kaksi sävelkorkeutta ja äänenvoimakkuutta. Joten näitä kahta parametria muokataan siirtämällä kahta liukupotentiometriä, mutta voit myös säätää niitä lukemaan niitä. Nämä kaksi potentiometriä on kytketty jännitteenjakajamuotoon, joten siirtämällä näitä potentiometrejä saat arvot 0 - 1023. Sen jälkeen nämä arvot kartoitetaan maksimi- ja minimitaajuuden sekä pienimmän ja suurimman äänenvoimakkuuden väliin.

  I2S Thermin -kaavio
I2S Thermin -kaavio

I2S-väylällä välitetty ääni on yksinkertainen siniaalto, jonka amplitudia ja taajuutta muutetaan potentiometrien lukemien perusteella.

Koodi

Alla on koodi Thereminin liittämiseksi Arduino MKRZeroon, 2-liukusäätimeen ja I2S DAC:iin.

#include

const int maxFrequency = 5000; //suurin luotu taajuus
const int min Taajuus = 220; //generoitu vähimmäistaajuus
const int maxVolume = 100; //generoidun taajuuden enimmäismäärä
const int minVolume = 0; //min generoidun taajuuden tilavuus
const int näytenopeus = 44100; // generoidun taajuuden näytteenottotaajuus
const int wavSize = 256; //puskurin koko
lyhyt sini[aaltokoko]; //puskuri, johon siniarvot on tallennettu
const int taajuusPin = A0; //pin kytketty potti, joka määrittää signaalin taajuuden
const int amplitudiPin = A1; //nasta, joka on kytketty pottiin, joka määrittää signaalin amplitudin
const int -painike = 6; //nasta on liitetty painikeohjaimeen  taajuuden näyttämiseksi

void setup()
{

Serial.begin(9600); //määritä sarjaportti
// Alusta I2S-lähetin.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('I2S:n alustus epäonnistui!');

kun (1);
}

generoSine(); // täytä puskuri siniarvoilla
pinMode(painike, INPUT_PULLUP); //laita näppäintappi sisäänmenovetoon

}
void loop() {

if (digitalRead(button) == LOW)

{

kelluva taajuus = map(analogRead(taajuusPin), 0, 1023, min Taajuus, maksimitaajuus); //kartan taajuus
int amplitudi = map(analogRead(amplitudiPin), 0, 1023, minVolume, maxVolume); //kartan amplitudi
playWave(taajuus, 0,1, amplitudi); //soita ääni
//tulosta arvot sarjaan
Serial.print('Frequency = ');
Serial.println(taajuus);
Serial.print('Amplitudi = ');
Serial.println(amplitudi);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sini[i] = ushort(float(100) * sin(2,0 * PI * (1,0 / wavSize) * i)); //100:lla ei ole pieniä lukuja
}
}
void playWave(float taajuus, kelluva sekuntit, int amplitudi) {
// Toista määritetty aaltomuotopuskuri
// sekuntien määrä.
// Laske ensin, kuinka monta näytettä on toistettava suorittaakseen
// halutun sekuntimäärän ajan.

etumerkittömät interaatiot = sekuntia * näytenopeus;

// Laske sitten 'nopeus', jolla liikumme aallon läpi
// puskuri toistettavan sävyn taajuuden perusteella.

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

// Käy nyt läpi kaikki näytteet ja toista ne laskemalla
// sijainti aaltopuskurissa kullekin ajanhetkelle.

for (signed int i = 0; i < iteraatiot; ++i) {
lyhyt pos = (signed int)(i * delta) % wavSize;
lyhyt näyte = amplitudi * sini[pos];

// Kopioi näyte niin, että se lähetetään sekä vasemmalle että oikealle kanavalle.
// Näyttää siltä, ​​että järjestys on oikea kanava, vasen kanava, jos haluat kirjoittaa
// stereoääni.

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

}
}

Ero I2C- ja I2S-protokollan välillä

Ero I2C- ja I2S-protokollan välillä sisältää seuraavan.

2C

I2S

The I2C-protokolla tarkoittaa inter-IC bussiprotokollaa I2S tarkoittaa Inter-IC Sound -protokollaa .
Sitä käytetään pääasiassa ohjaamaan signaaleja samanlaiselle piirilevylle sijoitettujen integroitujen piirien välillä. Sitä käytetään digitaalisten äänilaitteiden liittämiseen.
Se käyttää kahta linjaa useiden isäntälaitteiden ja orjien välillä, kuten SDA ja SCL . Se käyttää kolmea riviä WS, SCK ja SD.
Se tukee useaa isäntää ja useaa orjaa. Se tukee yhtä masteria.
Tämä protokolla tukee CLK-venytystä. Tässä protokollassa ei ole CLK-venytystä.
I2C sisältää ylimääräisiä käynnistys- ja pysäytysbittejä. I2S ei sisällä aloitus- ja lopetusbittejä.

Edut

The I2S-väylän eduista Sisällytä seuraavat.

  • I2S käyttää erillisiä CLK- ja sarjadatalinjoja. Joten sillä on hyvin yksinkertaiset vastaanottimet verrattuna asynkronisiin järjestelmiin.
  • Se on yksi päälaite, joten tietojen synkronoinnissa ei ole ongelmia.
  • I2S o/p:hen perustuva mikrofoni ei tarvitse analogista etupäätä, vaan sitä hyödynnetään langattomassa mikrofonissa digitaalisen lähettimen avulla. Tätä käyttämällä saat täysin digitaalisen yhteyden lähettimen ja anturin välille.

Haitat

The I2S-väylän haitat Sisällytä seuraavat.

  • I2S:ää ei ehdoteta tiedonsiirtoon kaapeleiden kautta.
  • I2S ei ole tuettu korkean tason sovelluksissa.
  • Tässä protokollassa on kolmen signaalilinjan välinen synkronointiongelma, joka havaitaan suurella bittinopeudella ja näytteenottotaajuudella. Joten tämä ongelma johtuu pääasiassa etenemisviiveiden vaihtelusta kellolinjojen ja datalinjojen välillä.
  • I2S ei sisällä virheentunnistusmekanismia, joten se voi aiheuttaa virheitä tiedon dekoodauksessa.
  • Sitä käytetään pääasiassa IC-viestintään samanlaisella piirilevyllä.
  • I2S:lle ei ole tyypillisiä liittimiä ja liitäntäkaapeleita, joten eri suunnittelijat käyttävät erilaisia ​​liittimiä.

Sovellukset

The I2S-protokollan sovelluksia Sisällytä seuraavat.

  • I2S:ää käytetään digitaalisten äänilaitteiden liittämiseen.
  • Tätä protokollaa käytetään laajasti äänidatan siirtämisessä DSP:stä tai mikro-ohjaimesta audiokoodekille äänen toistamiseksi.
  • Aluksi I2S-liitäntää hyödynnetään CD-soittimien suunnittelussa. Nyt se löytyy, missä digitaalista äänidataa lähetetään IC:iden välillä.
  • I2S:ää käytetään DSP:issä, audio-ADC:issä, DAC:issa, mikro-ohjaimissa, näytetaajuusmuuntimissa jne.
  • I2S on erityisesti suunniteltu käytettäväksi integroitujen piirien välillä digitaalisen äänidatan siirtoon.
  • Tällä protokollalla on keskeinen rooli mikro-ohjaimen ja sen oheislaitteiden yhdistämisessä, kun I2S keskittyy audiodatan siirtoon digitaalisten äänilaitteiden välillä.

Näin ollen tässä on kyse yleiskatsauksesta I2S-protokollan määrittely joka sisältää toimivuuden, erot ja sen sovellukset. I²S on 3-johtiminen synkroninen sarjaprotokolla käytetään digitaalisen stereoäänen siirtämiseen kahden integroidun piirin välillä. The I2S-protokollaanalysaattori on signaalin dekooderi, joka sisältää kaikki DigiView Logic Analyzers. Tämä DigiView-ohjelmisto tarjoaa yksinkertaisesti laajat haku-, navigointi-, vienti-, mittaus-, piirustus- ja tulostusominaisuudet kaikentyyppisille signaaleille. Tässä on sinulle kysymys, mikä on I3C-protokolla?