طراحی مدار

I2S چیست و چرا در پروژه های صوتی استفاده می شود؟

I2S یک رابط ارتباطی برای انتقال داده صوتی دیجیتال بین میکروکنترلرها، DACها، ADCها و Codecهای صوتی است. در این مقاله با مفهوم I2S، سیگنال های BCLK، LRCLK و DATA، نقش MCLK، Sample Rate، Bit Depth، Stereo و Mono و نکات مهم طراحی و عیب یابی مدارهای I2S آشنا می شویم.

I2S چیست و چرا در پروژه های صوتی استفاده می شود؟

اگر با ESP32، DAC، آمپلی فایر دیجیتال یا پروژه های پخش موسیقی کار کرده باشید، احتمالاً با عبارت I2S روبه رو شده اید.

ممکن است در نگاه اول تصور کنیم I2S هم چیزی شبیه I2C است؛ اما این دو پروتکل کاربرد کاملاً متفاوتی دارند.

I2C بیشتر برای ارتباط کنترلی با قطعاتی مانند سنسورها، RTC و نمایشگرها استفاده می شود، اما I2S برای انتقال داده صوتی دیجیتال طراحی شده است.

مثلاً در یک پروژه صوتی ممکن است بخواهیم داده صوتی تولید شده توسط ESP32 را به یک DAC مانند PCM5102A منتقل کنیم.

در اینجا I2S وارد عمل می شود.

در این مقاله از پایه شروع می کنیم و قدم به قدم می بینیم:

  • I2S چیست؟
  • چرا برای صوت به وجود آمده است؟
  • صدای دیجیتال چگونه به داده تبدیل می شود؟
  • BCLK، LRCLK و DATA چه هستند؟
  • MCLK چیست و آیا همیشه لازم است؟
  • Sample Rate و Bit Depth چه مفهومی دارند؟
  • Stereo و Mono چگونه در I2S منتقل می شوند؟
  • Master و Slave در I2S یعنی چه؟
  • ESP32 چگونه با یک DAC از طریق I2S ارتباط برقرار می کند؟
  • تفاوت I2S با I2C و SPI چیست؟
  • مهم ترین نکات طراحی و سیم کشی I2S چیست؟
  • چرا گاهی صدای I2S نویز دارد یا اصلاً شنیده نمی شود؟

ابتدا یک سؤال ساده: صدای دیجیتال چیست؟

قبل از اینکه I2S را یاد بگیریم، باید بدانیم چیزی که قرار است منتقل شود چیست.

صدای واقعی یک سیگنال آنالوگ است.

مثلاً وقتی یک گوینده صحبت می کند، فشار هوا به صورت پیوسته تغییر می کند.

میکروفن این تغییرات را به یک سیگنال الکتریکی تبدیل می کند.

اگر بخواهیم این صدا را در یک سیستم دیجیتال مانند ESP32 پردازش یا ذخیره کنیم، باید آن را به داده های دیجیتال تبدیل کنیم.

این کار با نمونه برداری انجام می شود.

Sample چیست؟

فرض کنید شکل موج صدای انسان را داریم.

سیستم صوتی در فاصله های زمانی مشخص، مقدار سیگنال را اندازه گیری می کند.

هر اندازه گیری یک Sample یا نمونه نام دارد.

مثلاً اگر سیستم در هر ثانیه 44100 بار از سیگنال نمونه برداری کند، Sample Rate برابر است با:

44100 Samples/second

که معمولاً به شکل زیر نوشته می شود:

44.1 kHz

بنابراین:

Sample Rate مشخص می کند که در هر ثانیه چند نمونه از سیگنال صوتی داریم.

Sample Rate چه اهمیتی دارد؟

هرچه Sample Rate بیشتر باشد، در هر ثانیه نمونه های بیشتری از صدا منتقل می شود.

مقادیر رایج عبارتند از:

