I2S Protocol : Paggawa, Mga Pagkakaiba, at Mga Aplikasyon Nito

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Mga digital system at ang mga kinakailangan ng data ng audio nito sa loob ng Mga Mobile Handset, Computer at Home Automation kapansin-pansing nagbago ang mga produkto sa paglipas ng panahon. Ang signal ng audio mula sa o papunta sa mga processor ay nagiging digitalized. Ang data na ito sa iba't ibang mga system ay pinoproseso sa pamamagitan ng maraming mga device tulad ng Mga DSP , ADCs, DACs, Digital I/O interface, atbp. Upang ang mga device na ito ay makapag-communicate ng audio data sa isa't isa, kinakailangan ang karaniwang protocol. Ang isa ay ang I2S protocol. Ito ay isang serial bus interface, na idinisenyo ni Philip Semiconductor noong Pebrero 1986 para sa digital audio interface sa pagitan ng mga device. Tinatalakay ng artikulong ito ang isang pangkalahatang-ideya ng I 2S protocol gumagana ito sa mga application.


Ano ang I2S Protocol?

Ang protocol na ginagamit upang magpadala ng digital audio data mula sa isang device patungo sa isa pang device ay kilala bilang I2S o Inter-IC Sound protocol. Ang protocol na ito ay nagpapadala ng PCM (pulse-code modulated) audio data mula sa isang IC patungo sa isa pa sa loob ng isang elektronikong aparato. Ang I2S ay gumaganap ng isang mahalagang papel sa pagpapadala ng mga audio file na paunang na-record mula sa isang MCU patungo sa isang DAC o amplifier. Ang protocol na ito ay maaari ding gamitin upang i-digitize ang audio gamit ang isang mikropono. Walang compression sa loob ng mga protocol ng I2S, kaya hindi mo maaaring i-play ang OGG o MP3 o iba pang mga format ng audio na nagpapaliit sa audio, gayunpaman, maaari mong i-play ang mga WAV file.



Mga tampok

Ang Mga tampok ng I2S protocol isama ang mga sumusunod.

  • Mayroon itong 8 hanggang 32 data bits para sa bawat sample.
  • Naantala ang Tx & Rx FIFO.
  • Sinusuportahan nito ang DMA.
  • 16-bit, 32-bit, 48-bit, o 64-bit na panahon ng pagpili ng salita.
  • Sabay-sabay na bi-directional audio streaming.
  • 8-bit, 16-bit, at 24-bit na lapad ng sample.
  • Ito ay may iba't ibang sample rate.
  • Ang rate ng data ay hanggang 96 kHz sa pamamagitan ng 64-bit na panahon ng pagpili ng salita.
  • Interleaved stereo FIFOs o Independent right & left channel FIFOs
  • Independiyenteng paganahin ng Tx & Rx.

Gumagana ang I2S Communication Protocol

Ang I2S protocol ng komunikasyon ay isang 3 Wire protocol na simpleng humahawak ng audio data sa pamamagitan ng 3-line serial bus na kinabibilangan ng SCK (Continuous Serial Clock), WS (Word Select) at SD (Serial Data).



3-Wire Connection ng I2S:

SCK

Ang SCK o Serial Clock ay ang unang linya ng I2S protocol na kilala rin bilang BCLK o bit clock line na ginagamit upang makuha ang data sa isang katulad na cycle. Ang serial clock frequency ay simpleng tinukoy sa pamamagitan ng paggamit ng formula tulad ng Frequency = Sample Rate x Bits para sa bawat channel x no. ng mga channel.

WS

Sa I2S communication protocol, ang WS o word select ay ang linya na kilala rin bilang FS (Frame Select) wire na naghihiwalay sa kanan o kaliwang channel.

Kung WS = 0 pagkatapos ay ginagamit ang kaliwang channel o channel-1.

Kung WS = 1 pagkatapos ay ang tamang channel o channel-2 ay ginagamit.

