Protocollo I2S: funzionamento, differenze e sue applicazioni

Prova Il Nostro Strumento Per Eliminare I Problemi





Sistemi digitali e requisiti relativi ai dati audio all'interno di telefoni cellulari, computer e Domotica i prodotti sono cambiati radicalmente in un periodo di tempo. Il segnale audio da o verso i processori viene digitalizzato. Questi dati in diversi sistemi vengono elaborati attraverso molti dispositivi come DSP , ADC, DAC, interfacce I/O digitali, ecc. Affinché questi dispositivi possano comunicare dati audio tra loro è necessario un protocollo standard. Uno di questi è il protocollo I2S. È un'interfaccia bus seriale, progettata da Philip Semiconductor nel febbraio 1986 per l'interfaccia audio digitale tra i dispositivi. Questo articolo discute una panoramica di I protocollo 2S sta lavorando con le applicazioni.


Che cos'è il protocollo I2S?

Il protocollo utilizzato per trasmettere dati audio digitali da un dispositivo a un altro dispositivo è noto come protocollo I2S o Inter-IC Sound. Questo protocollo trasmette dati audio PCM (pulse-code modulated) da un circuito integrato all'altro all'interno di un dispositivo elettronico. I2S svolge un ruolo chiave nella trasmissione di file audio preregistrati da un MCU a un DAC o amplificatore. Questo protocollo può essere utilizzato anche per digitalizzare l'audio utilizzando un microfono. Non c'è compressione all'interno dei protocolli I2S, quindi non puoi riprodurre OGG o MP3 o altri formati audio che condensano l'audio, tuttavia puoi riprodurre file WAV.



Caratteristiche

Il Funzionalità del protocollo I2S include il seguente.

  • Ha da 8 a 32 bit di dati per ogni campione.
  • Interruzioni FIFO Tx e Rx.
  • Supporta DMA.
  • Periodo di selezione della parola a 16 bit, 32 bit, 48 bit o 64 bit.
  • Streaming audio bidirezionale simultaneo.
  • Larghezza del campione a 8 bit, 16 bit e 24 bit.
  • Ha frequenze di campionamento diverse.
  • La velocità dei dati è fino a 96 kHz durante il periodo di selezione della parola a 64 bit.
  • FIFO stereo interleaved o FIFO dei canali destro e sinistro indipendenti
  • Abilitazione indipendente di Tx & Rx.

Protocollo di comunicazione I2S funzionante

L'I2S protocollo di comunicazione è un protocollo a 3 fili che gestisce semplicemente i dati audio tramite un bus seriale a 3 linee che include SCK (Continuous Serial Clock), WS (Word Select) e SD (Serial Data).



Collegamento a 3 fili di I2S:

SCK

L'SCK o Serial Clock è la prima riga del protocollo I2S, noto anche come BCLK o bit clock line, utilizzato per ottenere i dati su un ciclo simile. La frequenza di clock seriale viene semplicemente definita utilizzando la formula come Frequenza = Frequenza di campionamento x Bit per ciascun canale x n. di canali.

WS

Nel protocollo di comunicazione I2S, il WS o word select è la linea nota anche come filo FS (Frame Select) che separa il canale destro o sinistro.

Se WS = 0 viene utilizzato il canale sinistro o il canale 1.

Se WS = 1 viene utilizzato il canale destro o il canale 2.

SD

Il Serial Data o SD è l'ultimo filo in cui viene trasmesso il carico utile entro 2 complementi. Quindi, è molto significativo che l'MSB venga prima trasferito, perché sia ​​il trasmettitore che il ricevitore possono includere lunghezze di parola diverse. Pertanto, il trasmettitore o il ricevitore devono riconoscere quanti bit vengono trasmessi.

  • Se la lunghezza della parola del ricevitore è maggiore di quella del trasmettitore, la parola viene accorciata (i bit LSB vengono impostati a zero).
  • Se la lunghezza della parola del ricevitore è inferiore alla lunghezza della parola del trasmettitore, i bit LSB vengono ignorati.