Sample Rateکاربرد رایج
8 kHzصداهای بسیار محدود و کاربردهای خاص
16 kHzگفتار و پردازش صوت
22.05 kHzبرخی کاربردهای صوتی
44.1 kHzموسیقی
48 kHzویدئو و بسیاری از سیستم های صوتی
96 kHzسیستم های صوتی با کیفیت بالاتر

برای بسیاری از پروژه های معمول موسیقی:

44.1 kHz

یا:

48 kHz

کاملاً رایج است.

Bit Depth چیست؟

فقط تعداد نمونه ها مهم نیست.

هر Sample نیز باید با تعداد مشخصی بیت ذخیره شود.

به این مقدار Bit Depth گفته می شود.

مثلاً:

16 bit
24 bit
32 bit

اگر هر نمونه 16 بیت باشد، مقدار آن با 16 بیت نمایش داده می شود.

اگر 24 بیت باشد، دقت نمایش مقدار نمونه بیشتر می شود.

بنابراین:

Sample Rate تعداد نمونه ها در هر ثانیه را مشخص می کند و Bit Depth تعداد بیت های هر نمونه را مشخص می کند.

مثلاً:

44.1 kHz / 16 bit

یعنی:

  • در هر ثانیه 44100 نمونه
  • هر نمونه با عمق 16 بیت

I2S دقیقاً چیست؟

I2S مخفف:

Inter-IC Sound

است.

این استاندارد برای انتقال داده صوتی دیجیتال بین مدارهای مجتمع طراحی شده است.

برای مثال:

ESP32
  │
  │ I2S
  │
  ▼
DAC
  │
  ▼
Amplifier
  │
  ▼
Speaker

ESP32 داده صوتی دیجیتال را تولید یا دریافت می کند و آن را از طریق I2S به قطعه صوتی دیگر منتقل می کند.

این قطعه می تواند:

  • DAC
  • ADC
  • Codec
  • آمپلی فایر دیجیتال
  • یا یک پردازنده صوتی

باشد.

چرا از I2S استفاده می کنیم؟

داده صوتی با داده های معمولی تفاوت مهمی دارد.

در انتقال صوت، زمان بندی بسیار مهم است.

اگر یک نمونه صوتی زودتر یا دیرتر از زمان مناسب منتقل شود، ممکن است نتیجه به صورت:

  • نویز
  • صدای خراب
  • قطع و وصل
  • تغییر Pitch
  • یا سکوت

شنیده شود.

I2S برای انتقال منظم و زمان بندی شده داده های صوتی طراحی شده است.

خطوط اصلی I2S

یک ارتباط I2S معمولاً شامل چند سیگنال اصلی است:

BCLK
LRCLK / WS
DATA

و در بعضی سیستم ها:

MCLK

نیز وجود دارد.

بیایید هرکدام را جداگانه بررسی کنیم.

BCLK چیست؟

BCLK مخفف:

Bit Clock

است.

BCLK زمان بندی انتقال بیت ها را مشخص می کند.

به زبان ساده:

BCLK مثل ضربان قلب ارتباط I2S است.

هر بار که یک بیت از داده صوتی منتقل می شود، BCLK به عنوان مرجع زمانی عمل می کند.

اگر مثلاً داده صوتی 16 بیتی باشد، برای انتقال هر Sample به تعداد مشخصی پالس BCLK نیاز داریم.

LRCLK چیست؟

LRCLK را گاهی با نام:

WS

یا:

Word Select

نیز می بینیم.

این سیگنال مشخص می کند داده مربوط به کدام کانال صوتی است.

در صدای Stereo دو کانال داریم:

Left
Right

بنابراین LRCLK مشخص می کند که داده فعلی مربوط به کانال چپ است یا راست.

به زبان ساده:

BCLK می گوید «بیت بعدی چه زمانی منتقل شود؟»
LRCLK می گوید «الان در حال انتقال کانال چپ هستیم یا راست؟»

DATA چیست؟

DATA همان داده صوتی واقعی است.

نمونه های صوتی از طریق این خط منتقل می شوند.

مثلاً اگر صدا:

44.1 kHz
16 bit
Stereo

باشد، داده دیجیتال نمونه های Left و Right روی خط DATA منتقل می شود.

