I2S protokols: darbība, atšķirības un tā lietojumprogrammas

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Digitālās sistēmas un to audio datu prasības mobilajos tālruņos, datoros un Mājas automatizācija produkti laika gaitā ir krasi mainījušies. Audio signāls no vai uz procesoriem tiek digitalizēts. Šie dati dažādās sistēmās tiek apstrādāti, izmantojot daudzas ierīces, piemēram DSP , ADC, DAC, digitālās ievades/izvades saskarnes utt. Lai šīs ierīces varētu sazināties savā starpā audio datus, ir nepieciešams standarta protokols. Viens no tiem ir I2S protokols. Tas ir seriālās kopnes interfeiss, ko Philip Semiconductor 1986. gada februārī izstrādāja digitālajam audio interfeisam starp ierīcēm. Šajā rakstā ir apskatīts pārskats par I 2S protokols tā strādā ar lietojumprogrammām.


Kas ir I2S protokols?

Protokols, ko izmanto digitālo audio datu pārsūtīšanai no vienas ierīces uz citu ierīci, ir pazīstams kā I2S vai Inter-IC Sound protokols. Šis protokols elektroniskā ierīcē pārraida PCM (impulsa koda modulētos) audio datus no vienas IC uz otru. I2S spēlē galveno lomu audio failu pārsūtīšanā, kas ir iepriekš ierakstīti no MCU uz DAC vai pastiprinātāju. Šo protokolu var izmantot arī audio digitalizēšanai, izmantojot mikrofonu. I2S protokolos nav saspiešanas, tāpēc jūs nevarat atskaņot OGG vai MP3 vai citus audio formātus, kas kondensē audio, tomēr varat atskaņot WAV failus.



Iespējas

The I2S protokola funkcijas iekļaujiet tālāk norādīto.

  • Tam ir 8 līdz 32 datu biti katram paraugam.
  • Tx & Rx FIFO pārtraukumi.
  • Tā atbalsta DMA.
  • 16 bitu, 32 bitu, 48 bitu vai 64 bitu vārdu atlases periods.
  • Vienlaicīga divvirzienu audio straumēšana.
  • 8 bitu, 16 bitu un 24 bitu izlases platums.
  • Tam ir dažādas izlases likmes.
  • Datu pārraides ātrums ir līdz 96 kHz 64 bitu vārdu atlases periodā.
  • Interleaved stereo FIFO vai neatkarīgi labā un kreisā kanāla FIFO
  • Neatkarīga Tx & Rx iespējošana.

I2S sakaru protokola darbība

I2S sakaru protokols ir 3 vadu protokols, kas vienkārši apstrādā audio datus, izmantojot 3 līniju seriālo kopni, kas ietver SCK (Continuous Serial Clock), WS (Word Select) un SD (serial Data).



I2S 3 vadu savienojums:

SCK

SCK vai sērijas pulkstenis ir pirmā I2S protokola rinda, kas pazīstama arī kā BCLK vai bitu pulksteņa līnija, ko izmanto, lai iegūtu datus līdzīgā ciklā. Sērijas pulksteņa frekvence tiek vienkārši definēta, izmantojot tādu formulu kā Frekvence = Iztveršanas ātrums x Biti katram kanālam x Nr. kanāliem.

WS

I2S sakaru protokolā WS jeb vārdu atlase ir līnija, kas pazīstama arī kā FS (Frame Select) vads, kas atdala labo vai kreiso kanālu.

Ja WS = 0, tiek izmantots kreisais kanāls vai kanāls-1.

Ja WS = 1, tad tiek izmantots labais kanāls vai kanāls-2.

SD

Serial Data jeb SD ir pēdējais vads, pa kuru lietderīgā slodze tiek pārsūtīta 2 komplementu ietvaros. Tāpēc ir ļoti svarīgi, ka vispirms tiek pārsūtīts MSB, jo gan raidītājs, gan uztvērējs var ietvert dažādus vārdu garumus. Tādējādi raidītājam vai uztvērējam ir jāatpazīst, cik bitu tiek pārraidīts.

  • Ja uztvērēja vārda garums ir lielāks par raidītāja, tad vārds tiek saīsināts (LSB biti ir iestatīti uz nulli).
  • Ja uztvērēja vārda garums ir mazāks par raidītāja vārda garumu, LSB biti tiek ignorēti.

The raidītājs var nosūtīt datus vai nu uz pulksteņa impulsa priekšējā mala vai beigu mala . To var konfigurēt attiecīgajā sadaļā kontroles reģistri . Bet uztvērējs aiztur sērijas datus un WS tikai pulksteņa impulsa priekšējā malā . Raidītājs pārraida datus tikai pēc viena pulksteņa impulsa pēc WS maiņas. Uztvērējs izmanto WS signālu sērijas datu sinhronizēšanai.

