Πρωτόκολλο I2S: Λειτουργία, Διαφορές & Εφαρμογές του

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Ψηφιακά συστήματα και οι απαιτήσεις δεδομένων ήχου σε φορητές συσκευές, υπολογιστές και Οικιακός αυτοματισμός τα προϊόντα έχουν αλλάξει δραματικά σε μια χρονική περίοδο. Το ηχητικό σήμα από ή προς τους επεξεργαστές ψηφιοποιείται. Αυτά τα δεδομένα σε διαφορετικά συστήματα υποβάλλονται σε επεξεργασία μέσω πολλών συσκευών όπως DSP , ADC, DAC, ψηφιακές διεπαφές εισόδου/εξόδου κ.λπ. Προκειμένου αυτές οι συσκευές να επικοινωνούν δεδομένα ήχου μεταξύ τους απαιτείται ένα τυπικό πρωτόκολλο. Ένα τέτοιο είναι το πρωτόκολλο I2S. Είναι μια διεπαφή σειριακού διαύλου, σχεδιασμένη από τον Philip Semiconductor τον Φεβρουάριο του 1986 για διεπαφή ψηφιακού ήχου μεταξύ των συσκευών. Αυτό το άρθρο εξετάζει μια επισκόπηση του I Πρωτόκολλο 2S λειτουργεί με εφαρμογές.


Τι είναι το Πρωτόκολλο I2S;

Το πρωτόκολλο που χρησιμοποιείται για τη μετάδοση ψηφιακών δεδομένων ήχου από μια συσκευή σε άλλη συσκευή είναι γνωστό ως πρωτόκολλο I2S ή Inter-IC Sound. Αυτό το πρωτόκολλο μεταδίδει δεδομένα ήχου PCM (διαμορφωμένο με παλμικό κώδικα) από το ένα IC στο άλλο μέσα σε μια ηλεκτρονική συσκευή. Το I2S παίζει βασικό ρόλο στη μετάδοση αρχείων ήχου που έχουν προεγγραφεί από μια MCU σε ένα DAC ή ενισχυτή. Αυτό το πρωτόκολλο μπορεί επίσης να χρησιμοποιηθεί για την ψηφιοποίηση ήχου χρησιμοποιώντας μικρόφωνο. Δεν υπάρχει συμπίεση στα πρωτόκολλα I2S, επομένως δεν μπορείτε να αναπαράγετε OGG ή MP3 ή άλλες μορφές ήχου που συμπυκνώνουν τον ήχο, ωστόσο, μπορείτε να αναπαράγετε αρχεία WAV.



Χαρακτηριστικά

ο Χαρακτηριστικά πρωτοκόλλου I2S περιλαμβάνουν τα ακόλουθα.

  • Έχει 8 έως 32 bit δεδομένων για κάθε δείγμα.
  • Tx & Rx FIFO διακόπτει.
  • Υποστηρίζει DMA.
  • Περίοδος επιλογής λέξης 16-bit, 32-bit, 48-bit ή 64-bit.
  • Ταυτόχρονη αμφίδρομη ροή ήχου.
  • Πλάτος δείγματος 8 bit, 16 bit και 24 bit.
  • Έχει διαφορετικά ποσοστά δειγματοληψίας.
  • Ο ρυθμός μετάδοσης δεδομένων είναι έως και 96 kHz κατά τη διάρκεια της περιόδου επιλογής λέξης 64 bit.
  • Διαπλεκόμενα στερεοφωνικά FIFO ή Ανεξάρτητα FIFO δεξιού και αριστερού καναλιού
  • Ανεξάρτητη ενεργοποίηση Tx & Rx.

Λειτουργεί το πρωτόκολλο επικοινωνίας I2S

Το I2S πρωτόκολλο επικοινωνίας είναι ένα πρωτόκολλο 3 καλωδίων που απλώς χειρίζεται δεδομένα ήχου μέσω ενός σειριακού διαύλου 3 γραμμών που περιλαμβάνει SCK (Συνεχές σειριακό ρολόι), WS (Επιλογή λέξεων) & SD (Σειριακά δεδομένα).



Σύνδεση 3 καλωδίων του I2S:

SCK

