I2S (Inter-IC Sound) Protokolü

👤 Yazar: ozcan 📅 Tarih: 19.08.2026 03:48 👁️ Görüntüleme: 17

I2S (Inter-IC Sound) Protokolü Detaylı İncelemesi

I2S (Inter-IC Sound veya Integrated Interchip Sound), 1986 yılında Philips Semiconductors (günümüzde NXP) tarafından dijital ses verilerini entegre devreler arasında iletmek için geliştirilmiş senkron seri bir haberleşme standardıdır. I2C ile sıkça karıştırılsa da tamamen farklı bir amaca hizmet eder: I2C genel kontrol verileri taşırken, I2S yüksek kaliteli, kesintisiz ve gerçek zamanlı dijital ses (PCM) transferi için tasarlanmıştır. Mikrokontrolcüler, DSP'ler, DAC (Dijital-Analog Dönüştürücü), ADC (Analog-Dijital Dönüştürücü) ve dijital mikrofonlar (MEMS) arasında standart iletişim protokolüdür.

I2S Bus Mimari Diyagramı


1. Donanım Mimarisi ve Sinyal Hatları

I2S protokolü, ses verilerini saat sinyallerinden ayırarak ilettiği için zamanlama sapmalarını (jitter) ve buna bağlı oluşan ses bozulmalarını minimuma indirir. Standart bir I2S veriyolu en az 3 temel sinyal hattından oluşur (opsiyonel olarak 4. bir ana saat hattı eklenebilir):

  • SCK / BCLK (Continuous Serial Clock / Bit Clock): Her bir ses biti için bir darbe üreten ana saat hattı. Frekansı; Örnekleme Hızı × Kanal Sayısı × Bit Derinliği formülüyle hesaplanır (Örn: 44.1 kHz × 2 × 16 bit = 1.4112 MHz).
  • WS / LRCK (Word Select / Left Right Clock): İletilen verinin hangi kanala (Sol veya Sağ) ait olduğunu belirler. WS = LOW olduğunda Sol (Left) kanal, WS = HIGH olduğunda Sağ (Right) kanal verisi aktarılır. WS sinyalinin frekansı doğrudan sesin örnekleme hızına (Sampling Rate) eşittir (Örn: 44.1 kHz veya 48 kHz).
  • SD / SDATA (Serial Data): Ses verisinin MSB (Most Significant Bit) önce olacak şekilde iki kısımlı ikili kodlama (2's complement) yapısıyla aktarıldığı veri hattı.
  • MCLK (Master Clock - Opsiyonel): Bazı gelişmiş DAC/ADC entegrelerinin internal yüksek hızlı aşırı örnekleme (oversampling) filtresi çalıştırması için gereklidir. Genellikle BCLK'nın 128, 256 veya 512 katı frekansta çalışır (Örn: 11.2896 MHz).
I2S Veri Zamanlama Detayı (1-Bit Gecikme Suralı):
Standart Philips I2S konfigürasyonunda, veri hattındaki (SD) ilk bit (MSB), WS (Word Select) hattı seviye değiştirdikten tam 1 BCLK saati sonra iletilmeye başlar. Verinin WS değişiminden hemen sonra başlaması durumunda bu varyasyona Left-Justified veya Right-Justified adı verilir.

2. I2S Ses Çerçevesi ve Zamanlama Diyagramı

Aşağıdaki tablo, 16-bit çözünürlükteki stereo bir ses verisinin I2S hattından iletim mantığını özetlemektedir:

Sinyal Hattı Sol Kanal (Left Channel) Sağ Kanal (Right Channel)
WS / LRCK Durumu LOW (0) Seviyesinde HIGH (1) Seviyesinde
Data (SD) Sıralaması MSB, Bit 14, ..., LSB (Sol Ses Örneği) MSB, Bit 14, ..., LSB (Sağ Ses Örneği)
SCK Darbe Sayısı 16 / 24 / 32 Saati Darbesi 16 / 24 / 32 Saati Darbesi
i2s zamanlama diagramı

3. Gömülü Sistem Kod Örneği (ESP32 + MAX98357A I2S DAC ile Sinyal Jeneratörü / Sinüs Dalgası)

Aşağıdaki örnekte ESP32'nin dahili I2S donanımı kullanılarak dışarıdaki bir MAX98357A (I2S Class-D Amfi / DAC) modülüne 44.1 kHz örnekleme hızında 16-bit stereo sinüs dalgası üretilip basılmaktadır:

C++ / ESP32 Arduino I2S Sürücüsü Örneği

#include <Arduino.h>
#include "driver/i2s.h"

// I2S Pin Tanımlamaları
#define I2S_BCLK_PIN  26  // Bit Clock
#define I2S_LRCK_PIN  25  // Word Select / Left Right Clock
#define I2S_DOUT_PIN  22  // Serial Data Out

#define I2S_NUM       I2S_NUM_0
#define SAMPLE_RATE   44100
#define WAVE_FREQ     440.0 // 440 Hz (La Notası)
#define PI_2          6.28318530718

void setupI2S() {
  // 1. I2S Konfigürasyon Yapısı
  i2s_config_t i2s_config = {
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX), // Master Verici Modu
    .sample_rate = SAMPLE_RATE,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,        // Stereo (Sol/Sağ)
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,  // Standart Philips I2S
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
    .dma_buf_count = 8,
    .dma_buf_len = 64,
    .use_apll = false
  };

  // 2. I2S Pin Konfigürasyonu
  i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_BCLK_PIN,
    .ws_io_num = I2S_LRCK_PIN,
    .data_out_num = I2S_DOUT_PIN,
    .data_in_num = I2S_PIN_NO_CHANGE
  };

  // Sürücüyü Yükle ve Pinleri Atama
  i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
  i2s_set_pin(I2S_NUM, &pin_config);
}