در یک سیستم ساده:

ESP32
 │
 ├── BCLK ──────→ DAC
 ├── LRCLK ─────→ DAC
 └── DATA ──────→ DAC

MCLK چیست؟

MCLK مخفف:

Master Clock

است.

این سیگنال یک کلاک مرجع اضافی برای بعضی مدارهای صوتی فراهم می کند.

ممکن است در دیتاشیت یک DAC یا Codec ببینید که پایه ای با نام:

MCLK

دارد.

اما یک نکته بسیار مهم:

همه دستگاه های I2S به MCLK نیاز ندارند.

برخی DACها می توانند از BCLK و LRCLK برای تولید کلاک های داخلی مورد نیاز خود استفاده کنند.

برای مثال برخی DACهای محبوب در پروژه های ESP32، مانند PCM5102A، می توانند بدون اتصال MCLK نیز کار کنند.

بنابراین نباید صرفاً به دلیل وجود پایه MCLK روی یک ماژول تصور کنیم که حتماً باید آن را به ESP32 وصل کنیم.

همیشه دیتاشیت و نحوه پیکربندی قطعه را بررسی کنیم.

یک ارتباط I2S ساده

اگر ESP32 را به یک DAC متصل کنیم، ممکن است ارتباط به شکل زیر باشد:

ESP32              DAC
-----              ---

BCLK  ───────────→ BCLK
LRCLK ───────────→ LRCLK
DATA  ───────────→ DATA
GND   ───────────→ GND

اگر DAC به MCLK نیاز داشته باشد:

MCLK  ───────────→ MCLK

نیز اضافه می شود.

I2S و DAC چه ارتباطی با هم دارند؟

این یکی از مهم ترین نکاتی است که باید بدانیم.

I2S خودش صدا را به سیگنال آنالوگ تبدیل نمی کند.

I2S فقط داده صوتی دیجیتال را منتقل می کند.

مثلاً:

ESP32
  │
  │ I2S
  ▼
PCM5102A
  │
  │ Analog Audio
  ▼
Amplifier
  │
  ▼
Speaker

در این مدار:

  • ESP32 داده دیجیتال صوتی را تولید می کند.
  • I2S آن را منتقل می کند.
  • DAC آن را به سیگنال صوتی آنالوگ تبدیل می کند.
  • آمپلی فایر سیگنال را تقویت می کند.
  • بلندگو آن را به صدا تبدیل می کند.

پس:

I2S جای DAC را نمی گیرد.

I2S روش انتقال است و DAC وسیله تبدیل دیجیتال به آنالوگ.

تفاوت I2S و I2C

این دو نام بسیار شبیه هستند و همین موضوع گاهی باعث سردرگمی می شود.

اما کاربرد آنها کاملاً متفاوت است.

ویژگیI2CI2S
کاربرد اصلیارتباط عمومی و کنترلیانتقال صوت دیجیتال
دادهداده های مختلفنمونه های صوتی
ClockSCLBCLK
DataSDADATA
انتخاب کانال صوتینداردLRCLK/WS
آدرس دستگاهداردمعمولاً ندارد
Pull-upمعمولاً لازممانند I2C نیست
نمونه کاربردسنسور، RTC، OLEDDAC، ADC، Codec

پس:

I2C → ارتباط با دستگاه
I2S → انتقال صوت

البته بعضی قطعات صوتی ممکن است علاوه بر I2S، یک رابط I2C یا SPI نیز برای تنظیمات داخلی خود داشته باشند.

چرا یک DAC ممکن است هم I2S و هم I2C داشته باشد؟

این موضوع در مدارهای صوتی پیشرفته بسیار رایج است.

ممکن است یک Codec داشته باشیم که:

I2S → انتقال داده صوتی
I2C → تنظیمات Codec

در این حالت I2C برای کنترل و تنظیمات استفاده می شود، در حالی که I2S داده صوتی را منتقل می کند.