Il trasmettitore può inviare i dati sia sul fronte di salita o di discesa dell'impulso di clock . Questo può essere configurato nel corrispondente registri di controllo . Ma il il ricevitore blocca i dati seriali e WS solo sul fronte di salita dell'impulso di clock . Il trasmettitore trasmette i dati solo dopo un impulso di clock dopo la modifica in WS. Il ricevitore utilizza il segnale WS per la sincronizzazione dei dati seriali.

Componenti di rete I2S

Quando più componenti I2S sono collegati tra loro, questa viene chiamata rete I2S. Il componente di questa rete include nomi diversi e anche funzioni diverse. Quindi, il diagramma seguente mostra 3 reti diverse. Qui una scheda ESP NodeMCU viene utilizzata come trasmettitore e una scheda di breakout audio I2S viene utilizzata come ricevitore. I tre fili utilizzati per collegare il trasmettitore e il ricevitore sono SCK, WS e SD.

  Componenti di rete I2S
Componenti di rete I2S

Nel primo diagramma, il trasmettitore (Tx) è il master, quindi controlla le linee SCK (serial clock) e WS (word select).

Nel secondo diagramma, il ricevitore è il master. Quindi entrambe le linee SCK e WS iniziano dal ricevitore e il trasmettitore termina.

Nel terzo diagramma, un controller esterno è collegato ai nodi all'interno della rete che funziona come il dispositivo master. Quindi questo dispositivo genera SCK & WS.

Nelle reti I2S, soprattutto, è disponibile un solo dispositivo master e molti altri componenti che trasmettono o ricevono dati sonori.

In I2S qualsiasi dispositivo può essere il master fornendo il segnale di clock.

Diagramma di temporizzazione I2S

Per una migliore comprensione dell'I2S e delle sue funzionalità, abbiamo il diagramma di temporizzazione del protocollo di comunicazione I2S mostrato di seguito. Di seguito è mostrato il diagramma temporale del protocollo I2S che include tre fili SCK, WS e SD.

  Diagramma di temporizzazione del protocollo I2S
Diagramma di temporizzazione del protocollo I2S

Nel diagramma sopra, in primo luogo, l'orologio seriale ha una frequenza = frequenza di campionamento * bit per ciascun canale * n. di canali). La riga di selezione della parola è la seconda riga che cambia tra '1' per il canale destro e '0' per il canale sinistro.

La terza riga è la linea di dati seriali in cui i dati vengono trasmessi ad ogni ciclo di clock sul fronte di discesa indicato con punti da ALTO a BASSO.

Inoltre, possiamo notare che la linea WS varia di un ciclo CLK prima che l'MSB venga trasmesso, il che dà al ricevitore il tempo di memorizzare la parola precedente e cancellare il registro di input per la parola successiva. L'MSB viene inviato quando SCK cambia dopo le modifiche WS.

Ogni volta che un dato viene trasmesso tra il trasmettitore e il ricevitore ci sarebbe un ritardo di propagazione, che sarebbe

