I2S-Protokoll: Arbeiten, Unterschiede und seine Anwendungen

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





Digitale Systeme und ihre Anforderungen an Audiodaten in Mobiltelefonen, Computern und Heimautomatisierung Produkte haben sich im Laufe der Zeit stark verändert. Audiosignale von oder zu den Prozessoren werden digitalisiert. Diese Daten in verschiedenen Systemen werden durch viele Geräte wie verarbeitet DSPs , ADCs, DACs, digitale E/A-Schnittstellen usw. Damit diese Geräte Audiodaten miteinander kommunizieren können, ist ein Standardprotokoll erforderlich. Eines davon ist das I2S-Protokoll. Es ist eine serielle Busschnittstelle, die von Philip Semiconductor im Februar 1986 für die digitale Audioschnittstelle zwischen den Geräten entwickelt wurde. Dieser Artikel gibt einen Überblick über I 2S-Protokoll seine Arbeit mit Anwendungen.


Was ist das I2S-Protokoll?

Das Protokoll, das verwendet wird, um digitale Audiodaten von einem Gerät zu einem anderen Gerät zu übertragen, ist als I2S- oder Inter-IC-Sound-Protokoll bekannt. Dieses Protokoll überträgt PCM-Audiodaten (pulse-code modulated) von einem IC zu einem anderen innerhalb eines elektronischen Geräts. I2S spielt eine Schlüsselrolle bei der Übertragung von Audiodateien, die von einer MCU zu einem DAC oder Verstärker aufgezeichnet wurden. Dieses Protokoll kann auch verwendet werden, um Audio mit einem Mikrofon zu digitalisieren. Es gibt keine Komprimierung innerhalb von I2S-Protokollen, daher können Sie OGG oder MP3 oder andere Audioformate, die das Audio verdichten, nicht abspielen, Sie können jedoch WAV-Dateien abspielen.



Merkmale

Das Funktionen des I2S-Protokolls füge folgendes hinzu.

  • Es hat 8 bis 32 Datenbits für jedes Sample.
  • Tx- und Rx-FIFO-Interrupts.
  • Es unterstützt DMA.
  • 16-Bit-, 32-Bit-, 48-Bit- oder 64-Bit-Wortauswahlperiode.
  • Gleichzeitiges bidirektionales Audio-Streaming.
  • 8-Bit-, 16-Bit- und 24-Bit-Abtastbreite.
  • Es hat unterschiedliche Abtastraten.
  • Die Datenrate beträgt bis zu 96 kHz über die 64-Bit-Wortauswahlperiode.
  • Verschachtelte Stereo-FIFOs oder unabhängige Rechts- und Linkskanal-FIFOs
  • Unabhängige Aktivierung von Tx & Rx.

I2S-Kommunikationsprotokoll funktioniert

Das I2S Kommunikationsprotokoll ist ein 3-Draht-Protokoll, das Audiodaten einfach über einen seriellen Bus mit 3 Leitungen verarbeitet, der SCK (Continuous Serial Clock), WS (Word Select) und SD (Serial Data) umfasst.



3-Draht-Anschluss von I2S:

SCK

Der SCK oder Serial Clock ist die erste Zeile des I2S-Protokolls, das auch als BCLK oder Bit-Clock-Leitung bekannt ist und verwendet wird, um die Daten in einem ähnlichen Zyklus zu erhalten. Die serielle Taktfrequenz wird einfach definiert, indem die Formel wie Frequenz = Abtastrate x Bits für jeden Kanal x Anzahl verwendet wird. von Kanälen.

WS

Im I2S-Kommunikationsprotokoll ist die WS- oder Wortauswahl die Leitung, die auch als FS-Leitung (Frame Select) bekannt ist und den rechten oder linken Kanal trennt.

Wenn WS = 0, wird der linke Kanal oder Kanal-1 verwendet.

Wenn WS = 1, dann wird der rechte Kanal oder Kanal-2 verwendet.

SD

Die seriellen Daten oder SD sind die letzte Leitung, auf der die Nutzlast innerhalb von 2 Komplementen übertragen wird. Daher ist es sehr wichtig, dass das MSB zuerst übertragen wird, da sowohl der Sender als auch der Empfänger unterschiedliche Wortlängen enthalten können. Somit muss der Sender oder der Empfänger erkennen, wie viele Bits übertragen werden.

  • Ist die Wortlänge des Empfängers größer als die des Senders, so wird das Wort gekürzt (LSB-Bits werden auf Null gesetzt).
  • Ist die Wortlänge des Empfängers kleiner als die Wortlänge des Senders, werden die LSB-Bits ignoriert.