مثلاً ممکن است با I2C تنظیم کنیم:

  • حجم صدا
  • مسیر ورودی
  • Gain
  • فرکانس نمونه برداری
  • حالت Stereo/Mono

و سپس داده صوتی را از طریق I2S منتقل کنیم.

Stereo و Mono در I2S

یکی از مفاهیم مهم در I2S، کانال های صوتی است.

در Stereo دو کانال داریم:

Left
Right

مثلاً:

Left  → بلندگوی چپ
Right → بلندگوی راست

LRCLK مشخص می کند داده مربوط به کدام کانال است.

در سیستم Mono فقط یک کانال صوتی مورد نیاز است.

بسته به دستگاه و تنظیمات، ممکن است داده Mono در یکی از کانال ها قرار گیرد یا به شکل دیگری مدیریت شود.

بنابراین هنگام کار با DAC یا آمپلی فایر I2S باید مشخصات آن را بررسی کنیم.

Master و Slave در I2S

در I2S نیز معمولاً یک دستگاه وظیفه تولید Clockها را بر عهده دارد.

دستگاه تولید کننده Clock را می توان Master در نظر گرفت.

مثلاً:

ESP32 = I2S Master
DAC   = I2S Slave

در این حالت ESP32 سیگنال های:

BCLK
LRCLK

را تولید می کند و DAC آنها را دریافت می کند.

اما بسته به طراحی سیستم، نقش ها می توانند متفاوت باشند.

نکته مهم این است:

در I2S باید مشخص باشد کدام دستگاه Clockهای ارتباط را تولید می کند.

اگر دو دستگاه بخواهند همزمان Clock را کنترل کنند، سیستم می تواند دچار مشکل شود.

I2S در ESP32

ESP32 یکی از گزینه های بسیار مناسب برای پروژه های صوتی است، زیرا سخت افزار I2S داخلی دارد.

بنابراین لازم نیست نرم افزار را طوری بنویسیم که تمام بیت های صوتی را با GPIO به صورت دستی تولید کند.

واحد سخت افزاری I2S می تواند انتقال داده را مدیریت کند.

یک ساختار ساده می تواند به شکل زیر باشد:

Audio File / Stream
        │
        ▼
      ESP32
        │
        │ I2S
        ▼
       DAC
        │
        ▼
   Analog Audio
        │
        ▼
   Amplifier
        │
        ▼
     Speaker

این یکی از دلایلی است که ESP32 در پروژه های پخش موسیقی بسیار محبوب است.

نمونه ساده راه اندازی I2S

در کتابخانه های جدید Arduino-ESP32، روش پیکربندی I2S ممکن است با توجه به نسخه هسته و API مورد استفاده متفاوت باشد.

اما از نظر مفهومی همیشه باید این موارد را مشخص کنیم:

Sample Rate
Bit Depth
Channels
BCLK
LRCLK
DATA

مثلاً یک سیستم صوتی ممکن است با این مشخصات کار کند:

Sample Rate = 44100 Hz
Bit Depth   = 16 bit
Channels    = Stereo

و پایه ها نیز مثلاً:

BCLK  → GPIO
LRCLK → GPIO
DATA  → GPIO

باشند.

در پروژه واقعی باید پایه ها را مطابق شماتیک و قابلیت های برد انتخاب کنیم.

چرا Sample Rate و Bit Depth باید بین دستگاه ها هماهنگ باشند؟

فرض کنید ESP32 داده را با:

44.1 kHz

ارسال کند اما DAC یا بخش دیگر سیستم انتظار:

48 kHz

داشته باشد.

اگر این تنظیمات به درستی هماهنگ نشده باشند، ممکن است صدا:

  • خراب شود.
  • سرعت یا Pitch مناسبی نداشته باشد.
  • نویز ایجاد کند.
  • یا اصلاً پخش نشود.

بنابراین در زنجیره صوتی باید تنظیمات بخش های مختلف با یکدیگر سازگار باشند.

I2S و حجم داده

داده صوتی می تواند حجم زیادی داشته باشد.

مثلاً برای:

44.1 kHz
16 bit
Stereo

