פרוטוקול I2S: עבודה, הבדלים ויישומיו

נסה את הכלי שלנו לביטול בעיות





מערכות דיגיטליות ודרישות נתוני האודיו שלהן בתוך מכשירי טלפון ניידים, מחשבים & בית אוטומטי מוצרים השתנו באופן דרמטי לאורך תקופה. אות השמע מהמעבדים או אל המעבדים הופך לדיגיטלי. נתונים אלה במערכות שונות מעובדים באמצעות מכשירים רבים כמו DSPs , ADCs, DACs, דיגיטלי I/O ממשקי וכו' על מנת שמכשירים אלו יתקשרו זה עם זה נתוני שמע נדרש פרוטוקול סטנדרטי. אחד כזה הוא פרוטוקול I2S. זהו ממשק אפיק טורי, שתוכנן על ידי Philip Semiconductor בפברואר 1986 עבור ממשק אודיו דיגיטלי בין המכשירים. מאמר זה דן בסקירה כללית של I פרוטוקול 2S זה עובד עם יישומים.


מהו פרוטוקול I2S?

הפרוטוקול המשמש להעברת נתוני אודיו דיגיטליים ממכשיר אחד למכשיר אחר ידוע כפרוטוקול I2S או Inter-IC Sound. פרוטוקול זה מעביר נתוני אודיו PCM (מודול קוד דופק) מ-IC אחד למשנהו בתוך מכשיר אלקטרוני. I2S ממלא תפקיד מפתח בהעברת קבצי אודיו המוקלטים מראש מ-MCU ל-DAC או למגבר. ניתן להשתמש בפרוטוקול זה גם כדי לבצע דיגיטציה של שמע באמצעות מיקרופון. אין דחיסה בתוך פרוטוקולי I2S, כך שלא תוכל לנגן OGG או MP3 או פורמטי שמע אחרים המעבים את האודיו, עם זאת, אתה יכול לנגן קבצי WAV.



תכונות

ה תכונות פרוטוקול I2S כלול את הבאים.

  • יש לו 8 עד 32 סיביות נתונים עבור כל דגימה.
  • Tx & Rx FIFO מפריעים.
  • זה תומך ב-DMA.
  • תקופת בחירת מילים של 16 סיביות, 32 סיביות, 48 סיביות או 64 סיביות.
  • הזרמת אודיו דו-כיוונית סימולטנית.
  • רוחב דגימה של 8 סיביות, 16 סיביות ו-24 סיביות.
  • יש לו שיעורי דגימה שונים.
  • קצב הנתונים הוא עד 96 קילו-הרץ לאורך תקופת בחירת המילה של 64 סיביות.
  • FIFO סטריאו משולבים או FIFO ערוץ ימין ושמאל עצמאי
  • הפעלה עצמאית של Tx & Rx.

פרוטוקול תקשורת I2S עובד

ה-I2S פרוטוקול תקשורת הוא פרוטוקול 3 חוטים שפשוט מטפל בנתוני אודיו דרך אפיק טורי בן 3 קווים הכולל SCK (שעון טורי רציף), WS (בחירת מילים) ו-SD (נתונים סדרתיים).



חיבור 3 חוטים של I2S:

SCK

SCK או Serial Clock הוא השורה הראשונה של פרוטוקול I2S הידוע גם כ-BCLK או קו שעון סיביות המשמש להשגת הנתונים במחזור דומה. תדר השעון הטורי מוגדר בפשטות על ידי שימוש בנוסחה כמו Frequency = Sample Rate x Bits עבור כל ערוץ x no. של ערוצים.

WS

בפרוטוקול התקשורת I2S, ה-WS או ה-word select הוא הקו המכונה גם חוט FS (Frame Select) המפריד בין הערוץ הימני או השמאלי.

אם WS = 0, נעשה שימוש בערוץ השמאלי או בערוץ-1.

אם WS = 1 אזי נעשה שימוש בערוץ הימני או בערוץ-2.