Το SCK ή το σειριακό ρολόι είναι η πρώτη γραμμή του πρωτοκόλλου I2S, το οποίο είναι επίσης γνωστό ως BCLK ή γραμμή ρολογιού bit που χρησιμοποιείται για τη λήψη δεδομένων σε παρόμοιο κύκλο. Η συχνότητα σειριακού ρολογιού ορίζεται απλά χρησιμοποιώντας τον τύπο όπως Συχνότητα = Ρυθμός δειγματοληψίας x Bit για κάθε κανάλι x αριθ. των καναλιών.

WS

Στο πρωτόκολλο επικοινωνίας I2S, το WS ή επιλογή λέξης είναι η γραμμή που είναι επίσης γνωστή ως καλώδιο FS (Frame Select) που χωρίζει το δεξί ή το αριστερό κανάλι.

Εάν WS = 0, τότε χρησιμοποιείται το αριστερό κανάλι ή το κανάλι-1.

Εάν WS = 1 τότε χρησιμοποιείται το σωστό κανάλι ή κανάλι-2.

SD

Τα σειριακά δεδομένα ή SD είναι το τελευταίο καλώδιο όπου το ωφέλιμο φορτίο μεταδίδεται εντός 2 συμπληρωμάτων. Επομένως, είναι πολύ σημαντικό να μεταφερθεί πρώτα το MSB, επειδή τόσο ο πομπός όσο και ο δέκτης μπορεί να περιλαμβάνουν διαφορετικά μήκη λέξεων. Έτσι, ο πομπός ή ο δέκτης πρέπει να αναγνωρίσει πόσα bit μεταδίδονται.

  • Εάν το μήκος λέξης του δέκτη είναι μεγαλύτερο από τον πομπό, τότε η λέξη συντομεύεται (τα bit LSB έχουν μηδενιστεί).
  • Εάν το μήκος λέξης του δέκτη είναι μικρότερο από το μήκος λέξης του πομπού, τότε τα bit LSB αγνοούνται.

ο πομπός μπορεί να στείλει τα δεδομένα είτε στο το μπροστινό άκρο ή το πίσω άκρο του παλμού του ρολογιού . Αυτό μπορεί να ρυθμιστεί στο αντίστοιχο μητρώα ελέγχου . Αλλά το Ο δέκτης ασφαλίζει τα σειριακά δεδομένα και το WS μόνο στο μπροστινό άκρο του παλμού ρολογιού . Ο πομπός μεταδίδει δεδομένα μόνο μετά από έναν παλμό ρολογιού μετά από αλλαγή στο WS. Ο δέκτης χρησιμοποιεί το σήμα WS για το συγχρονισμό των σειριακών δεδομένων.

Στοιχεία δικτύου I2S

Όταν πολλά στοιχεία I2S συνδέονται μεταξύ τους, τότε αυτό ονομάζεται δίκτυο I2S. Το στοιχείο αυτού του δικτύου περιλαμβάνει διαφορετικά ονόματα και επίσης διαφορετικές λειτουργίες. Έτσι, το παρακάτω διάγραμμα δείχνει 3 διαφορετικά δίκτυα. Εδώ μια πλακέτα ESP NodeMCU χρησιμοποιείται ως πομπός και μια πλακέτα διακοπής ήχου I2S ως δέκτης. Τα τρία καλώδια που χρησιμοποιούνται για τη σύνδεση του πομπού και του δέκτη είναι τα SCK, WS & SD.

  Στοιχεία δικτύου I2S
Στοιχεία δικτύου I2S

Στο πρώτο διάγραμμα, ο πομπός (Tx) είναι ο κύριος, επομένως ελέγχει τις γραμμές SCK (σειριακό ρολόι) & WS (επιλογή λέξης).

Στο δεύτερο διάγραμμα, ο δέκτης είναι ο κύριος. Έτσι και οι δύο γραμμές SCK & WS ξεκινούν από τον δέκτη και τελειώνει ο πομπός.

Στο τρίτο διάγραμμα, ένας εξωτερικός ελεγκτής είναι συνδεδεμένος με τους κόμβους εντός του δικτύου που λειτουργεί όπως η κύρια συσκευή. Έτσι αυτή η συσκευή δημιουργεί το SCK & WS.