Das Sender kann die Daten entweder auf die gesendet werden Vorderflanke oder Rückflanke des Taktimpulses . Dies kann im entsprechenden konfiguriert werden Steuerregister . Aber die Der Empfänger verriegelt die seriellen Daten und WS nur an der Vorderflanke des Taktimpulses . Der Sender sendet Daten nur nach einem Takt nach Änderung von WS. Der Empfänger verwendet das WS-Signal zur Synchronisation der seriellen Daten.

I2S-Netzwerkkomponenten

Wenn mehrere I2S-Komponenten miteinander verbunden sind, spricht man von einem I2S-Netzwerk. Die Komponente dieses Netzwerks umfasst unterschiedliche Namen und auch unterschiedliche Funktionen. Das folgende Diagramm zeigt also 3 verschiedene Netzwerke. Hier kommt als Sender ein ESP NodeMCU Board und als Empfänger ein I2S Audio Breakout Board zum Einsatz. Die drei Drähte, die zum Verbinden von Sender und Empfänger verwendet werden, sind SCK, WS und SD.

  I2S-Netzwerkkomponenten
I2S-Netzwerkkomponenten

Im ersten Diagramm ist der Sender (Tx) der Master, also steuert er die Leitungen SCK (serielle Uhr) und WS (Wortauswahl).

Im zweiten Diagramm ist der Empfänger der Master. Sowohl die SCK- als auch die WS-Leitungen beginnen also am Empfänger und am Senderende.

Im dritten Diagramm ist ein externer Controller mit den Knoten innerhalb des Netzwerks verbunden, der wie das Master-Gerät funktioniert. Dieses Gerät generiert also den SCK & WS.

In den vor allem I2S-Netzwerken gibt es nur ein einziges Master-Gerät und viele andere Komponenten, die Tondaten senden oder empfangen.

In I2S kann jedes Gerät der Master sein, indem es das Taktsignal bereitstellt.

I2S-Timing-Diagramm

Zum besseren Verständnis des I2S und seiner Funktionalität haben wir das unten gezeigte Zeitdiagramm des I2S-Kommunikationsprotokolls. Das Timing-Diagramm des I2S-Protokolls ist unten dargestellt und umfasst drei Drähte SCK, WS & SD.

  Zeitdiagramm des I2S-Protokolls
Zeitdiagramm des I2S-Protokolls

Im obigen Diagramm hat die serielle Uhr zunächst eine Frequenz = Abtastrate * Bits für jeden Kanal * Anzahl. von Kanälen). Die Wortauswahlzeile ist die zweite Zeile, die zwischen „1“ für den rechten Kanal und „0“ für den linken Kanal wechselt.

Die dritte Leitung ist die serielle Datenleitung, auf der die Daten bei jedem Taktzyklus auf der mit Punkten gekennzeichneten fallenden Flanke von HIGH nach LOW übertragen werden.

Außerdem können wir feststellen, dass die WS-Leitung einen CLK-Zyklus variiert, bevor das MSB gesendet wird, was dem Empfänger Zeit gibt, das frühere Wort zu speichern und das Eingangsregister für das nächste Wort zu löschen. Das MSB wird gesendet, wenn SCK sich nach WS-Änderungen ändert.

Immer wenn Daten zwischen Sender und Empfänger übertragen werden, kommt es zu einer Laufzeitverzögerung

Laufzeitverzögerung = (Zeitdifferenz zwischen der externen Uhr und der internen Uhr des Empfängers) + (Zeitdifferenz zwischen der internen Uhr bis zum Zeitpunkt des Datenempfangs).

Um die Ausbreitungsverzögerung zu minimieren und um die Datenübertragung zwischen dem Sender und dem Empfänger zu synchronisieren, ist es erforderlich, dass der Sender eine Taktperiode von

T > tr  – Es sei angenommen, dass T die Taktperiode des Senders und tr die minimale Taktperiode des Senders ist.

Betrachten wir unter obiger Bedingung zum Beispiel a Sender mit der Datenübertragungsrate 2,5MHz dann:

tr = 360 ns

Uhr Hoch tHC (Minimum) >0,35 T.