SD

Ang Serial Data o SD ay ang huling wire kung saan ipinapadala ang payload sa loob ng 2 complement. Kaya, napakahalaga na ang MSB ay unang inilipat, dahil ang parehong transmitter at receiver ay maaaring magsama ng iba't ibang haba ng salita. Kaya, kailangang kilalanin ng transmitter o ng receiver kung gaano karaming mga bits ang ipinadala.

  • Kung ang haba ng salita ng receiver ay mas malaki kaysa sa transmitter, ang salita ay pinaikli (LSB bits ay nakatakda sa zero).
  • Kung ang haba ng salita ng receiver ay mas mababa kaysa sa haba ng salita ng transmitter, hindi papansinin ang mga LSB bits.

Ang tagapaghatid maaaring ipadala ang data alinman sa leading edge o trailing edge ng clock pulse . Ito ay maaaring i-configure sa kaukulang mga rehistro ng kontrol . Ngunit ang receiver latches ang serial data at WS lamang sa nangungunang gilid ng clock pulse . Ang transmitter ay nagpapadala lamang ng data pagkatapos ng isang pulso ng orasan pagkatapos ng pagbabago sa WS. Ginagamit ng receiver ang WS signal para sa pag-synchronize ng serial data.

Mga Bahagi ng Network ng I2S

Kapag maraming bahagi ng I2S ang konektado sa isa't isa, ito ay tinatawag na isang I2S network. Kasama sa bahagi ng network na ito ang iba't ibang pangalan at iba't ibang function din. Kaya, ang sumusunod na diagram ay nagpapakita ng 3 magkakaibang network. Dito ginagamit ang ESP NodeMCU board bilang transmitter at isang I2S audio breakout board ang ginagamit bilang receiver. Ang tatlong wire na ginamit para ikonekta ang transmitter at receiver ay SCK, WS & SD.

  Mga Bahagi ng Network ng I2S
Mga Bahagi ng Network ng I2S

Sa unang diagram, ang transmitter (Tx) ang master kaya kinokontrol nito ang SCK (serial clock) at WS (word select) na mga linya.

Sa pangalawang diagram, ang receiver ay ang master. Kaya't ang parehong mga linya ng SCK at WS ay nagsisimula mula sa receiver at nagtatapos ang transmitter.

Sa ikatlong diagram, ang isang panlabas na controller ay konektado sa mga node sa loob ng network na gumagana tulad ng master device. Kaya ang device na ito ay bumubuo ng SCK at WS.

Sa itaas-lahat ng mga network ng I2S, mayroon lamang isang master device na magagamit at maraming iba pang mga bahagi na nagpapadala o tumatanggap ng sound data.

Sa I2S anumang device ay maaaring maging master sa pamamagitan ng pagbibigay ng signal ng orasan.

I2S Timing Diagram

Para sa mas mahusay na pag-unawa sa I2S at sa functionality nito, mayroon kaming I2S communication protocol timing diagram na ipinapakita sa ibaba. Ang timing diagram ng I2S protocol ay ipinapakita sa ibaba na kinabibilangan ng tatlong wire na SCK, WS at SD.

  I2S Protocol Timing Diagram
I2S Protocol Timing Diagram

Sa diagram sa itaas, una, ang serial clock  ay mayroong Frequency = Sample Rate * Bits para sa bawat channel * no. ng mga channel). Ang salitang piling linya ay ang pangalawang linya na nagbabago sa pagitan ng '1' para sa kanang channel at '0' para sa kaliwang channel.

Ang ikatlong linya ay ang serial data line kung saan ang data ay ipinapadala sa bawat clock cycle sa bumabagsak na gilid na may mga tuldok mula HIGH hanggang LOW.

