Protocole I2S : Fonctionnement, Différences & Ses Applications

Essayez Notre Instrument Pour Éliminer Les Problèmes





Les systèmes numériques et leurs exigences en matière de données audio dans les téléphones mobiles, les ordinateurs et Automatisation de la maison les produits ont radicalement changé au fil du temps. Le signal audio en provenance ou à destination des processeurs est en train de se numériser. Ces données dans différents systèmes sont traitées par de nombreux dispositifs tels que DSP , ADC, DAC, interfaces d'E/S numériques, etc. Pour que ces appareils communiquent des données audio entre eux, un protocole standard est requis. L'un d'entre eux est le protocole I2S. Il s'agit d'une interface de bus série, conçue par Philip Semiconductor en février 1986 pour l'interface audio numérique entre les appareils. Cet article présente un aperçu de I Protocole 2S son travail avec des applications.


Qu'est-ce que le protocole I2S ?

Le protocole utilisé pour transmettre des données audio numériques d'un appareil à un autre appareil est connu sous le nom de protocole I2S ou Inter-IC Sound. Ce protocole transmet des données audio PCM (modulation par impulsions codées) d'un circuit intégré à un autre au sein d'un appareil électronique. I2S joue un rôle clé dans la transmission de fichiers audio pré-enregistrés d'un MCU vers un DAC ou un amplificateur. Ce protocole peut également être utilisé pour numériser l'audio à l'aide d'un microphone. Il n'y a pas de compression dans les protocoles I2S, vous ne pouvez donc pas lire OGG ou MP3 ou d'autres formats audio qui condensent l'audio, cependant, vous pouvez lire des fichiers WAV.



Fonctionnalités

La Fonctionnalités du protocole I2S inclure les éléments suivants.

  • Il a 8 à 32 bits de données pour chaque échantillon.
  • Interruptions FIFO Tx et Rx.
  • Il prend en charge DMA.
  • Période de sélection de mot 16 bits, 32 bits, 48 ​​bits ou 64 bits.
  • Streaming audio bidirectionnel simultané.
  • Largeur d'échantillon 8 bits, 16 bits et 24 bits.
  • Il a différents taux d'échantillonnage.
  • Le débit de données peut atteindre 96 kHz pendant la période de sélection de mots de 64 bits.
  • FIFO stéréo entrelacés ou FIFO de canal droit et gauche indépendants
  • Activation indépendante de Tx et Rx.

Fonctionnement du protocole de communication I2S

L'I2S protocole de communication est un protocole à 3 fils qui gère simplement les données audio via un bus série à 3 lignes qui comprend SCK (horloge série continue), WS (sélection de mot) et SD (données série).



Connexion 3 fils d'I2S :

SCK

Le SCK ou Serial Clock est la première ligne du protocole I2S qui est également connu sous le nom de BCLK ou ligne d'horloge binaire qui est utilisée pour obtenir les données sur un cycle similaire. La fréquence d'horloge série est simplement définie en utilisant la formule comme Fréquence = Taux d'échantillonnage x Bits pour chaque canal x nombre. de canaux.

WS

Dans le protocole de communication I2S, le WS ou word select est la ligne également connue sous le nom de fil FS (Frame Select) qui sépare le canal droit ou gauche.

Si WS = 0, alors le canal gauche ou le canal-1 est utilisé.

Si WS = 1, alors le canal droit ou canal-2 est utilisé.

Dakota du Sud

Les données série ou SD sont le dernier fil où la charge utile est transmise dans les 2 compléments. Il est donc très important que le MSB soit d'abord transféré, car l'émetteur et le récepteur peuvent inclure des longueurs de mot différentes. Ainsi, l'émetteur ou le récepteur doit reconnaître combien de bits sont transmis.

  • Si la longueur de mot du récepteur est supérieure à celle de l'émetteur, le mot est raccourci (les bits LSB sont mis à zéro).
  • Si la longueur de mot du récepteur est inférieure à la longueur de mot de l'émetteur, alors les bits LSB sont ignorés.