Uhr Low tLC (Minimum > > 0,35T.

Empfänger als Slave mit der Datenübertragungsrate 2,5MHz dann:

Takt Hoch tHC (Minimum) < 0,35 T

Uhr Low tLC (Minimum) < 0,35 T.

Rüstzeit tst(Minimum) < 0,20T.

I2S-Protokoll Arduino

Das Hauptziel dieses Projekts ist die Erstellung einer I2S-Theremin-Schnittstelle unter Verwendung der Arduino I2S-Bibliothek. Die erforderlichen Komponenten für dieses Projekt sind: Arduino MKR Null, Brotschneidebrett , Schaltdrähte, Adafruit MAX98357A, 3 W, 4 Ohm Lautsprecher und RobotGeek Slider.

Mit der Arduino I2S-Bibliothek können Sie einfach digitale Audiodaten über den I2S-Bus senden und empfangen. Dieses Beispiel zielt also darauf ab, zu erklären, wie diese Bibliothek verwendet wird, um einen I2S-DAC zur Wiedergabe von im Arduino-Design berechnetem Ton zu steuern.

Diese Schaltung kann angeschlossen werden als; Der in diesem Beispiel verwendete I2S-DAC benötigt lediglich drei Adern sowie eine Stromversorgung für den I2S-Bus. Die Anschlüsse für das I2S auf dem Arduino MKRZero folgen wie folgt:

Serielle Daten (SD) auf Pin A6;

Serial Clock (SCK) auf Pin2;

Der Frame oder Word Select (FS) auf Pin3;

Arbeiten

Grundsätzlich hat das Theremin zwei Regler für Tonhöhe und Lautstärke. Diese beiden Parameter werden also durch Bewegen von zwei Schiebepotentiometern geändert, Sie können sie jedoch auch zum Lesen anpassen. Die beiden Potentiometer sind in Form eines Spannungsteilers verbunden, so dass Sie durch Bewegen dieser Potentiometer Werte von 0 bis 1023 erhalten. Danach werden diese Werte zwischen der maximalen und minimalen Frequenz und der geringsten und höchsten Lautstärke abgebildet.

  I2S Thermin-Diagramm
I2S Thermin-Diagramm

Der auf dem I2S-Bus übertragene Ton ist eine einfache Sinuswelle, deren Amplitude und Frequenz basierend auf dem Lesen der Potentiometer modifiziert werden.

Code

Der Code zum Verbinden eines Theremins mit einem Arduino MKRZero, 2-Schieberegler-Potentiometern und einem I2S-DAC ist unten angegeben.

#include

const int maxFrequency = 5000; //maximale generierte Frequenz
const int minFrequenz = 220; // minimale generierte Frequenz
const int maxVolume = 100; //maximale Lautstärke der generierten Frequenz
const int minVolume = 0; //min Lautstärke der generierten Frequenz
const int sampleRate = 44100; //Samplerate der generierten Frequenz
const int wavSize = 256; //Puffergröße
kurzer Sinus[wavSize]; //Puffer, in dem die Sinuswerte gespeichert werden
const int frequencyPin = A0; // Pin mit dem Topf verbunden, der die Frequenz des Signals bestimmt
const int amplitudePin = A1; // Pin mit dem Topf verbunden, der die Amplitude des Signals bestimmt
const int-Taste = 6; // Pin verbunden mit der Schaltflächensteuerung, um die Frequenz anzuzeigen

ungültige Einrichtung ()
{

Serial.begin (9600); // Konfigurieren Sie die serielle Schnittstelle
// Initialisieren Sie den I2S-Sender.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println ('I2S konnte nicht initialisiert werden!');

während (1);
}

generiertSinus (); // Puffer mit Sinuswerten füllen
PinMode (Taste, INPUT_PULLUP); // Setzen Sie den Knopfstift in den Eingangs-Pullup

}
Leere Schleife () {

if (digitalRead(button) == LOW)

{

Float-Frequenz = map (analogRead (frequencyPin), 0, 1023, minFrequency, maxFrequency); // Kartenfrequenz
int amplitude = map (analogRead (amplitudePin), 0, 1023, minVolume, maxVolume); // Map-Amplitude
playWave (Frequenz, 0,1, Amplitude); //Ton abspielen
// Werte auf Serial drucken
Serial.print ('Frequenz = ');
Serial.println (Frequenz);
Serial.print ('Amplitude = ');
Serial.println (Amplitude);

}

}
void generateSine() {
for (int i = 0; i
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 wird verwendet, um keine kleinen Zahlen zu haben
}
}
void playWave (Float-Frequenz, Float-Sekunden, Int-Amplitude) {
// Wiedergabe des bereitgestellten Wellenformpuffers für die angegebene
// Anzahl Sekunden.
// Zuerst berechnen, wie viele Samples wiedergegeben werden müssen, um zu laufen
// für die gewünschte Anzahl von Sekunden.

unsigned int iterations = Sekunden * sampleRate;

// Berechnen Sie dann die „Geschwindigkeit“, mit der wir uns durch die Welle bewegen
// Puffer basierend auf der Frequenz des gespielten Tons.

Float Delta = (Frequenz * WavSize) / Float (SampleRate);

// Schleifen Sie nun alle Samples durch und spielen Sie sie ab, indem Sie die berechnen
// Position innerhalb des Wellenpuffers für jeden Zeitpunkt.

for (unsigned int i = 0; i < Iterationen; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
kurzes Sample = Amplitude * Sinus[pos];

// Dupliziere das Sample, sodass es sowohl an den linken als auch an den rechten Kanal gesendet wird.
// Es scheint, dass die Reihenfolge der rechte Kanal ist, der linke Kanal, wenn Sie schreiben möchten
// Stereoton.

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

}
}