I2S tīkla komponenti

Ja vairāki I2S komponenti ir savienoti viens ar otru, to sauc par I2S tīklu. Šī tīkla sastāvdaļa ietver dažādus nosaukumus un arī dažādas funkcijas. Tātad, nākamajā diagrammā ir parādīti 3 dažādi tīkli. Šeit ESP NodeMCU plate tiek izmantota kā raidītājs un I2S audio sadales plate tiek izmantota kā uztvērējs. Trīs vadi, ko izmanto, lai savienotu raidītāju un uztvērēju, ir SCK, WS un SD.

  I2S tīkla komponenti
I2S tīkla komponenti

Pirmajā diagrammā raidītājs (Tx) ir galvenais, tāpēc tas kontrolē SCK (sērijas pulksteņa) un WS (vārda atlases) līnijas.

Otrajā diagrammā uztvērējs ir galvenais. Tātad gan SCK, gan WS līnijas sākas no uztvērēja un beidzas raidītājs.

Trešajā diagrammā ārējais kontrolieris ir savienots ar tīkla mezgliem, kas darbojas kā galvenā ierīce. Tātad šī ierīce ģenerē SCK un WS.

I2S tīklos ir pieejama tikai viena galvenā ierīce un daudzi citi komponenti, kas pārraida vai saņem skaņas datus.

I2S jebkura ierīce var būt galvenā, nodrošinot pulksteņa signālu.

I2S laika diagramma

Lai labāk izprastu I2S un tā funkcionalitāti, tālāk ir parādīta I2S sakaru protokola laika diagramma. Tālāk ir parādīta I2S protokola laika diagramma, kas ietver trīs vadus SCK, WS un SD.

  I2S protokola laika diagramma
I2S protokola laika diagramma

Iepriekš redzamajā diagrammā, pirmkārt, seriālajam pulkstenim ir Frekvence = Iztveršanas ātrums * Biti katram kanālam * Nr. kanāliem). Vārda atlases rinda ir otrā rinda, kas mainās starp “1” labajam kanālam un “0” kreisajam kanālam.

Trešā rinda ir sērijas datu līnija, kurā dati tiek pārraidīti katrā pulksteņa ciklā uz krītošās malas, kas apzīmēta ar punktiem no HIGH līdz LOW.

Turklāt mēs varam pamanīt, ka WS līnija mainās vienu CLK ciklu pirms MSB pārsūtīšanas, kas dod uztvērējam laiku, lai saglabātu iepriekšējo vārdu un notīrītu nākamā vārda ievades reģistru. MSB tiek nosūtīts, kad SCK mainās pēc WS izmaiņām.

Ikreiz, kad dati tiek pārsūtīti starp raidītāju un uztvērēju, radīsies izplatīšanās aizkave

izplatīšanās aizkave = (laika starpība starp ārējo pulksteni un uztvērēja iekšējo pulksteni)+( laika starpība starp iekšējo pulksteni līdz datu saņemšanai).

Lai samazinātu izplatīšanās aizkavi un sinhronizētu datu pārraidi starp raidītāju un uztvērēju, ir nepieciešams, lai raidītājam būtu pulksteņa periods

T > tr – Pieņemt, ka T ir raidītāja pulksteņa periods un tr ir raidītāja minimālais pulksteņa periods.

Saskaņā ar iepriekšminēto nosacījumu, ja mēs uzskatām, piemēram, a raidītājs ar datu pārraides ātrumu 2,5 MHz, tad:

tr = 360ns

pulkstenis Augsts tHC (minimums) >0,35 T.