Στα προπαντός δίκτυα I2S, υπάρχει διαθέσιμη μόνο μία κύρια συσκευή και πολλά άλλα στοιχεία που μεταδίδουν ή λαμβάνουν δεδομένα ήχου.

Στο I2S οποιαδήποτε συσκευή μπορεί να είναι ο κύριος παρέχοντας το σήμα ρολογιού.

Διάγραμμα χρονισμού I2S

Για καλύτερη κατανόηση του I2S και της λειτουργικότητάς του, έχουμε το διάγραμμα χρονισμού του πρωτοκόλλου επικοινωνίας I2S που φαίνεται παρακάτω. Το διάγραμμα χρονισμού του πρωτοκόλλου I2S φαίνεται παρακάτω το οποίο περιλαμβάνει τρία καλώδια SCK, WS & SD.

  Διάγραμμα χρονισμού πρωτοκόλλου I2S
Διάγραμμα χρονισμού πρωτοκόλλου I2S

Στο παραπάνω διάγραμμα, πρώτα, το σειριακό ρολόι  έχει Συχνότητα = Ρυθμός δειγματοληψίας * Bit για κάθε κανάλι * αρ. των καναλιών). Η γραμμή επιλογής λέξης είναι η δεύτερη γραμμή που αλλάζει μεταξύ «1» για το δεξί κανάλι και «0» για το αριστερό κανάλι.

Η τρίτη γραμμή είναι η γραμμή σειριακών δεδομένων όπου τα δεδομένα μεταδίδονται σε κάθε κύκλο ρολογιού στην πτώση που σημειώνεται με τελείες από ΥΨΗΛΟ έως ΧΑΜΗΛΟ.

Επιπλέον, μπορούμε να παρατηρήσουμε ότι η γραμμή WS μεταβάλλεται κατά έναν κύκλο CLK πριν από τη μετάδοση του MSB, γεγονός που δίνει στον δέκτη χρόνο για την αποθήκευση της προηγούμενης λέξης και την εκκαθάριση του καταχωρητή εισόδου για την επόμενη λέξη. Το MSB αποστέλλεται όταν αλλάζει το SCK μετά τις αλλαγές του WS.

Κάθε φορά που μεταδίδονται δεδομένα μεταξύ του πομπού και του δέκτη, θα υπάρχει καθυστέρηση μετάδοσης  που θα ήταν

καθυστέρηση διάδοσης = (διαφορά ώρας μεταξύ του εξωτερικού ρολογιού και του εσωτερικού ρολογιού του δέκτη )+( διαφορά ώρας μεταξύ του εσωτερικού ρολογιού έως τη λήψη δεδομένων).

Για να ελαχιστοποιηθεί η καθυστέρηση μετάδοσης και για το συγχρονισμό της μετάδοσης δεδομένων μεταξύ του πομπού και του δέκτη  απαιτείται ο πομπός να έχει μια περίοδο ρολογιού  

T > tr  – Να υποθέσουμε ότι T είναι η περίοδος ρολογιού του πομπού και tr είναι η ελάχιστη περίοδος ρολογιού του πομπού.

Υπό την παραπάνω συνθήκη αν λάβουμε υπόψη για παράδειγμα α πομπός  με ρυθμό μετάδοσης δεδομένων 2,5 MHz, τότε:

tr = 360ns

ρολόι Υψηλό tHC (ελάχιστο) >0,35 T.