حجم خام داده صوتی تقریباً برابر است با:

44100 × 16 × 2

یعنی:

1,411,200 bit/s

یا حدود:

176,400 byte/s

این فقط داده خام صوتی است و هنوز سربار فایل هایی مانند MP3 یا FLAC را در نظر نگرفته ایم.

این موضوع نشان می دهد چرا انتقال صوت به یک رابط زمان بندی شده و مناسب نیاز دارد.

I2S و MP3 چه تفاوتی دارند؟

این هم یک اشتباه رایج است.

MP3 یک فرمت فشرده صوتی است.

I2S یک رابط انتقال داده صوتی دیجیتال است.

مثلاً:

MP3 File
   │
   ▼
Decoder
   │
   ▼
PCM Samples
   │
   ▼
I2S
   │
   ▼
DAC

یعنی ممکن است ESP32 ابتدا یک فایل MP3 را Decode کند.

خروجی Decoder معمولاً داده PCM است.

سپس این داده PCM از طریق I2S به DAC منتقل می شود.

بنابراین:

MP3 ≠ I2S

PCM چیست؟

PCM مخفف:

Pulse Code Modulation

است.

PCM یکی از روش های رایج نمایش دیجیتال صداست.

وقتی یک فایل صوتی فشرده مانند MP3 Decode می شود، می تواند به نمونه های PCM تبدیل شود.

سپس همین نمونه ها می توانند از طریق I2S منتقل شوند.

در یک سیستم صوتی ساده:

MP3
 ↓
Decoder
 ↓
PCM
 ↓
I2S
 ↓
DAC
 ↓
Analog Audio

این زنجیره را در بسیاری از پروژه های صوتی می توان مشاهده کرد.

مهم ترین نکات سیم کشی I2S

I2S از نظر تعداد سیم ساده به نظر می رسد، اما در طراحی واقعی باید به چند نکته توجه کنیم.

1. سیم های I2S را بی دلیل طولانی نکنیم

I2S سیگنال های دیجیتال نسبتاً سریع دارد.

طول زیاد سیم می تواند باعث:

  • نویز
  • انعکاس سیگنال
  • تغییر شکل لبه ها
  • تداخل
  • خطای انتقال

شود.

برای همین بهتر است ارتباط I2S کوتاه و مرتب باشد.

2. زمین مشترک

اگر ESP32 و DAC از دو بخش مختلف مدار تغذیه می شوند، باید مسیر زمین مناسب و مرجع مشترک داشته باشند.

مثلاً:

ESP32 GND
    │
    └──────── DAC GND

3. مسیرهای BCLK و LRCLK را منظم نگه داریم

این سیگنال ها Clock هستند و نسبت به نویز و کیفیت مسیر اهمیت دارند.

بهتر است:

  • مسیرها کوتاه باشند.
  • از مسیرهای نویزی فاصله داشته باشند.
  • کنار منابع نویز قوی مانند مبدل های DC-DC قرار نگیرند.
  • در PCB با مسیرهای تغذیه پرجریان به شکل نامناسب موازی نشوند.

تغذیه در پروژه های I2S

در پروژه های صوتی، فقط انتقال دیجیتال مهم نیست.

تغذیه نیز اهمیت زیادی دارد.

مثلاً یک DAC ممکن است از یک منبع تغذیه نسبتاً تمیز انتظار داشته باشد.

اگر یک آمپلی فایر پرقدرت، مبدل Boost یا موتور در همان مدار وجود داشته باشد، نویز تغذیه می تواند وارد بخش صوتی شود.

نتیجه ممکن است به شکل:

Hiss
Hum
Click
Pop
Noise

شنیده شود.

بنابراین:

مشکل صدای بد همیشه از I2S نیست.

ممکن است مشکل از تغذیه، زمین، DAC یا آمپلی فایر باشد.

چرا گاهی I2S کار می کند ولی صدا نویز دارد؟

اگر ارتباط I2S کاملاً قطع باشد، معمولاً صدا نداریم.