ritardo di propagazione = (differenza di tempo tra l'orologio esterno e l'orologio interno del ricevitore)+( differenza di tempo tra l'orologio interno e la ricezione dei dati).

Per ridurre al minimo il ritardo di propagazione e per sincronizzare la trasmissione dei dati tra trasmettitore e ricevitore  è necessario che il trasmettitore abbia un periodo di clock  di

V > ma  – Assumere che T sia il periodo di clock del trasmettitore e tr sia il periodo di clock minimo del trasmettitore.

Nella condizione di cui sopra se consideriamo ad esempio a trasmettitore  con una velocità di trasmissione dati di 2,5 MHz, quindi:

tr = 360 ns

clock High tHC (minimo) >0,35 T.

clock tLC basso (minimo > > 0,35T.

Ricevitore come slave con velocità di trasmissione dati 2,5 MHz quindi:

clock High tHC (minimo) < 0,35 T

clock tLC basso (minimo) < 0,35T.

tempo di configurazione tst(minimo) < 0,20T.

Protocollo I2S Arduino

L'obiettivo principale di questo progetto è realizzare un'interfaccia Theremin I2S utilizzando la libreria Arduino I2S. I componenti richiesti per realizzare questo progetto sono; Arduino MKR Zero, Tagliere , Cavi jumper, Adafruit MAX98357A, altoparlante da 3 W, 4 ohm e Slider RobotGeek.

La libreria Arduino I2S ti consente semplicemente di trasmettere e ricevere dati audio digitali sul bus I2S. Quindi questo esempio mira a spiegare come utilizzare questa libreria per pilotare un DAC I2S per riprodurre il suono calcolato nel progetto Arduino.

Questo circuito può essere collegato come; Il DAC I2S utilizzato in questo esempio richiede semplicemente tre fili e un'alimentazione per il bus I2S. Le connessioni per l'I2S su Arduino MKRZero seguono come;

Serial Data (SD) sul pin A6;

Orologio seriale (SCK) sul pin2;

Il frame o Word Select (FS) su pin3;

Lavorando

Fondamentalmente, il theremin ha due controlli di altezza e volume. Quindi, questi due parametri vengono modificati spostando due potenziometri a scorrimento, tuttavia puoi anche regolarli per leggerli. I due potenziometri sono collegati in un divisore di tensione, quindi spostando questi potenziometri otterrai valori da 0 a 1023. Successivamente, questi valori vengono mappati tra la frequenza massima e minima e il volume minimo e massimo.

  Diagramma I2S Termin
Diagramma I2S Termin

Il suono trasmesso sul bus I2S è una semplice onda sinusoidale la cui ampiezza e frequenza vengono modificate in base alla lettura dei potenziometri.

Codice

Di seguito è riportato il codice per interfacciare un Theremin con un Arduino MKRZero, potenziometri a 2 cursori e un DAC I2S.

#includi

const int maxFrequency = 5000; //frequenza massima generata
const int minFrequency = 220; //frequenza minima generata
const int volume massimo = 100; //volume massimo della frequenza generata
const int minVolume = 0; //volume minimo della frequenza generata
const int sampleRate = 44100; //campiona la frequenza generata
const int wavSize = 256; //dimensione buffer
seno corto[wavSize]; //buffer in cui sono memorizzati i valori del seno
cost int frequencyPin = A0; //pin collegato al pot che determina la frequenza del segnale
const int ampiezzaPin = A1; //pin collegato al pot che determina l'ampiezza del segnale
pulsante int const = 6; //pin collegato al controllo del pulsante  per visualizzare la frequenza

configurazione vuota ()
{

Serial.begin(9600); //configura la porta seriale
// Inizializza il trasmettitore I2S.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('Impossibile inizializzare I2S!');

mentre (1);
}

generateSine(); // riempie il buffer con i valori del seno
pinMode(pulsante, INPUT_PULLUP); //metti il ​​pin del pulsante nel pullup di input

}
ciclo vuoto() {

if (digitalRead(pulsante) == LOW)

{

frequenza float = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //frequenza della mappa
int amplitude = map(analogRead(ampliitudePin), 0, 1023, minVolume, maxVolume); //ampiezza della mappa
playWave(frequenza, 0,1, ampiezza); //riprodurre l'audio
//stampa i valori su seriale
Serial.print('Frequenza = ');
Serial.println(frequenza);
Serial.print('Ampiezza = ');
Serial.println(ampiezza);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 è usato per non avere numeri piccoli
}
}
void playWave(frequenza float, secondi float, ampiezza int) {
// Riproduce il buffer della forma d'onda fornito per l'oggetto specificato
// quantità di secondi.
// Calcola innanzitutto quanti campioni devono essere riprodotti per l'esecuzione
// per la quantità di secondi desiderata.

iterazioni senza segno = secondi * sampleRate;

// Quindi calcola la 'velocità' con cui ci muoviamo attraverso l'onda
// buffer basato sulla frequenza del tono riprodotto.

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

// Ora scorrere tutti i campioni e riprodurli, calcolando il
// posizione all'interno del wave buffer per ogni momento.

for (int senza segno i = 0; i < iterazioni; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
campione corto = ampiezza * seno[pos];

// Duplica il campione in modo che venga inviato a entrambi i canali sinistro e destro.
// Sembra che l'ordine sia il canale destro, canale sinistro se vuoi scrivere
// suono stereo.

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

}
}

Differenza tra protocollo I2C e I2S

La differenza tra il protocollo I2C e I2S include quanto segue.

2C

I2S

Il protocollo I2C sta per protocollo bus inter-IC I2S sta per protocollo Inter-IC Sound .
Viene utilizzato principalmente per eseguire segnali tra circuiti integrati posizionati su un PCB simile. Viene utilizzato per il collegamento di dispositivi audio digitali.
Utilizza due linee tra diversi master e slave come SDA e SCL . Utilizza tre linee WS, SCK e SD.
Supporta multi-master e multi-slave. Supporta un unico master.
Questo protocollo supporta lo stretching CLK. Questo protocollo non ha lo stretching CLK.
I2C include bit di avvio e arresto aggiuntivi. I2S non include bit di avvio e arresto.

Vantaggi

Il vantaggi del bus I2S include il seguente.

  • I2S utilizza CLK e linee dati seriali separate. Quindi ha un design del ricevitore molto semplice rispetto ai sistemi asincroni.
  • È un unico dispositivo master, quindi non ci sono problemi con la sincronizzazione dei dati.
  • Il microfono basato su I2S o/p non necessita di un front-end analogico ma viene utilizzato all'interno di un microfono wireless utilizzando un trasmettitore digitale. Usando questo, puoi avere una connessione totalmente digitale tra il trasmettitore e il trasduttore.

Svantaggi

Il svantaggi del bus I2S include il seguente.

  • I2S non è proposto per il trasferimento di dati tramite cavi.
  • I2S non è supportato nelle applicazioni di alto livello.
  • Questo protocollo presenta un problema di sincronizzazione tra tre linee di segnale che viene rilevato a velocità di trasmissione e frequenza di campionamento elevate. Quindi questo problema si verifica principalmente a causa della variazione dei ritardi di propagazione tra le linee di clock e le linee dati.
  • I2S non include un meccanismo di rilevamento degli errori, quindi può causare errori nella decodifica dei dati.
  • Viene utilizzato principalmente per la comunicazione tra circuiti integrati su un PCB simile.
  • Non ci sono connettori e cavi di interconnessione tipici per I2S, quindi designer diversi utilizzano connettori diversi.

Applicazioni

Il applicazioni del protocollo I2S include il seguente.

  • I2S viene utilizzato per il collegamento di dispositivi audio digitali.
  • Questo protocollo è ampiamente utilizzato nel trasferimento di dati audio da un DSP o un microcontrollore a un codec audio per riprodurre l'audio.
  • Inizialmente, l'interfaccia I2S viene utilizzata nei progetti di lettori CD. Ora può essere trovato dove i dati audio digitali vengono inviati tra circuiti integrati.
  • I2S è utilizzato in DSP, ADC audio, DAC, microcontrollori, convertitori di frequenza di campionamento, ecc.
  • I2S è particolarmente progettato per l'uso tra circuiti integrati per la comunicazione di dati audio digitali.
  • Questo protocollo svolge un ruolo chiave nella connessione del microcontrollore e dei suoi dispositivi periferici quando l'I2S si concentra sulla trasmissione di dati audio tra dispositivi audio digitali.

Quindi, si tratta di una panoramica del Specifica del protocollo I2S che include il lavoro, le differenze e le sue applicazioni. I²S è un protocollo seriale sincrono a 3 fili utilizzato per trasferire audio stereo digitale tra due circuiti integrati. Il Analizzatore di protocollo I2S è un decodificatore di segnale che include tutti gli analizzatori logici DigiView. Questo software DigiView fornisce semplicemente ampie capacità di ricerca, navigazione, esportazione, misurazione, tracciatura e stampa a tutti i tipi di segnali. Ecco una domanda per te, qual è il protocollo I3C?