ρολόι Χαμηλό tLC (ελάχιστο> > 0,35 Τ.

Ο δέκτης ως slave με ρυθμό μετάδοσης δεδομένων 2,5 MHz τότε:

ρολόι Υψηλό tHC (ελάχιστο) < 0,35 T

ρολόι Χαμηλό tLC (ελάχιστο) < 0,35 Τ.

χρόνος ρύθμισης tst (ελάχιστος) < 0,20 T.

Πρωτόκολλο I2S Arduino

Ο κύριος στόχος αυτού του έργου είναι να δημιουργήσει μια διεπαφή I2S  theremin χρησιμοποιώντας τη βιβλιοθήκη Arduino I2S. Τα απαιτούμενα στοιχεία για την πραγματοποίηση αυτού του έργου είναι: Arduino MKR Zero, Breadboard , Καλώδια Jumper, Adafruit MAX98357A, 3W, ηχείο 4 ohms και RobotGeek Slider.

Η βιβλιοθήκη Arduino I2S σας επιτρέπει απλώς να μεταδίδετε και να λαμβάνετε ψηφιακά δεδομένα ήχου μέσω του διαύλου I2S. Έτσι, αυτό το παράδειγμα στοχεύει να εξηγήσει πώς να χρησιμοποιήσετε αυτήν τη βιβλιοθήκη για να οδηγήσετε ένα I2S DAC για την αναπαραγωγή ήχου που υπολογίζεται στο σχέδιο Arduino.

Αυτό το κύκλωμα μπορεί να συνδεθεί ως? Το I2S DAC που χρησιμοποιείται σε αυτό το παράδειγμα απαιτεί απλώς τρία καλώδια καθώς και μια παροχή ρεύματος για το δίαυλο I2S. Οι συνδέσεις για το I2S στο Arduino MKRZero ακολουθούν ως εξής:

Σειριακά δεδομένα (SD) στον ακροδέκτη A6.

Σειριακό ρολόι (SCK) στο pin2.

Το πλαίσιο ή το Word Select (FS) στο pin3.

Εργαζόμενος

Βασικά, η θερεμίνη έχει δύο χειριστήρια τόνου και έντασης. Έτσι, αυτές οι δύο παράμετροι τροποποιούνται μετακινώντας δύο ποτενσιόμετρα ολίσθησης, ωστόσο, μπορείτε επίσης να τα προσαρμόσετε για να τα διαβάσετε. Τα δύο ποτενσιόμετρα συνδέονται σε μια μορφή διαιρέτη τάσης, επομένως μετακινώντας αυτά τα ποτενσιόμετρα θα λάβετε τιμές από 0 έως 1023. Μετά από αυτό, αυτές οι τιμές αντιστοιχίζονται μεταξύ της μέγιστης & ελάχιστης συχνότητας και της ελάχιστης και μεγαλύτερης έντασης.

  Διάγραμμα I2S Thermin
Διάγραμμα I2S Thermin

Ο ήχος που εκπέμπεται στο δίαυλο I2S είναι ένα απλό ημιτονοειδές κύμα του οποίου το πλάτος και η συχνότητα τροποποιούνται με βάση την ένδειξη των ποτενσιομέτρων.

Κώδικας

Ο κώδικας για τη διασύνδεση ενός Theremin με ένα Arduino MKRZero, ποτενσιόμετρα 2 ρυθμιστών και ένα I2S DAC δίνεται παρακάτω.

#include

const int maxFrequency = 5000; //μέγιστη παραγόμενη συχνότητα
const int minΣυχνότητα = 220; //ελάχιστη παραγόμενη συχνότητα
const int maxVolume = 100; //μέγιστος όγκος της παραγόμενης συχνότητας
const int minVolume = 0; //min όγκος της παραγόμενης συχνότητας
const int sampleRate = 44100; //δειγματοληψία της παραγόμενης συχνότητας
const int wavSize = 256; //μέγεθος buffer
κοντό ημίτονο[wavSize]; //buffer στην οποία είναι αποθηκευμένες οι ημιτονοειδείς τιμές
const int συχνότηταPin = A0; //pin συνδεδεμένο στο pot που καθορίζει τη συχνότητα του σήματος
const int amplitudePin = A1; //pin συνδεδεμένο στο pot που καθορίζει το πλάτος του σήματος
κουμπί const int = 6; //καρφίτσα συνδεδεμένη με το κουμπί ελέγχου  για την εμφάνιση της συχνότητας

void setup()
{

Serial.begin(9600); //Ρύθμιση παραμέτρων της σειριακής θύρας
// Εκκίνηση του πομπού I2S.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println('Αποτυχία προετοιμασίας του I2S!');

ενώ (1);
}

generateSine(); // γέμισμα buffer με ημιτονοειδείς τιμές
pinMode(κουμπί, INPUT_PULLUP); //βάλτε την καρφίτσα του κουμπιού στο pullup εισόδου

}
void loop() {

if (digitalRead(button) == LOW)

{

συχνότητα float = χάρτης(αναλογικήΑνάγνωση(frequencyPin), 0, 1023, minFrequency, maxFrequency); //συχνότητα χάρτη
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //πλάτος χάρτη
playWave (συχνότητα, 0,1, πλάτος); //αναπαραγωγή ήχου
//εκτύπωση τιμών σε σειρά
Serial.print('Συχνότητα = ');
Serial.println(συχνότητα);
Serial.print('Amplitude = ');
Serial.println(amplitude);

}

}
void generateSine() {
για (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); Το //100 χρησιμοποιείται για να μην υπάρχουν μικροί αριθμοί
}
}
void playWave (συχνότητα float, float seconds, int πλάτος) {
// Αναπαραγωγή του παρεχόμενου buffer κυματομορφής για το καθορισμένο
// ποσότητα δευτερολέπτων.
// Υπολογίστε πρώτα πόσα δείγματα χρειάζονται για αναπαραγωγή για να τρέξουν
// για την επιθυμητή ποσότητα δευτερολέπτων.

ανυπόγραφες επαναλήψεις = δευτερόλεπτα * SampleRate;

// Στη συνέχεια υπολογίστε την «ταχύτητα» με την οποία κινούμαστε μέσα στο κύμα
// buffer με βάση τη συχνότητα του ήχου που παίζεται.

float delta = (συχνότητα * wavSize) / float(sampleRate);

// Τώρα πραγματοποιήστε βρόχο σε όλα τα δείγματα και παίξτε τα, υπολογίζοντας το
// θέση εντός του buffer κυμάτων για κάθε χρονική στιγμή.

for (ανυπόγραφο int i = 0; i < επαναλήψεις; ++i) {
short pos = (unsigned int)(i *delta) % wavSize;
σύντομο δείγμα = πλάτος * sine[pos];

// Αντιγράψτε το δείγμα ώστε να σταλεί και στο αριστερό και στο δεξί κανάλι.
// Φαίνεται ότι η σειρά είναι το δεξί κανάλι, το αριστερό κανάλι αν θέλετε να γράψετε
// στερεοφωνικός ήχος.

ενώ (I2S.availableForWrite() < 2);
I2S.write(sample);
I2S.write(sample);

}
}