SD

הנתונים הטוריים או ה-SD הוא החוט האחרון שבו המטען מועבר תוך 2 משלים. לכן, זה מאוד משמעותי שה-MSB מועבר לראשונה, מכיוון שגם המשדר וגם המקלט עשויים לכלול אורכי מילים שונים. לפיכך, המשדר או המקלט צריכים לזהות כמה ביטים משודרים.

  • אם אורך המילה של המקלט גדול יותר מהמשדר, אז המילה מתקצרת (סיביות LSB מוגדרות לאפס).
  • אם אורך המילה של המקלט קטן מאורך המילה של המשדר, אזי מתעלמים מביטים של 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

בתרשים שלמעלה, ראשית, לשעון הטורי יש תדר = קצב דגימה * ביטים לכל ערוץ * לא. של ערוצים). המילה 'שורת בחירה' היא השורה השנייה שמשתנה בין '1' לערוץ הימני ו'0' לערוץ השמאלי.

השורה השלישית היא קו הנתונים הטורי שבו הנתונים מועברים בכל מחזור שעון על הקצה הנופל המסומן בנקודות מ-HIGH עד LOW.

בנוסף, אנו יכולים לשים לב שקו WS משתנה מחזור CLK אחד לפני שידור ה-MSB מה שנותן למקלט זמן לאחסון המילה הקודמת ולנקות את אוגר הקלט עבור המילה הבאה. ה-MSB נשלח כאשר SCK משתנה לאחר שינוי WS.

בכל פעם שמועבר נתונים בין המשדר למקלט יהיה עיכוב התפשטות  שיהיה

השהיית התפשטות = (הפרש זמן בין השעון החיצוני לשעון הפנימי של המקלט)+(הפרש הזמן בין השעון הפנימי למועד קבלת הנתונים).

כדי למזער את עיכוב ההפצה ולסנכרון העברת הנתונים בין המשדר למקלט  נדרש שלמשדר תהיה תקופת שעון של  

T > tr  – להניח ש-T היא תקופת השעון של המשדר ו-tr היא תקופת השעון המינימלית של המשדר.

בתנאי לעיל אם ניקח למשל את א משדר  עם קצב העברת הנתונים 2.5MHz ואז:

tr = 360ns

שעון tHC גבוה (מינימום) >0.35 T.