اما اگر صدا داریم و روی آن نویز شنیده می شود، باید موارد مختلفی را بررسی کنیم:

  • کیفیت تغذیه DAC
  • مسیر GND
  • سیم کشی
  • تداخل EMI
  • Clock
  • Sample Rate
  • Bit Depth
  • تنظیمات کانال
  • سطح سیگنال
  • آمپلی فایر
  • DAC
  • اتصال زمین بخش آنالوگ و دیجیتال

به همین دلیل در پروژه های صوتی، عیب یابی باید مرحله به مرحله انجام شود.

چرا گاهی اصلاً صدا نداریم؟

اگر هیچ صدایی نداریم، این موارد را بررسی کنیم:

1. DATA

آیا DATA واقعاً به پایه صحیح DAC متصل است؟

2. BCLK

آیا BCLK تولید می شود؟

3. LRCLK

آیا LRCLK تولید می شود؟

4. تنظیمات I2S

Sample Rate و Bit Depth درست هستند؟

5. فرمت داده

ممکن است DAC فرمت خاصی از داده را انتظار داشته باشد.

6. کانال

ممکن است داده در کانال Left ارسال شود اما خروجی مورد استفاده Right باشد.

7. MCLK

بررسی کنیم DAC مورد نظر به MCLK نیاز دارد یا خیر.

8. تغذیه

ولتاژ تغذیه DAC و آمپلی فایر صحیح است؟

I2S و MCLK؛ یک اشتباه رایج

یکی از خطاهای رایج این است که یک پروژه را از روی یک شماتیک دیگر کپی کنیم و تمام پایه ها را بدون بررسی به هم وصل کنیم.

مثلاً ببینیم یک DAC دارای:

MCLK
BCLK
LRCLK
DATA

است و تصور کنیم همه آنها حتماً باید وصل شوند.

در حالی که بعضی DACها بدون MCLK خارجی نیز کار می کنند.

بنابراین:

پایه های I2S را بر اساس دیتاشیت قطعه انتخاب کنید، نه صرفاً بر اساس ظاهر ماژول.

I2S و SPI چه تفاوتی دارند؟

I2S از نظر ظاهری ممکن است شبیه SPI به نظر برسد، چون هر دو Clock و Data دارند.

اما کاربرد آنها متفاوت است.

ویژگیI2SSPI
کاربرد اصلیصوت دیجیتالارتباط عمومی
ClockBCLKSCK
DataSD/DATAMOSI/MISO
کانال صوتیLRCLKندارد
آدرس دستگاهمعمولاً نداردمعمولاً با CS
کاربردDAC، ADC، CodecFlash، نمایشگر، سنسور

I2S برای ساختار و زمان بندی داده صوتی طراحی شده است.

چه زمانی I2S انتخاب مناسبی است؟

I2S انتخاب بسیار خوبی است وقتی:

  • می خواهیم صوت دیجیتال منتقل کنیم.
  • از DAC یا ADC صوتی استفاده می کنیم.
  • به صدای با کیفیت مناسب نیاز داریم.
  • ESP32 یا میکروکنترلر ما I2S سخت افزاری دارد.
  • می خواهیم داده PCM را به DAC منتقل کنیم.
  • پروژه شامل پخش موسیقی، ضبط صدا یا پردازش صوت است.

مثلاً:

ESP32
  │
  │ I2S
  ▼
PCM5102A
  │
  ▼
PAM8403
  │
  ▼
Speaker

یک ساختار بسیار رایج برای پروژه های صوتی است.

چه زمانی I2S انتخاب مناسبی نیست؟

اگر هدف ما فقط خواندن یک سنسور دما، کنترل یک RTC یا ارتباط با OLED باشد، I2S انتخاب مناسبی نیست.

در چنین مواردی ممکن است:

I2C

یا:

SPI

مناسب تر باشد.

I2S را باید زمانی انتخاب کنیم که با داده صوتی و زمان بندی صوتی سروکار داریم.

یک مثال واقعی از یک سیستم صوتی

فرض کنید می خواهیم با ESP32 یک پخش کننده موسیقی بسازیم.