void setup() {
  Serial.begin(115200);
  setupI2S();
  Serial.println("I2S Ses Sürücüsü Başlatıldı. 440 Hz Ton Üretiliyor...");
}

void loop() {
  // 440 Hz Sinüs Dalgası Örnekleri Oluştur ve DMA Üzerinden I2S'e Bas
  int16_t sampleBuffer[128]; // Sol ve Sağ kanal örnekleri için tampon
  static float phase = 0.0;
  float phaseIncrement = (PI_2 * WAVE_FREQ) / SAMPLE_RATE;

  for (int i = 0; i < 64; i++) {
    int16_t val = (int16_t)(sin(phase) * 10000.0); // Ses seviyesi genliği
    sampleBuffer[i * 2]     = val; // Sol Kanal
    sampleBuffer[i * 2 + 1] = val; // Sağ Kanal

    phase += phaseIncrement;
    if (phase >= PI_2) phase -= PI_2;
  }

  size_t bytesWritten;
  // Kesintisiz veri iletimi için DMA Tamponuna Yaz
  i2s_write(I2S_NUM, sampleBuffer, sizeof(sampleBuffer), &bytesWritten, portMAX_DELAY);
}

4. Dijital Ses Protokollerinin Karşılaştırması (I2S vs I2C vs PDM vs S/PDIF)

Özellik I2S I2C PDM (Pulse Density Mod.) S/PDIF
Kullanım Amacı Ham Dijital Ses Verisi Transferi Komut ve Kontrol Verisi Dijital Mikrofon Sinyali Tüketici Ses Cihazları (Optik/Koaksiyel)
Hat Sayısı 3 - 4 Tel 2 Tel (SDA, SCL) 2 Tel (CLK, DATA) 1 Tel (Tek Yönlü)
Veri Formatı PCM (Paralel Sözcük / Seri Bitten) Bayt Odaklı Paketler 1-bit Aşırı Örneklenmiş Akış S/PDIF Kodlanmış Çerçeve
Mesafe < 10-20 cm (Devre Kartı İçi) < 1-2 Metre < 10 cm 10 Metreye kadar
İşlemci Yükü Çok Düşük (DMA ile doğrudan beslenir) Düşük Orta (Decimation filtresi gerekir) Düşük

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1