Unterschied zwischen I2C- und I2S-Protokoll

Der Unterschied zwischen I2C- und I2S-Protokoll umfasst Folgendes.

2C

I2S

Das I2C-Protokoll steht für Inter-IC-Bus-Protokoll Das I2S steht für Inter-IC Sound Protocol .
Es wird hauptsächlich verwendet, um Signale zwischen integrierten Schaltkreisen zu führen, die auf einer ähnlichen Leiterplatte platziert sind. Es wird zum Anschließen digitaler Audiogeräte verwendet.
Es verwendet zwei Leitungen zwischen mehreren Mastern und Slaves wie SDA und SCL . Es verwendet drei Zeilen WS, SCK & SD.
Es unterstützt Multi-Master und Multi-Slave. Es unterstützt einen einzelnen Master.
Dieses Protokoll unterstützt CLK-Stretching. Dieses Protokoll hat kein CLK-Stretching.
I2C enthält zusätzliche Overhead-Start- und Stoppbits. I2S enthält keine Start- und Stoppbits.

Vorteile

Das Vorteile des I2S-Busses füge folgendes hinzu.

  • I2S verwendet separate CLK- und serielle Datenleitungen. Es hat also im Vergleich zu asynchronen Systemen sehr einfache Empfängerdesigns.
  • Es ist ein einzelnes Master-Gerät, sodass es kein Problem mit der Datensynchronisierung gibt.
  • Das auf I2S o/p basierende Mikrofon benötigt kein analoges Frontend, sondern wird innerhalb eines drahtlosen Mikrofons unter Verwendung eines digitalen Senders verwendet. Auf diese Weise können Sie eine vollständig digitale Verbindung zwischen Sender und Wandler herstellen.

Nachteile

Das Nachteile des I2S-Busses füge folgendes hinzu.

  • I2S wird nicht für die Übertragung von Daten über Kabel vorgeschlagen.
  • I2S wird in High-Level-Anwendungen nicht unterstützt.
  • Dieses Protokoll hat ein Synchronisationsproblem zwischen drei Signalleitungen, das bei hoher Bitrate und Abtastfrequenz bemerkt wird. Dieses Problem tritt also hauptsächlich aufgrund der Variation von Ausbreitungsverzögerungen zwischen Taktleitungen und Datenleitungen auf.
  • I2S enthält keinen Fehlererkennungsmechanismus und kann daher Fehler bei der Datendecodierung verursachen.
  • Es wird hauptsächlich für die Inter-IC-Kommunikation auf einer ähnlichen Leiterplatte verwendet.
  • Es gibt keine typischen Steckverbinder und Verbindungskabel für I2S, daher verwenden verschiedene Designer unterschiedliche Steckverbinder.

Anwendungen

Das Anwendungen des I2S-Protokolls füge folgendes hinzu.

  • I2S wird für den Anschluss digitaler Audiogeräte verwendet.
  • Dieses Protokoll wird häufig bei der Übertragung von Audiodaten von einem DSP oder Mikrocontroller zu einem Audio-Codec zur Wiedergabe von Audio verwendet.
  • Anfänglich wird die I2S-Schnittstelle in CD-Player-Designs verwendet. Jetzt kann es gefunden werden, wo digitale Audiodaten zwischen ICs gesendet werden.
  • I2S wird in DSPs, Audio-ADCs, DACs, Mikrocontrollern, Abtastratenwandlern usw. verwendet.
  • I2S wurde speziell für die Verwendung zwischen integrierten Schaltkreisen zur Übertragung digitaler Audiodaten entwickelt.
  • Dieses Protokoll spielt eine Schlüsselrolle bei der Verbindung des Mikrocontrollers und seiner Peripheriegeräte, wenn sich das I2S auf die Audiodatenübertragung zwischen digitalen Audiogeräten konzentriert.

Hier geht es also um einen Überblick über die I2S-Protokollspezifikation Dazu gehören Arbeiten, Unterschiede und ihre Anwendungen. I²S ist ein synchrones serielles 3-Draht-Protokoll Wird verwendet, um digitales Stereo-Audio zwischen zwei integrierten Schaltkreisen zu übertragen. Das I2S-Protokollanalysator ist ein Signaldecoder, der alle DigiView-Logikanalysatoren enthält. Diese DigiView-Software bietet einfach umfassende Such-, Navigations-, Export-, Mess-, Plot- und Druckfunktionen für alle Arten von Signalen. Hier ist eine Frage an Sie: Was ist das I3C-Protokoll?