Διαφορά μεταξύ πρωτοκόλλου I2C και I2S

Η διαφορά μεταξύ του πρωτοκόλλου I2C και I2S περιλαμβάνει τα ακόλουθα.

2C

I2S

ο Πρωτόκολλο I2C σημαίνει πρωτόκολλο διαύλου inter-IC Το I2S σημαίνει πρωτόκολλο ήχου Inter-IC .
Χρησιμοποιείται κυρίως για την εκτέλεση σημάτων μεταξύ ολοκληρωμένων κυκλωμάτων που τοποθετούνται σε παρόμοια PCB. Χρησιμοποιείται για τη σύνδεση ψηφιακών συσκευών ήχου.
Χρησιμοποιεί δύο γραμμές μεταξύ πολλών masters & slaves όπως SDA & SCL . Χρησιμοποιεί τρεις γραμμές WS, SCK  & SD.
Υποστηρίζει multi-master & multi-slave. Υποστηρίζει ένα μόνο master.
Αυτό το πρωτόκολλο υποστηρίζει τέντωμα CLK. Αυτό το πρωτόκολλο δεν έχει τέντωμα CLK.
Το I2C περιλαμβάνει πρόσθετα εναέρια bits εκκίνησης και διακοπής. Το I2S δεν περιλαμβάνει μπιτ έναρξης και διακοπής.

Πλεονεκτήματα

ο πλεονεκτήματα του διαύλου I2S περιλαμβάνουν τα ακόλουθα.

  • Το I2S χρησιμοποιεί ξεχωριστές γραμμές δεδομένων CLK & σειριακών δεδομένων. Έτσι έχει πολύ απλά σχέδια δεκτών σε σύγκριση με ασύγχρονα συστήματα.
  • Είναι μια ενιαία κύρια συσκευή, επομένως δεν υπάρχει πρόβλημα με το συγχρονισμό δεδομένων.
  • Το μικρόφωνο που βασίζεται σε I2S o/p δεν χρειάζεται αναλογικό μπροστινό μέρος, αλλά χρησιμοποιείται σε ασύρματο μικρόφωνο χρησιμοποιώντας ψηφιακό πομπό. Χρησιμοποιώντας αυτό, μπορείτε να έχετε μια εντελώς ψηφιακή σύνδεση μεταξύ του πομπού και του μορφοτροπέα.