Bilang karagdagan, mapapansin natin na ang linya ng WS ay nag-iiba-iba ng isang CLK cycle bago maipadala ang MSB na nagbibigay ng oras sa receiver para sa pag-imbak ng naunang salita at i-clear ang input register para sa susunod na salita. Ipinapadala ang MSB kapag nagbago ang SCK pagkatapos magbago ang WS.

Sa tuwing ang isang data ay ipinadala sa pagitan ng transmitter at receiver magkakaroon ng pagkaantala sa pagpapalaganap  na magiging

pagkaantala ng pagpapalaganap = (kaiba ng oras sa pagitan ng panlabas na orasan at ng panloob na orasan ng tatanggap )+( pagkakaiba ng oras sa pagitan ng panloob na orasan hanggang kapag natanggap ang data).

Upang mabawasan ang pagkaantala ng pagpapalaganap at para sa pag-synchronize ng paghahatid ng data sa pagitan ng transmitter at ng receiver  kinakailangan na ang transmitter ay may panahon ng orasan  

T > tr  – Upang ipagpalagay na ang T ay ang panahon ng orasan ng transmitter at ang tr ay ang pinakamababang panahon ng orasan ng transmitter.

Sa ilalim ng kondisyon sa itaas kung isasaalang-alang natin halimbawa a transmitter  na may rate ng paghahatid ng data na 2.5MHz pagkatapos ay:

tr = 360ns

orasan Mataas na tHC (minimum) >0.35 T.