pulkstenis Zems tLC (minimums>> 0,35T.

Uztvērējs kā vergs ar datu pārraides ātrumu 2,5 MHz, tad:

pulkstenis Augsts tHC (minimums) < 0,35 T

pulkstenis Zems tLC (minimums) < 0,35T.

iestatīšanas laiks tst(minimums) < 0,20T.

I2S protokols Arduino

Šī projekta galvenais mērķis ir izveidot I2S theremin saskarni, izmantojot Arduino I2S bibliotēku. Nepieciešamās sastāvdaļas, lai izveidotu šo projektu, ir; Arduino MKR Zero, Maizes dēlis , Jumper vadi, Adafruit MAX98357A, 3W, 4 omi skaļrunis un RobotGeek Slider.

Arduino I2S bibliotēka vienkārši ļauj pārsūtīt un saņemt digitālos audio datus, izmantojot I2S kopni. Tātad šī piemēra mērķis ir izskaidrot, kā izmantot šo bibliotēku, lai vadītu I2S DAC, lai reproducētu skaņu, kas aprēķināta Arduino dizainā.

Šo ķēdi var savienot kā; Šajā piemērā izmantotajam I2S DAC ir nepieciešami vienkārši trīs vadi, kā arī I2S kopnes barošanas avots. Arduino MKRZero I2S savienojumi ir šādi;

Sērijas dati (SD) uz tapas A6;

Sērijas pulkstenis (SCK) uz pin2;

rāmis vai Word Select (FS) uz pin3;

Darbojas

Būtībā theremin ir divas vadības pogas piķis un skaļums. Tātad šie divi parametri tiek modificēti, pārvietojot divus slaidu potenciometrus, taču varat arī pielāgot tos, lai tos nolasītu. Abi potenciometri ir savienoti sprieguma dalītāja formā, tāpēc, pārvietojot šos potenciometrus, jūs iegūsit vērtības no 0 līdz 1023. Pēc tam šīs vērtības tiek kartētas starp maksimālo un minimālo frekvenci un mazāko un lielāko skaļumu.

  I2S Thermin diagramma
I2S Thermin diagramma

I2S kopnē pārraidītā skaņa ir vienkāršs sinusoidāls vilnis, kura amplitūda un frekvence tiek mainīta, pamatojoties uz potenciometru nolasījumu.

Kods

Kods Theremin saskarnei ar Arduino MKRZero, 2 slīdņu potenciometriem un I2S DAC ir norādīts tālāk.

#include

const int maxFrekvence = 5000; //maksimālā ģenerētā frekvence
const int minFrekvence = 220; //minimālā ģenerētā frekvence
const int maxVolume = 100; //Maksimālais ģenerētās frekvences apjoms
const int minVolume = 0; //min ģenerētās frekvences apjoms
const int sampleRate = 44100; //ģenerētās frekvences paraugs
const int wavSize = 256; //bufera izmērs
īss sinuss [viļņa izmērs]; //buferis, kurā tiek saglabātas sinusa vērtības
const int frekvencePin = A0; //kontakts savienots ar pot, kas nosaka signāla frekvenci
const int amplitūdaPin = A1; //kontakts savienots ar pot, kas nosaka signāla amplitūdu
const int poga = 6; //kontakts, kas savienots ar pogas vadīklu, lai parādītu frekvenci

nederīgs iestatījums ()
{

Serial.begin(9600); //konfigurējiet seriālo portu
// Inicializējiet I2S raidītāju.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println (“Neizdevās inicializēt I2S!”);

kamēr (1);
}

ģenerētSine(); // aizpildiet buferi ar sinusa vērtībām
pinMode(poga, INPUT_PULLUP); //ievietojiet pogas tapu ievades izvilkumā

}
void loop() {

if (digitalRead(button) == LOW)

{

pludiņa frekvence = karte(analogRead(frekvencePin), 0, 1023, minFrekvence, maxFrequency); //kartes biežums
int amplitūda = karte(analogRead(amplititudePin), 0, 1023, minTipums, maxVolume); //kartes amplitūda
playWave(frekvence, 0,1, amplitūda); //atskaņot skaņu
//drukāt vērtības uz sērijas
Serial.print('Biežums = ');
Serial.println(frekvence);
Serial.print('Amplitūda = ');
Serial.println(amplitūda);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 izmanto, lai nebūtu mazi skaitļi
}
}
void playWave(peldošā frekvence, peldošās sekundes, int amplitūda) {
// Atskaņot norādīto viļņu formas buferi
// sekunžu daudzums.
// Vispirms aprēķiniet, cik izlases ir jāatskaņo, lai tās palaistu
// vēlamajam sekunžu daudzumam.

neparakstītas interācijas = sekundes * sampleRate;

// Tad aprēķiniet ‘ātrumu’, ar kādu mēs pārvietojamies pa vilni
// buferis, pamatojoties uz atskaņotā signāla frekvenci.

peldošā delta = (frekvence * wavSize) / float(sampleRate);

// Tagad pārskatiet visus paraugus un atskaņojiet tos, aprēķinot
// pozīcija viļņu buferī katram laika momentam.

for (neparakstīts int i = 0; i < iterācijas; ++i) {
īsa pozīcija = (unsigned int)(i * delta) % wavSize;
īss paraugs = amplitūda * sinusa[poz];

// Dublējiet paraugu, lai tas tiktu nosūtīts gan uz kreiso, gan uz labo kanālu.
// Šķiet, ka secība ir labais kanāls, kreisais kanāls, ja vēlaties rakstīt
// stereo skaņa.

while (I2S.availableForWrite() < 2);
I2S.rakstīt(paraugs);
I2S.rakstīt(paraugs);

}
}