La émetteur peut envoyer les données soit sur le front montant ou front descendant de l'impulsion d'horloge . Ceci peut être configuré dans le correspondant registres de contrôle . Mais le le récepteur verrouille les données série et WS uniquement sur le front montant de l'impulsion d'horloge . L'émetteur ne transmet des données qu'après une impulsion d'horloge après un changement de WS. Le récepteur utilise le signal WS pour la synchronisation des données série.

Composants réseau I2S

Lorsque plusieurs composants I2S sont connectés les uns aux autres, cela s'appelle un réseau I2S. Le composant de ce réseau comprend différents noms et également différentes fonctions. Ainsi, le schéma suivant montre 3 réseaux différents. Ici, une carte ESP NodeMCU est utilisée comme émetteur et une carte de dérivation audio I2S est utilisée comme récepteur. Les trois fils utilisés pour connecter l'émetteur et le récepteur sont SCK, WS et SD.

  Composants réseau I2S
Composants réseau I2S

Dans le premier schéma, l'émetteur (Tx) est le maître, il contrôle donc les lignes SCK (horloge série) et WS (sélection de mot).

Dans le deuxième schéma, le récepteur est le maître. Ainsi, les lignes SCK et WS partent du récepteur et se terminent par l'émetteur.

Dans le troisième schéma, un contrôleur extérieur est connecté aux nœuds du réseau qui fonctionne comme l'appareil maître. Donc cet appareil génère le SCK & WS.

Dans les réseaux I2S ci-dessus, il n'y a qu'un seul appareil maître disponible et de nombreux autres composants qui transmettent ou reçoivent des données sonores.

Dans I2S, n'importe quel appareil peut être le maître en fournissant le signal d'horloge.

Chronogramme I2S

Pour une meilleure compréhension de l'I2S et de ses fonctionnalités, nous avons le diagramme de synchronisation du protocole de communication I2S illustré ci-dessous. Le chronogramme du protocole I2S est présenté ci-dessous qui comprend trois fils SCK, WS et SD.

  Chronogramme du protocole I2S
Chronogramme du protocole I2S

Dans le schéma ci-dessus, tout d'abord, l'horloge série a une fréquence = taux d'échantillonnage * bits pour chaque canal * non. de chaînes). La ligne de sélection de mots est la deuxième ligne qui change entre « 1 » pour le canal droit et « 0 » pour le canal gauche.

La troisième ligne est la ligne de données série où les données sont transmises à chaque cycle d'horloge sur le front descendant indiqué par des points de HIGH à LOW.

De plus, nous pouvons remarquer que la ligne WS varie d'un cycle CLK avant que le MSB ne soit transmis, ce qui donne au récepteur le temps de stocker le mot précédent et d'effacer le registre d'entrée pour le mot suivant. Le MSB est envoyé lorsque SCK change après que WS change.

Chaque fois qu'une donnée est transmise entre l'émetteur et le récepteur, il y aurait un délai de propagation qui serait