orasan Mababang tLC (minimum> > 0.35T.

Receiver bilang isang alipin na may rate ng paghahatid ng data na 2.5MHz pagkatapos ay:

orasan Mataas na tHC (minimum) < 0.35 T

orasan Mababang tLC (minimum) < 0.35T.

oras ng pag-setup tst(minimum) < 0.20T.

I2S Protocol Arduino

Ang pangunahing layunin ng proyektong ito ay gumawa ng I2S  theremin interface gamit ang Arduino I2S library. Ang mga kinakailangang sangkap para gawin ang proyektong ito ay; Arduino MKR Zero, Breadboard , Jumper wires, Adafruit MAX98357A, 3W, 4 ohms speaker, at RobotGeek Slider.

Ang Arduino I2S library ay nagbibigay-daan lamang sa iyo na magpadala at tumanggap ng digital audio data sa I2S bus. Kaya ang halimbawang ito ay nagta-target na ipaliwanag kung paano gamitin ang library na ito upang himukin ang isang I2S DAC para sa muling paggawa ng tunog na nakalkula sa disenyo ng Arduino.

Ang circuit na ito ay maaaring konektado bilang; Ang I2S DAC na ginamit sa halimbawang ito ay nangangailangan lamang ng tatlong wire pati na rin ang power supply para sa I2S bus. Ang mga koneksyon para sa I2S sa Arduino MKRZero ay sumusunod bilang;

Serial Data (SD) sa pin A6;

Serial Clock (SCK) sa pin2;

Ang frame o Word Select (FS) sa pin3;

Nagtatrabaho

Karaniwan, ang theremin ay may dalawang kontrol sa pitch at volume. Kaya, ang dalawang parameter na ito ay binago sa pamamagitan ng paglipat ng dalawang slide potentiometer, gayunpaman, maaari mo ring ayusin ang mga ito upang mabasa ang mga ito. Ang dalawang potentiometer ay konektado sa isang boltahe na anyo ng divider, kaya ang paglipat ng mga potentiometer na ito ay makakakuha ka ng mga halaga mula 0 hanggang 1023. Pagkatapos nito, ang mga halagang ito ay namamapa sa pagitan ng maximum at minimum na frequency at ang pinakamaliit at pinakamataas na volume.

  I2S Thermin Diagram
I2S Thermin Diagram

Ang tunog na ipinadala sa I2S bus ay isang simpleng sine wave na ang amplitude at frequency ay binago batay sa pagbabasa ng mga potentiometer.

Code

Ang code sa interface ng Theremin sa isang Arduino MKRZero, 2-slider potentiometers at isang I2S DAC ay ibinibigay sa ibaba.

#include

const int maxFrequency = 5000; //maximum na nabuong dalas
const int minFrequency = 220; //minimum na nabuong dalas
const int maxVolume = 100; //max volume ng nabuong frequency
const int minVolume = 0; //min volume ng nabuong frequency
const int sampleRate = 44100; //samplerate ng nabuong frequency
const int wavSize = 256; //laki ng buffer
maikling sine[wavSize]; //buffer kung saan nakaimbak ang mga halaga ng sine
const int frequencyPin = A0; //pin konektado sa palayok na tumutukoy sa dalas ng signal
const int amplitudePin = A1; //pin na konektado sa palayok na tumutukoy sa amplitude ng signal
pindutan ng const int = 6; //pin na nakakonekta sa control ng button  upang ipakita ang dalas

void setup()
{

Serial.begin(9600); // i-configure ang serial port
// Simulan ang I2S transmitter.
kung (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('Nabigong simulan ang I2S!');

habang (1);
}

generateSine(); // punan ang buffer ng mga halaga ng sine
pinMode(button, INPUT_PULLUP); //ilagay ang button pin sa input pullup

}
void loop() {

kung (digitalRead(button) == LOW)

{

float frequency = mapa(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); // dalas ng mapa
int amplitude = mapa(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); // amplitude ng mapa
playWave(frequency, 0.1, amplitude); //magpatugtog ng tunog
//print value sa serial
Serial.print(“Dalas = “);
Serial.println(frequency);
Serial.print(“Amplitude = “);
Serial.println(amplitude);

}

}
void generateSine() {
para sa (int i = 0; i
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 ay ginagamit upang walang maliit na numero
}
}
void playWave(float frequency, float seconds, int amplitude) {
// I-play muli ang ibinigay na waveform buffer para sa tinukoy
// dami ng segundo.
// Unang kalkulahin kung gaano karaming mga sample ang kailangang i-play pabalik upang tumakbo
// para sa nais na dami ng mga segundo.

unsigned int iteration = segundo * sampleRate;

// Pagkatapos ay kalkulahin ang 'bilis' kung saan tayo gumagalaw sa alon
// buffer batay sa dalas ng tono na pinapatugtog.

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

// Ngayon i-loop ang lahat ng mga sample at i-play ang mga ito, kinakalkula ang
// posisyon sa loob ng wave buffer para sa bawat sandali sa oras.

para sa (unsigned int i = 0; i < iteration; ++i) {
maikling pos = (unsigned int)(i * delta) % wavSize;
maikling sample = amplitude * sine[pos];

// I-duplicate ang sample para maipadala ito sa kaliwa at kanang channel.
// Lumilitaw na ang order ay ang tamang channel, kaliwang channel kung gusto mong magsulat
// tunog ng stereo.

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

}
}

Pagkakaiba sa pagitan ng I2C at I2S Protocol

Ang pagkakaiba sa pagitan ng I2C at I2S Protocol ay kinabibilangan ng mga sumusunod.

2C

I2S

Ang I2C protocol ibig sabihin ay inter-IC bus protocol Ang I2S ay kumakatawan sa Inter-IC Sound protocol .
Ito ay pangunahing ginagamit upang magpatakbo ng mga signal sa mga integrated circuit na inilagay sa isang katulad na PCB. Ito ay ginagamit para sa pagkonekta ng mga digital na audio device.
Gumagamit ito ng dalawang linya sa pagitan ng ilang mga master at alipin tulad ng SDA at SCL . Gumagamit ito ng tatlong linyang WS, SCK , at SD.
Sinusuportahan nito ang multi-master at multi-slave. Sinusuportahan nito ang isang solong master.
Sinusuportahan ng protocol na ito ang CLK stretching. Ang protocol na ito ay walang CLK stretching.
Kasama sa I2C ang mga karagdagang overhead start at stop bit. Hindi kasama sa I2S ang anumang start at stop bits.

Mga kalamangan

Ang mga pakinabang ng I2S bus isama ang mga sumusunod.

  • Gumagamit ang I2S ng magkahiwalay na linya ng CLK at serial data. Kaya mayroon itong napakasimpleng disenyo ng receiver kumpara sa mga asynchronous system.
  • Isa itong master device kaya walang isyu sa pag-synchronize ng data.
  • Ang mikroponong batay sa I2S o/p ay hindi nangangailangan ng isang analog na dulo sa harap ngunit ginagamit sa loob ng isang wireless na mikropono sa pamamagitan ng paggamit ng isang digital transmitter. Sa paggamit nito, maaari kang magkaroon ng ganap na digital na koneksyon sa pagitan ng transmitter at transducer.

Mga disadvantages

Ang disadvantages ng I2S bus isama ang mga sumusunod.

  • Ang I2S ay hindi iminungkahi para sa paglilipat ng data sa pamamagitan ng mga cable.
  • Ang I2S ay hindi suportado sa loob ng mataas na antas ng mga aplikasyon.
  • Ang protocol na ito ay may problema sa pag-synchronize sa pagitan ng tatlong linya ng signal na napansin sa mataas na bit rate at dalas ng sampling. Kaya ang problemang ito ay pangunahing nangyayari dahil sa pagkakaiba-iba ng mga pagkaantala sa pagpapalaganap sa mga linya ng orasan at mga linya ng data.
  • Hindi kasama sa I2S ang isang mekanismo ng pagtuklas ng error, kaya maaari itong magdulot ng mga error sa loob ng pag-decode ng data.
  • Ito ay pangunahing ginagamit para sa inter-IC na komunikasyon sa isang katulad na PCB.
  • Walang mga tipikal na connector at interconnecting cable para sa I2S, kaya iba't ibang designer ang gumagamit ng iba't ibang connector.

Mga aplikasyon

Ang mga aplikasyon ng I2S protocol isama ang mga sumusunod.

  • Ginagamit ang I2S para sa pagkonekta ng mga digital na audio device.
  • Ang protocol na ito ay malawakang ginagamit sa paglilipat ng data ng audio mula sa isang DSP o microcontroller patungo sa isang audio codec upang mag-play ng audio.
  • Sa una, ang interface ng I2S ay ginagamit sa loob ng mga disenyo ng CD player. Ngayon, makikita na kung saan ipinapadala ang digital audio data sa pagitan ng mga IC.
  • Ginagamit ang I2S sa mga DSP, audio ADC, DAC, microcontroller, sample rate converter, atbp.
  • Ang I2S ay partikular na idinisenyo upang gamitin sa pagitan ng mga integrated circuit para sa pakikipag-ugnayan ng digital audio data.
  • Ang protocol na ito ay gumaganap ng isang mahalagang papel sa pagkonekta sa microcontroller at  mga peripheral na device nito kapag ang I2S ay nakatutok sa audio data transmission sa pagitan ng mga digital audio device.

Kaya, ito ay tungkol sa isang pangkalahatang-ideya ng I2S protocol na detalye na kinabibilangan ng pagtatrabaho, mga pagkakaiba, at mga aplikasyon nito. Ang I²S ay isang 3 wire synchronous serial protocol ginagamit upang maglipat ng digital stereo audio sa pagitan ng dalawang integrated circuit. Ang I2S Protocol Analyzer ay isang signal decoder na kinabibilangan ng lahat ng DigiView Logic Analyzers. Ang DigiView software na ito ay nagbibigay lamang ng malawak na paghahanap, nabigasyon, pag-export, pagsukat, plot at mga kakayahan sa pag-print sa lahat ng uri ng signal. Narito ang isang tanong para sa iyo, ano ang I3C protocol?