שעון TLC נמוך (מינימום>> 0.35T.

מקלט כעבד עם קצב העברת הנתונים 2.5MHz אז:

שעון tHC גבוה (מינימום) < 0.35 T

שעון TLC נמוך (מינימום) < 0.35T.

זמן התקנה tst(מינימום) < 0.20T.

I2S פרוטוקול Arduino

המטרה העיקרית של הפרויקט הזה היא ליצור ממשק I2S  theremin באמצעות ספריית Arduino I2S. הרכיבים הנדרשים לביצוע פרויקט זה הם; Arduino MKR Zero, קרש לחם , חוטי מגשר, Adafruit MAX98357A, 3W, רמקול 4 אוהם ו-RobotGeek Slider.

ספריית Arduino I2S פשוט מאפשרת לך לשדר ולקבל נתוני אודיו דיגיטליים דרך אפיק I2S. אז דוגמה זו מטרתה להסביר כיצד לנצל את הספרייה הזו כדי להניע I2S DAC לשחזור צליל המחושב בעיצוב Arduino.

מעגל זה יכול להיות מחובר כמו; I2S DAC המשמש בדוגמה זו דורש פשוט שלושה חוטים, כמו גם אספקת חשמל לאפיק I2S. החיבורים ל-I2S ב-Arduino MKRZero מופיעים כדלקמן;

נתונים טוריים (SD) על פין A6;

שעון טורי (SCK) על פין 2;

המסגרת או בחירת מילים (FS) ב-pin3;

עובד

בעיקרון, ל-theremin יש שני פקדי גובה ועוצמת קול. אז שני הפרמטרים האלה משתנים על ידי הזזת שני פוטנציומטרים שקופיים, עם זאת, אתה יכול גם להתאים אותם כדי לקרוא אותם. שני הפוטנציומטרים מחוברים בצורת מחלק מתח, כך שהעברת הפוטנציומטרים הללו תקבל ערכים מ-0 עד 1023. לאחר מכן, ערכים אלו ממופים בין התדר המקסימלי והמינימלי לבין הנפח הקטן והגבוה ביותר.

  תרשים I2S Thermin
תרשים I2S Thermin

הצליל המועבר באפיק I2S הוא גל סינוס פשוט שהמשרעת והתדר שלו משתנים על סמך קריאת הפוטנציומטרים.

קוד

הקוד לממשק Theremin עם Arduino MKRZero, פוטנציומטרים של 2 סליידרים ו- I2S DAC ניתן להלן.

#include

const int maxFrequency = 5000; //תדר מרבי שנוצר
const int minFrequency = 220; //תדר מינימלי שנוצר
const int maxVolume = 100; //נפח מקסימלי של התדר שנוצר
const int minVolume = 0; //min נפח של התדר שנוצר
const int sampleRate = 44100; //דגימה של התדר שנוצר
const int wavSize = 256; //גודל מאגר
short sine[wavSize]; //buffer שבו מאוחסנים ערכי הסינוס
const int frequencyPin = A0; //pin מחובר לסיר שקובע את תדירות האות
const int amplitudePin = A1; //pin מחובר לסיר שקובע את משרעת האות
כפתור const int = 6; //pin מחובר לבקרת הלחצן  כדי להציג את התדר

void setup()
{

Serial.begin(9600); //הגדר את היציאה הטורית
// אתחל את משדר I2S.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println ('נכשל באתחול I2S!');

בעוד (1);
}

generSine(); // למלא מאגר עם ערכי סינוס
pinMode(לחצן, INPUT_PULLUP); //שים את סיכת הכפתור ב-input pullup

}
void loop() {

if (digitalRead(button) == LOW)

{

float frequency = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //תדירות המפה
int amplitude = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //משרעת המפה
playWave(תדר, 0.1, משרעת); //להשמיע צליל
//הדפס ערכים על סדרתי
Serial.print(“Frequency = “);
Serial.println(תדר);
Serial.print(“Amplitude = “);
Serial.println(amplitude);

}

}
void generSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 משמש ללא מספרים קטנים
}
}
void playWave(תדר צף, שניות צף, משרעת אינט) {
// הפעל את מאגר צורות הגל שסופק עבור המאגר שצוין
// כמות שניות.
// תחילה חשב כמה דגימות צריך להפעיל כדי להפעיל
// למשך כמות השניות הרצויה.

איטרציות אינט לא חתומות = שניות * sampleRate;

// לאחר מכן חשב את ה'מהירות' שבה אנו נעים בגל
// מאגר המבוסס על תדירות הטון המושמע.

float delta = (תדירות * wavSize) / float(sampleRate);

// כעת בצע לולאה בין כל הדגימות והפעל אותן, חישוב ה-
// מיקום בתוך מאגר הגלים עבור כל רגע בזמן.

for (אין סימן int i = 0; i < איטרציות; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
דוגמה קצרה = משרעת * sine[pos];

// שכפל את המדגם כך שהוא יישלח לערוצים השמאלי והימני.
// נראה שהסדר הוא הערוץ הימני, הערוץ השמאלי אם אתה רוצה לכתוב
// צליל סטריאו.

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

}
}

ההבדל בין פרוטוקול I2C ו-I2S

ההבדל בין פרוטוקול I2C ל-I2S כולל את הדברים הבאים.

2C

I2S