délai de propagation = (différence de temps entre l'horloge externe et l'horloge interne du récepteur)+(différence de temps entre l'horloge interne et le moment où les données sont reçues).

Pour minimiser le délai de propagation et pour la synchronisation de la transmission de données entre l'émetteur et le récepteur, il est nécessaire que l'émetteur ait une période d'horloge de

T > tr  – Supposer que T est la période d'horloge de l'émetteur et tr est la période d'horloge minimale de l'émetteur.

Sous la condition ci-dessus si l'on considère par exemple un transmetteur avec un débit de transmission de données de 2,5 MHz :

tr = 360ns

horloge Haut tHC (minimum) >0,35 T.

horloge tLC bas (minimum > > 0.35T.

Récepteur en tant qu'esclave avec le taux de transmission de données 2,5 MHz, puis :

horloge Haut tHC (minimum) < 0,35 T

horloge tLC bas (minimum) < 0,35T.

temps de réglage tst(minimum) < 0.20T.

Protocole I2S Arduino

L'objectif principal de ce projet est de créer une interface I2S  theremin en utilisant la bibliothèque Arduino I2S. Les composants requis pour réaliser ce projet sont ; Arduino MKR Zéro, Planche à pain , fils de raccordement, Adafruit MAX98357A, haut-parleur 3 W, 4 ohms et RobotGeek Slider.

La bibliothèque Arduino I2S vous permet simplement de transmettre et de recevoir des données audio numériques sur le bus I2S. Cet exemple vise donc à expliquer comment utiliser cette bibliothèque pour piloter un DAC I2S afin de reproduire le son calculé dans la conception Arduino.

Ce circuit peut être connecté comme; Le DAC I2S utilisé dans cet exemple nécessite simplement trois fils ainsi qu'une alimentation pour le bus I2S. Les connexions pour l'I2S sur l'Arduino MKRZero suivent comme suit ;

Données série (SD) sur la broche A6 ;

Horloge série (SCK) sur la broche 2 ;

Le cadre ou Word Select (FS) sur la broche 3 ;

Travail

Fondamentalement, le thérémine a deux commandes de hauteur et de volume. Ainsi, ces deux paramètres sont modifiés en déplaçant deux potentiomètres à glissière, cependant, vous pouvez également les régler pour les lire. Les deux potentiomètres sont connectés sous une forme de diviseur de tension, donc en déplaçant ces potentiomètres, vous obtiendrez des valeurs de 0 à 1023. Après cela, ces valeurs sont mappées entre la fréquence maximale et minimale et le volume le plus faible et le plus élevé.

  Diagramme thermique I2S
Diagramme thermique I2S

Le son transmis sur le bus I2S est une simple onde sinusoïdale dont l'amplitude et la fréquence sont modifiées en fonction de la lecture des potentiomètres.

Code

Le code pour interfacer un Theremin avec un Arduino MKRZero, des potentiomètres à 2 curseurs et un DAC I2S est donné ci-dessous.

#include

const entier maxFrequency = 5000 ; // fréquence maximale générée
const entier minFréquence = 220 ; //fréquence générée minimale
const entier maxVolume = 100 ; // volume max de la fréquence générée
const entier minVolume = 0 ; //volume min de la fréquence générée
const int sampleRate = 44100; // taux d'échantillonnage de la fréquence générée
const entier wavSize = 256 ; //taille du tampon
sinus court[wavSize] ; //buffer dans lequel les valeurs sinusoïdales sont stockées
const int fréquencePin = A0 ; //broche connectée au pot qui détermine la fréquence du signal
const int amplitudePin = A1 ; //broche connectée au pot qui détermine l'amplitude du signal
bouton const int = 6 ; //broche connectée au contrôle du bouton pour afficher la fréquence

void setup()
{

Serial.begin(9600); //configurer le port série
// Initialise l'émetteur I2S.
si (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('Impossible d'initialiser I2S !');

tandis que (1);
}

générerSinus(); // remplit le tampon avec des valeurs sinusoïdales
pinMode(bouton, INPUT_PULLUP); // placez la broche du bouton dans le pullup d'entrée

}
boucle vide() {

si (numériqueRead(bouton) == LOW)

{

fréquence flottante = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //fréquence de la carte
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //map amplitude
playWave(fréquence, 0.1, amplitude); //jouer son
// imprime les valeurs sur le numéro de série
Serial.print('Fréquence = ');
Serial.println(fréquence);
Serial.print('Amplitude = ');
Serial.println(amplitude);

}

}
void generateSine() {
pour (int je = 0; je < wavSize; ++i) {
sinus[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 est utilisé pour ne pas avoir de petits nombres
}
}
void playWave (fréquence flottante, secondes flottantes, amplitude int) {
// Lit le tampon de forme d'onde fourni pour le spécifié
// nombre de secondes.
// Calculez d'abord combien d'échantillons doivent être lus pour s'exécuter
// pendant le nombre de secondes souhaité.

itérations int non signées = secondes * sampleRate ;

// Ensuite, calculez la 'vitesse' à laquelle nous nous déplaçons dans la vague
// tampon basé sur la fréquence de la tonalité en cours de lecture.

float delta = (fréquence * wavSize) / float(sampleRate);

// Maintenant, parcourez tous les échantillons et jouez-les, en calculant le
// position dans le tampon d'ondes pour chaque instant dans le temps.

for (unsigned int i = 0; i < iterations; ++i) {
pos court = (entier non signé)(i * delta) % wavSize ;
échantillon court = amplitude * sinus[pos] ;

// Dupliquer l'échantillon pour qu'il soit envoyé aux canaux gauche et droit.
// Il apparaît que l'ordre est le canal droit, le canal gauche si vous voulez écrire
// son stéréo.

tandis que (I2S.availableForWrite() < 2);
I2S.write(échantillon);
I2S.write(échantillon);

}
}

Différence entre les protocoles I2C et I2S

La différence entre les protocoles I2C et I2S comprend les éléments suivants.

2C

I2S

La Protocole I2C signifie protocole de bus inter-IC L'I2S signifie Inter-IC Sound Protocol .
Il est principalement utilisé pour faire passer des signaux parmi des circuits intégrés placés sur un PCB similaire. Il est utilisé pour connecter des appareils audio numériques.
Il utilise deux lignes entre plusieurs maîtres et esclaves comme SDA et SCL . Il utilise trois lignes WS, SCK et SD.
Il prend en charge le multi-maître et le multi-esclave. Il prend en charge un seul maître.
Ce protocole prend en charge l'étirement CLK. Ce protocole n'a pas d'étirement CLK.
I2C inclut des bits de démarrage et d'arrêt supplémentaires. I2S n'inclut aucun bit de démarrage et d'arrêt.

Avantages

La avantages du bus I2S inclure les éléments suivants.

  • I2S utilise des lignes de données CLK et série séparées. Il a donc des conceptions de récepteur très simples par rapport aux systèmes asynchrones.
  • Il s'agit d'un périphérique maître unique, il n'y a donc aucun problème de synchronisation des données.
  • Le microphone basé sur I2S o/p n'a pas besoin d'un frontal analogique mais est utilisé dans un microphone sans fil à l'aide d'un émetteur numérique. En l'utilisant, vous pouvez avoir une connexion totalement numérique entre l'émetteur et le transducteur.

Désavantages

La inconvénients du bus I2S inclure les éléments suivants.

  • I2S n'est pas proposé pour le transfert de données via des câbles.
  • I2S n'est pas pris en charge dans les applications de haut niveau.
  • Ce protocole a un problème de synchronisation entre trois lignes de signal qui se remarque à un débit binaire élevé et à une fréquence d'échantillonnage élevée. Ce problème se produit donc principalement en raison de la variation des délais de propagation entre les lignes d'horloge et les lignes de données.
  • I2S n'inclut pas de mécanisme de détection d'erreurs, il peut donc provoquer des erreurs lors du décodage des données.
  • Il est principalement utilisé pour la communication inter-IC sur un PCB similaire.
  • Il n'y a pas de connecteurs et de câbles d'interconnexion typiques pour I2S, donc différents concepteurs utilisent différents connecteurs.

Applications

La applications du protocole I2S inclure les éléments suivants.

  • I2S est utilisé pour connecter des appareils audio numériques.
  • Ce protocole est largement utilisé pour transférer des données audio d'un DSP ou d'un microcontrôleur vers un codec audio pour lire de l'audio.
  • Initialement, l'interface I2S est utilisée dans les conceptions de lecteurs de CD. Maintenant, il peut être trouvé où les données audio numériques sont envoyées entre les circuits intégrés.
  • I2S est utilisé dans les DSP, les ADC audio, les DAC, les microcontrôleurs, les convertisseurs de fréquence d'échantillonnage, etc.
  • I2S est particulièrement conçu pour être utilisé entre les circuits intégrés pour communiquer des données audio numériques.
  • Ce protocole joue un rôle clé dans la connexion du microcontrôleur et de ses périphériques lorsque l'I2S se concentre sur la transmission de données audio entre les périphériques audio numériques.

Il s'agit donc d'un aperçu de la Spécification du protocole I2S qui comprend le travail, les différences et ses applications. I²S est un protocole série synchrone à 3 fils utilisé pour transférer l'audio stéréo numérique entre deux circuits intégrés. La Analyseur de protocole I2S est un décodeur de signal qui inclut tous les analyseurs logiques DigiView. Ce logiciel DigiView fournit simplement de larges capacités de recherche, de navigation, d'exportation, de mesure, de tracé et d'impression pour tous les types de signaux. Voici une question pour vous, qu'est-ce que le protocole I3C ?