ساختار می تواند چنین باشد:

             SD Card
                │
                ▼
              ESP32
                │
          MP3 Decoder
                │
              PCM
                │
              I2S
                │
                ▼
             PCM5102A
                │
          Analog Audio
                │
                ▼
             Amplifier
                │
                ▼
             Speaker

در اینجا هر بخش وظیفه مشخصی دارد:

  • SD Card فایل را نگه می دارد.
  • ESP32 فایل را می خواند.
  • Decoder داده فشرده مانند MP3 را Decode می کند.
  • PCM داده صوتی خام است.
  • I2S داده PCM را منتقل می کند.
  • DAC آن را به سیگنال آنالوگ تبدیل می کند.
  • آمپلی فایر سیگنال را تقویت می کند.
  • Speaker آن را به صدا تبدیل می کند.

این تفکیک وظایف برای درک سیستم های صوتی بسیار مهم است.

چند نکته طلایی برای پروژه های I2S

قبل از اینکه پروژه I2S خود را بسازید، این موارد را بررسی کنید:

  • دیتاشیت DAC یا Codec را بخوانید.
  • مشخص کنید کدام Clockها مورد نیاز هستند.
  • بررسی کنید MCLK لازم است یا خیر.
  • Sample Rate دو طرف را هماهنگ کنید.
  • Bit Depth را هماهنگ کنید.
  • Stereo یا Mono بودن را مشخص کنید.
  • ترتیب کانال های Left و Right را بررسی کنید.
  • سیم های I2S را کوتاه نگه دارید.
  • زمین مشترک و مناسب داشته باشید.
  • تغذیه DAC را تمیز نگه دارید.
  • Pull-up مربوط به I2C را با I2S اشتباه نگیرید.
  • سطح ولتاژ GPIOها را بررسی کنید.
  • در صورت وجود نویز، فقط I2S را مقصر ندانید.

یک روش ساده برای به خاطر سپردن خطوط I2S

برای شروع کافی است این چهار نام را به خاطر بسپارید:

BCLK  → زمان انتقال بیت
LRCLK → Left / Right
DATA  → داده صوتی
MCLK  → کلاک مرجع، در صورت نیاز

و این تصویر ذهنی را داشته باشید:

             I2S

       BCLK  ──────────→
       LRCLK ──────────→
       DATA  ──────────→
       MCLK  ──────────→  در صورت نیاز

جمع بندی

I2S یک رابط ارتباطی است که برای انتقال داده صوتی دیجیتال بین مدارهای مجتمع طراحی شده است.

در ساده ترین حالت، سه سیگنال اصلی داریم:

BCLK
LRCLK
DATA

و در بعضی سیستم ها MCLK نیز استفاده می شود.

BCLK زمان بندی انتقال بیت ها را مشخص می کند، LRCLK کانال Left و Right را مشخص می کند و DATA نمونه های صوتی را منتقل می کند.

I2S خودش DAC نیست و صدا را آنالوگ نمی کند. بلکه داده دیجیتال صوتی را به DAC منتقل می کند.

یک زنجیره صوتی معمولی می تواند چنین باشد:

Audio File
    ↓
Decoder
    ↓
PCM
    ↓
I2S
    ↓
DAC
    ↓
Analog Audio
    ↓
Amplifier
    ↓
Speaker

اگر این ساختار را درک کنیم، دیگر عبارت هایی مانند:

ESP32 I2S
PCM5102A
BCLK
LRCLK
MCLK
PCM
44.1kHz / 16bit

عبارت های جدا و مبهمی نیستند؛ بلکه اجزای مختلف یک زنجیره مشخص برای انتقال و پخش صدای دیجیتال هستند.

و شاید مهم ترین نکته این باشد:

I2S برای انتقال صوت ساخته شده است؛ بنابراین زمان بندی، Clock، Sample Rate و کیفیت سیگنال در آن اهمیت بسیار بیشتری از یک ارتباط دیجیتال معمولی دارند.

→ بازگشت به وبلاگ