ה פרוטוקול I2C מייצג פרוטוקול אוטובוס בין-IC I2S מייצג פרוטוקול Inter-IC Sound .
הוא משמש בעיקר להפעלת אותות בין מעגלים משולבים המוצבים על גבי PCB דומה. הוא משמש לחיבור התקני שמע דיגיטליים.
הוא משתמש בשני קווים בין מספר מאסטרים ועבדים כמו SDA ו-SCL . הוא משתמש בשלושה קווים WS, SCK וSD.
זה תומך ב-multi-master & multi-slave. זה תומך במאסטר יחיד.
פרוטוקול זה תומך במתיחות CLK. לפרוטוקול זה אין מתיחה של CLK.
I2C כולל סיביות התחלה ועצירה תקורה נוספים. I2S אינו כולל סיביות התחלה ועצירה.

יתרונות

ה היתרונות של אוטובוס I2S כלול את הבאים.

  • I2S משתמש בקווי נתונים נפרדים מסוג CLK וקווי נתונים טוריים. אז יש לו עיצובי מקלטים פשוטים מאוד בהשוואה למערכות אסינכרוניות.
  • זהו מכשיר מאסטר יחיד כך שאין בעיה עם סנכרון נתונים.
  • המיקרופון המבוסס על I2S o/p אינו זקוק לחזית אנלוגית אלא מנוצל בתוך מיקרופון אלחוטי באמצעות משדר דיגיטלי. על ידי שימוש זה, אתה יכול ליצור חיבור דיגיטלי לחלוטין בין המשדר והמתמר.

חסרונות

ה החסרונות של אוטובוס I2S כלול את הבאים.

  • I2S אינו מוצע להעברת נתונים באמצעות כבלים.
  • I2S אינו נתמך בתוך יישומים ברמה גבוהה.
  • לפרוטוקול זה יש בעיית סנכרון בין שלושה קווי אות המורגשת בקצב סיביות גבוה ובתדירות דגימה. אז בעיה זו מתרחשת בעיקר בגלל השונות של עיכובי התפשטות בין קווי שעון וקווי נתונים.
  • I2S אינו כולל מנגנון זיהוי שגיאות, כך שהוא עלול לגרום לשגיאות בפענוח הנתונים.
  • הוא משמש בעיקר לתקשורת בין-IC על PCB דומה.
  • אין מחברים וכבלים אופייניים ל-I2S, ולכן מעצבים שונים משתמשים במחברים שונים.

יישומים

ה יישומים של פרוטוקול I2S כלול את הבאים.

  • I2S משמש לחיבור התקני שמע דיגיטליים.
  • פרוטוקול זה נמצא בשימוש נרחב בהעברת נתוני אודיו מ-DSP או מיקרו-בקר לקודק אודיו כדי לנגן אודיו.
  • בתחילה, ממשק I2S מנוצל בתוך עיצובים של נגני CD. כעת, ניתן למצוא היכן נשלחים נתוני אודיו דיגיטליים בין IC.
  • I2S משמש ב-DSPs, ADCs אודיו, DACs, מיקרו-בקרים, ממירי קצב דגימה וכו'.
  • I2S תוכנן במיוחד לשימוש בין מעגלים משולבים לתקשורת נתוני אודיו דיגיטליים.
  • פרוטוקול זה ממלא תפקיד מפתח בחיבור המיקרו-בקר וההתקנים ההיקפיים שלו כאשר ה-I2S מתמקד בהעברת נתוני שמע בין התקני שמע דיגיטליים.

לפיכך, זה הכל על סקירה כללית של מפרט פרוטוקול I2S הכולל עבודה, הבדלים ויישומים שלה. I²S הוא פרוטוקול טורי סינכרוני בעל 3 חוטים משמש להעברת אודיו סטריאו דיגיטלי בין שני מעגלים משולבים. ה מנתח פרוטוקול I2S הוא מפענח אותות הכולל את כל מנתחי DigiView Logic. תוכנת DigiView זו פשוט מספקת יכולות חיפוש רחב, ניווט, ייצוא, מדידה, עלילה והדפסה לכל סוגי האותות. הנה שאלה בשבילך, מהו פרוטוקול I3C?