Atšķirība starp I2C un I2S protokolu

Atšķirība starp I2C un I2S protokolu ir šāda.

2C

I2S

The I2C protokols apzīmē inter-IC autobusu protokolu I2S apzīmē Inter-IC Sound protokolu .
To galvenokārt izmanto, lai palaistu signālus starp integrētajām shēmām, kas novietotas uz līdzīgas PCB. To izmanto digitālo audio ierīču savienošanai.
Tas izmanto divas līnijas starp vairākiem galvenajiem un vergiem, piemēram, SDA un SCL . Tas izmanto trīs rindas WS, SCK un SD.
Tā atbalsta multi-master un vairāku vergu. Tā atbalsta vienu meistaru.
Šis protokols atbalsta CLK stiepšanu. Šim protokolam nav CLK stiepšanās.
I2C ietver papildu starta un apturēšanas bitus. I2S neietver sākuma un apturēšanas bitus.

Priekšrocības

The I2S kopnes priekšrocības iekļaujiet tālāk norādīto.

  • I2S izmanto atsevišķas CLK un sērijas datu līnijas. Tāpēc tam ir ļoti vienkāršs uztvērēju dizains, salīdzinot ar asinhronajām sistēmām.
  • Tā ir viena galvenā ierīce, tāpēc nav problēmu ar datu sinhronizāciju.
  • Mikrofonam, kura pamatā ir I2S o/p, nav nepieciešams analogais priekšējais gals, bet tas tiek izmantots bezvadu mikrofonā, izmantojot digitālo raidītāju. Izmantojot to, jūs varat izveidot pilnīgi digitālu savienojumu starp raidītāju un devēju.

Trūkumi

The I2S kopnes trūkumi iekļaujiet tālāk norādīto.

  • I2S nav ierosināts datu pārsūtīšanai pa kabeļiem.
  • I2S netiek atbalstīts augsta līmeņa lietojumprogrammās.
  • Šim protokolam ir sinhronizācijas problēma starp trim signāla līnijām, kas tiek pamanīta ar lielu bitu pārraides ātrumu un iztveršanas frekvenci. Tātad šī problēma galvenokārt rodas tāpēc, ka pulksteņa līnijās un datu līnijās ir atšķirīgas izplatīšanās aizkaves.
  • I2S neietver kļūdu noteikšanas mehānismu, tāpēc tas var izraisīt kļūdas datu dekodēšanā.
  • To galvenokārt izmanto inter-IC saziņai ar līdzīgu PCB.
  • I2S nav tipisku savienotāju un savienojošo kabeļu, tāpēc dažādi dizaineri izmanto dažādus savienotājus.

Lietojumprogrammas

The I2S protokola lietojumprogrammas iekļaujiet tālāk norādīto.

  • I2S tiek izmantots digitālo audio ierīču savienošanai.
  • Šis protokols tiek plaši izmantots audio datu pārsūtīšanai no DSP vai mikrokontrollera uz audio kodeku, lai atskaņotu audio.
  • Sākotnēji I2S saskarne tiek izmantota CD atskaņotāju dizainā. Tagad to var atrast, kur starp IC tiek sūtīti digitālie audio dati.
  • I2S tiek izmantots DSP, audio ADC, DAC, mikrokontrolleros, izlases ātruma pārveidotājos utt.
  • I2S ir īpaši izstrādāts izmantošanai starp integrētajām shēmām digitālo audio datu pārraidei.
  • Šim protokolam ir galvenā loma mikrokontrollera un tā perifērijas ierīču savienošanā, kad I2S koncentrējas uz audio datu pārraidi starp digitālajām audio ierīcēm.

Tādējādi tas viss attiecas uz pārskatu par I2S protokola specifikācija kas ietver darbību, atšķirības un tās lietojumus. I²S ir 3 vadu sinhronais seriālais protokols izmanto digitālā stereo audio pārsūtīšanai starp divām integrētajām shēmām. The I2S protokola analizators ir signāla dekodētājs, kas ietver visus DigiView loģiskos analizatorus. Šī DigiView programmatūra vienkārši nodrošina plašas meklēšanas, navigācijas, eksportēšanas, mērīšanas, diagrammas un drukāšanas iespējas visu veidu signāliem. Šeit jums ir jautājums, kas ir I3C protokols?