Μειονεκτήματα

ο μειονεκτήματα του διαύλου I2S περιλαμβάνουν τα ακόλουθα.

  • Το I2S δεν προτείνεται για μεταφορά δεδομένων μέσω καλωδίων.
  • Το I2S δεν υποστηρίζεται σε εφαρμογές υψηλού επιπέδου.
  • Αυτό το πρωτόκολλο έχει πρόβλημα συγχρονισμού μεταξύ τριών γραμμών σήματος το οποίο παρατηρείται σε υψηλό ρυθμό bit & συχνότητα δειγματοληψίας. Επομένως, αυτό το πρόβλημα παρουσιάζεται κυρίως λόγω της διακύμανσης των καθυστερήσεων διάδοσης μεταξύ των γραμμών ρολογιού και των γραμμών δεδομένων.
  • Το I2S δεν περιλαμβάνει μηχανισμό ανίχνευσης σφαλμάτων, επομένως μπορεί να προκαλέσει σφάλματα στην αποκωδικοποίηση δεδομένων.
  • Χρησιμοποιείται κυρίως για επικοινωνία μεταξύ IC σε παρόμοια PCB.
  • Δεν υπάρχουν τυπικοί σύνδεσμοι και καλώδια διασύνδεσης για το I2S, επομένως διαφορετικοί σχεδιαστές χρησιμοποιούν διαφορετικούς συνδέσμους.

Εφαρμογές

ο εφαρμογές του πρωτοκόλλου I2S περιλαμβάνουν τα ακόλουθα.

  • Το I2S χρησιμοποιείται για τη σύνδεση ψηφιακών συσκευών ήχου.
  • Αυτό το πρωτόκολλο χρησιμοποιείται εκτενώς για τη μεταφορά δεδομένων ήχου από DSP ή μικροελεγκτή σε κωδικοποιητή ήχου για αναπαραγωγή ήχου.
  • Αρχικά, η διεπαφή I2S χρησιμοποιείται σε σχέδια αναπαραγωγής CD. Τώρα, μπορεί να βρεθεί πού αποστέλλονται ψηφιακά δεδομένα ήχου μεταξύ των IC.
  • Το I2S χρησιμοποιείται σε DSP, ADC ήχου, DAC, μικροελεγκτές, μετατροπείς ρυθμού δείγματος κ.λπ.
  • Το I2S είναι ιδιαίτερα σχεδιασμένο για χρήση μεταξύ ολοκληρωμένων κυκλωμάτων για την επικοινωνία ψηφιακών δεδομένων ήχου.
  • Αυτό το πρωτόκολλο παίζει βασικό ρόλο στη σύνδεση του μικροελεγκτή και των περιφερειακών του συσκευών όταν το I2S εστιάζει στη μετάδοση δεδομένων ήχου μεταξύ ψηφιακών συσκευών ήχου.

Επομένως, όλα αυτά αφορούν μια επισκόπηση του Προδιαγραφές πρωτοκόλλου I2S που περιλαμβάνει την εργασία, τις διαφορές και τις εφαρμογές της. Το I²S είναι ένα σύγχρονο σειριακό πρωτόκολλο 3 καλωδίων χρησιμοποιείται για τη μεταφορά ψηφιακού στερεοφωνικού ήχου μεταξύ δύο ολοκληρωμένων κυκλωμάτων. ο Αναλυτής πρωτοκόλλου I2S είναι ένας αποκωδικοποιητής σήματος που περιλαμβάνει όλους τους λογικούς αναλυτές DigiView. Αυτό το λογισμικό DigiView παρέχει απλώς δυνατότητες ευρείας αναζήτησης, πλοήγησης, εξαγωγής, μέτρησης, σχεδίασης και εκτύπωσης σε όλους τους τύπους σημάτων. Εδώ είναι μια ερώτηση για εσάς, τι είναι το πρωτόκολλο I3C;