I2S Protokolü: Çalışma, Farklılıklar ve Uygulamaları

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Mobil Ahizeler, Bilgisayarlar ve içindeki dijital sistemler ve ses verisi gereksinimleri Ev otomasyonu ürünler bir süre içinde önemli ölçüde değişti. İşlemcilerden gelen veya işlemcilere giden ses sinyali dijitalleşiyor. Farklı sistemlerdeki bu veriler, aşağıdakiler gibi birçok cihaz aracılığıyla işlenir: DSP'ler , ADC'ler, DAC'ler, Dijital I/O arayüzleri vb. Bu cihazların ses verilerini birbirleriyle iletişim kurabilmesi için standart bir protokol gereklidir. Bunlardan biri I2S protokolüdür. Philip Semiconductor tarafından Şubat 1986'da cihazlar arasında dijital ses arabirimi için tasarlanmış bir seri veri yolu arabirimidir. Bu makalede, I'e genel bir bakış anlatılmaktadır. 2S protokolü uygulamalarla çalışıyor.


I2S Protokolü Nedir?

Dijital ses verilerini bir cihazdan başka bir cihaza iletmek için kullanılan protokol, I2S veya Inter-IC Ses protokolü olarak bilinir. Bu protokol, bir elektronik cihaz içinde bir IC'den diğerine PCM (darbe kodu modülasyonlu) ses verilerini iletir. I2S, önceden kaydedilmiş ses dosyalarının bir MCU'dan bir DAC'ye veya amplifikatöre iletilmesinde önemli bir rol oynar. Bu protokol, bir mikrofon kullanarak sesi dijitalleştirmek için de kullanılabilir. I2S protokollerinde sıkıştırma yoktur, bu nedenle OGG veya MP3 veya sesi yoğunlaştıran diğer ses formatlarını çalamazsınız, ancak WAV dosyalarını çalabilirsiniz.



Özellikler

bu I2S protokolü özellikleri aşağıdakileri içerir.

  • Her örnek için 8 ila 32 veri biti vardır.
  • Tx & Rx FIFO kesintileri.
  • DMA'yı destekler.
  • 16-bit, 32-bit, 48-bit veya 64-bit sözcük seçme periyodu.
  • Eşzamanlı çift yönlü ses akışı.
  • 8 bit, 16 bit ve 24 bit örnek genişliği.
  • Farklı örnek oranlarına sahiptir.
  • Veri hızı, 64-bit kelime seçim periyodu boyunca 96 kHz'e kadardır.
  • Interleaved stereo FIFO'lar veya Bağımsız sağ ve sol kanal FIFO'lar
  • Tx & Rx'in bağımsız etkinleştirilmesi.

I2S İletişim Protokolü Çalışması

I2S iletişim protokolü SCK (Sürekli Seri Saat), WS (Kelime Seçimi) ve SD (Seri Veri) içeren 3 hatlı bir seri veri yolu üzerinden ses verilerini basitçe işleyen 3 Telli bir protokoldür.



I2S'nin 3 Telli Bağlantısı:

SCK

SCK veya Seri Saat, benzer bir döngüdeki verileri elde etmek için kullanılan BCLK veya bit saat hattı olarak da bilinen I2S protokolünün ilk satırıdır. Seri saat frekansı, her kanal için Frekans = Örnekleme Hızı x Bitler x no gibi formül kullanılarak basitçe tanımlanır. kanalların.

WS

I2S iletişim protokolünde, WS veya kelime seçimi, sağ veya sol kanalı ayıran FS (Çerçeve Seçimi) teli olarak da bilinen çizgidir.

WS = 0 ise sol kanal veya kanal-1 kullanılır.

WS = 1 ise, sağ kanal veya kanal-2 kullanılır.

SD

Seri Veri veya SD, yükün 2 tamamlayıcı içinde iletildiği son kablodur. Bu nedenle, hem verici hem de alıcı farklı kelime uzunlukları içerebileceğinden, ilk olarak MSB'nin aktarılması çok önemlidir. Bu nedenle, verici veya alıcı kaç bitin iletildiğini tanımak zorundadır.

  • Alıcının kelime uzunluğu vericiden daha büyükse, kelime kısaltılır (LSB bitleri sıfıra ayarlanır).
  • Alıcının kelime uzunluğu, vericinin kelime uzunluğundan daha az ise, LSB bitleri dikkate alınmaz.

bu verici verileri ya da gönderebilir saat darbesinin ön kenarı veya arka kenarı . Bu, ilgili olarak yapılandırılabilir kontrol kayıtları . Fakat alıcı, seri verileri ve WS'yi yalnızca saat darbesinin ön kenarında kilitler . Verici, verileri yalnızca WS'deki değişiklikten sonra bir saat darbesinden sonra iletir. Alıcı, seri verilerin senkronizasyonu için WS sinyalini kullanır.

I2S Ağ Bileşenleri

Birden fazla I2S bileşeni birbirine bağlandığında buna I2S ağı denir. Bu ağın bileşeni, farklı adlar ve ayrıca farklı işlevler içerir. Bu nedenle, aşağıdaki şema 3 farklı ağı göstermektedir. Burada verici olarak bir ESP NodeMCU kartı ve alıcı olarak bir I2S ses devre kartı kullanılır. Verici ve alıcıyı bağlamak için kullanılan üç kablo SCK, WS ve SD'dir.

  I2S Ağ Bileşenleri
I2S Ağ Bileşenleri

İlk şemada, verici (Tx) ana birimdir, dolayısıyla SCK (seri saat) ve WS (kelime seçimi) hatlarını kontrol eder.

İkinci diyagramda, alıcı master'dır. Böylece hem SCK hem de WS hatları alıcıdan başlar ve verici biter.

Üçüncü diyagramda, ağ içindeki düğümlere ana cihaz gibi çalışan bir dış kontrolör bağlanır. Böylece bu cihaz SCK & WS'yi oluşturur.

Her şeyden önce I2S ağlarında, yalnızca tek bir ana cihaz ve ses verilerini ileten veya alan birçok başka bileşen mevcuttur.

I2S'de herhangi bir cihaz, saat sinyali sağlayarak master olabilir.

I2S Zamanlama Şeması

I2S'nin ve işlevselliğinin daha iyi anlaşılması için aşağıda gösterilen I2S iletişim protokolü zamanlama şemasına sahibiz. I2S protokolünün zamanlama şeması, üç kablo SCK, WS ve SD içeren aşağıda gösterilmiştir.

  I2S Protokolü Zamanlama Şeması
I2S Protokolü Zamanlama Şeması

Yukarıdaki şemada, ilk olarak, seri saatin bir Frekans = Örnekleme Hızı * Her kanal için bit sayısı * no. kanalları). Kelime seçme satırı, sağ kanal için '1' ve sol kanal için '0' arasında değişen ikinci satırdır.

Üçüncü satır, verilerin YÜKSEK'ten DÜŞÜK'e noktalarla gösterilen düşen kenarda her saat döngüsünde iletildiği seri veri hattıdır.

Ek olarak, WS hattının, MSB iletilmeden önce bir CLK döngüsü değiştiğini fark edebiliriz; bu, alıcıya önceki kelimeyi saklaması ve bir sonraki kelime için giriş kaydını temizlemesi için zaman verir. WS değiştikten sonra SCK değiştiğinde MSB gönderilir.

Verici ve alıcı arasında bir veri iletildiğinde, bir yayılma gecikmesi olur.

yayılım gecikmesi = (harici saat ile alıcının dahili saati arasındaki zaman farkı )+( dahili saat ile veri alındığında arasındaki zaman farkı).

Yayılma gecikmesini en aza indirmek ve verici ile alıcı arasındaki veri iletiminin senkronizasyonu için, vericinin bir saat periyoduna sahip olması gerekir.

T > tr  – T'nin vericinin saat periyodu ve tr'nin ise vericinin minimum saat periyodu olduğunu varsaymak.

Yukarıdaki koşul altında, örneğin bir göz önüne alırsak Veri iletim hızı 2,5 MHz olan verici  sonra:

tr = 360ns

saat Yüksek tHC (minimum) >0,35 T.

saat Düşük tLC (minimum> > 0.35T.

Veri iletim hızı 2.5MHz olan bir bağımlı olarak alıcı daha sonra:

saat Yüksek tHC (minimum) < 0,35 T

saat Düşük tLC (minimum) < 0,35T.

kurulum süresi tst(minimum) < 0.20T.

I2S Protokolü Arduino

Bu projenin temel amacı, Arduino I2S kitaplığını kullanarak bir I2S  termin arayüzü yapmaktır. Bu projeyi yapmak için gerekli bileşenler; Arduino MKR Sıfır, ekmek tahtası , Jumper kabloları, Adafruit MAX98357A, 3W, 4 ohm hoparlör ve RobotGeek Slider.

Arduino I2S kütüphanesi, I2S veri yolu üzerinden dijital ses verilerini iletmenize ve almanıza izin verir. Dolayısıyla bu örnek, Arduino tasarımında hesaplanan sesi yeniden üretmek için bir I2S DAC'yi sürmek için bu kitaplığın nasıl kullanılacağını açıklamayı amaçlamaktadır.

Bu devre şu şekilde bağlanabilir; Bu örnekte kullanılan I2S DAC, I2S veriyolu için bir güç kaynağının yanı sıra sadece üç kablo gerektirir. Arduino MKRZero üzerindeki I2S bağlantıları aşağıdaki gibidir;

A6 pininde Seri Veri (SD);

pin2'de Seri Saat (SCK);

pin3'teki çerçeve veya Word Select (FS);

Çalışma

Temel olarak, Theremin'in iki kontrol perdesi ve hacmi vardır. Böylece, bu iki parametre, iki slayt potansiyometresi hareket ettirilerek değiştirilir, ancak bunları okumak için de ayarlayabilirsiniz. İki potansiyometre bir voltaj bölücü biçiminde bağlanmıştır, bu nedenle bu potansiyometreleri hareket ettirerek 0'dan 1023'e kadar değerler elde edersiniz. Bundan sonra, bu değerler maksimum ve minimum frekans ile en düşük ve en yüksek hacim arasında eşlenir.

  I2S Termin Şeması
I2S Termin Şeması

I2S veriyolunda iletilen ses, genliği ve frekansı potansiyometrelerin okunmasına göre değiştirilen basit bir sinüs dalgasıdır.

kod

Bir Theremin'i Arduino MKRZero, 2 kaydırıcılı potansiyometre ve bir I2S DAC ile arayüzlemek için kod aşağıda verilmiştir.

#include

const int maxFrekans = 5000; // maksimum üretilen frekans
const int minFrekans = 220; // minimum üretilen frekans
const int maxVolume = 100; // üretilen frekansın maksimum hacmi
const int minVolume = 0; // üretilen frekansın min hacmi
const int örnekHızı = 44100; //oluşturulan frekansın örneklenmesi
const int wavSize = 256; // arabellek boyutu
kısa sinüs[wavSize]; // sinüs değerlerinin saklandığı arabellek
const int frekansPin = A0; // sinyalin frekansını belirleyen pota bağlı pin
const int genlikPin = A1; // sinyalin genliğini belirleyen pota bağlı pin
const int düğmesi = 6; //frekansı görüntülemek için düğme kontrolüne bağlı pin

geçersiz kurulum()
{

Seri.başla(9600); // seri bağlantı noktasını yapılandır
// I2S vericisini başlat.
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(“I2S başlatılamadı!”);

iken (1);
}

üretSine(); // arabelleği sinüs değerleriyle doldur
pinMode(düğme, INPUT_PULLUP); // buton pinini giriş pull-up'ına koy

}
boşluk döngüsü () {

if (dijitalOkuma(düğme) == DÜŞÜK)

{

kayan frekans = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //harita frekansı
int genlik = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //harita genliği
playWave(frekans, 0.1, genlik); //sesi Oynat
// değerleri seriye yazdır
Serial.print(“Sıklık = “);
Seri.println(frekans);
Serial.print(“Genlik = “);
Serial.println(genlik);

}

}
geçersiz createSine() {
for (int i = 0; i < wavSize; ++i) {
sinüs[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 küçük sayıların olmaması için kullanılır
}
}
void playWave(kayan frekans, kayan saniye, int genlik) {
// Belirtilen için sağlanan dalga biçimi arabelleğini oynatın
// saniye miktarı.
// İlk önce çalıştırmak için kaç örneğin oynatılması gerektiğini hesaplayın
// istenilen saniye miktarı için.

imzasız int yinelemeler = saniye * sampleRate;

// Ardından dalgada hareket ettiğimiz 'hızı' hesaplayın
// çalınan tonun frekansına göre arabellek.

float delta = (frekans * wavSize) / float(sampleRate);

// Şimdi tüm örnekler arasında dolaşın ve bunları oynatın,
// zaman içindeki her an için dalga tamponu içinde konum.

for (işaretsiz int i = 0; i < yinelemeler; ++i) {
kısa konum = (işaretsiz int)(i * delta) % wavSize;
kısa örnek = genlik * sinüs[konum];

// Örneği çoğaltın, böylece hem sol hem de sağ kanallara gönderilir.
// Görünüşe göre sıra sağ kanal, sol kanal yazmak istiyorsanız
// stereo ses.

while (I2S.availableForWrite() < 2);
I2S.write(örnek);
I2S.write(örnek);

}
}

I2C ve I2S Protokolü Arasındaki Fark

I2C ve I2S Protokolü arasındaki fark aşağıdakileri içerir.

2C

I2S

bu I2C protokolü inter-IC veri yolu protokolü anlamına gelir I2S, Inter-IC Ses protokolü anlamına gelir .
Esas olarak benzer bir PCB üzerine yerleştirilmiş entegre devreler arasında sinyalleri çalıştırmak için kullanılır. Dijital ses cihazlarını bağlamak için kullanılır.
SDA ve SCL gibi birkaç ana ve bağımlı arasında iki satır kullanır . Üç satır WS, SCK  & SD kullanır.
Çoklu ana ve çoklu köleyi destekler. Tek bir master'ı destekler.
Bu protokol, CLK esnetmeyi destekler. Bu protokolde CLK esnetme yoktur.
I2C, ek havai başlatma ve durdurma bitlerini içerir. I2S herhangi bir başlatma ve durdurma biti içermez.

Avantajlar

bu I2S veri yolunun avantajları aşağıdakileri içerir.

  • I2S, ayrı CLK ve seri veri hatları kullanır. Bu nedenle asenkron sistemlere göre çok basit alıcı tasarımlarına sahiptir.
  • Tek bir ana cihazdır, bu nedenle veri senkronizasyonu ile ilgili bir sorun yoktur.
  • I2S o/p tabanlı mikrofon, analog bir ön uca ihtiyaç duymaz, ancak dijital bir verici kullanılarak kablosuz bir mikrofon içinde kullanılır. Bunu kullanarak, verici ve dönüştürücü arasında tamamen dijital bir bağlantıya sahip olabilirsiniz.

Dezavantajları

bu I2S veri yolunun dezavantajları aşağıdakileri içerir.

  • I2S, kablolar aracılığıyla veri aktarımı için önerilmez.
  • I2S, üst düzey uygulamalarda desteklenmez.
  • Bu protokol, yüksek bit hızı ve örnekleme frekansında fark edilen üç sinyal hattı arasında bir senkronizasyon sorununa sahiptir. Dolayısıyla bu sorun, esas olarak, saat hatları ve veri hatları arasındaki yayılma gecikmelerinin değişmesi nedeniyle ortaya çıkar.
  • I2S bir hata algılama mekanizması içermez, bu nedenle veri kod çözme sırasında hatalara neden olabilir.
  • Esas olarak benzer bir PCB üzerinde IC arası iletişim için kullanılır.
  • I2S için tipik konektörler ve ara bağlantı kabloları yoktur, bu nedenle farklı tasarımcılar farklı konektörler kullanır.

Uygulamalar

bu I2S protokolünün uygulamaları aşağıdakileri içerir.

  • I2S, dijital ses cihazlarını bağlamak için kullanılır.
  • Bu protokol, ses çalmak için bir DSP veya mikro denetleyiciden bir ses codec bileşenine ses verilerinin aktarılmasında yaygın olarak kullanılır.
  • Başlangıçta, CD çalar tasarımlarında I2S arayüzü kullanılır. Artık, IC'ler arasında dijital ses verilerinin nereye gönderildiği bulunabilir.
  • I2S, DSP'lerde, ses ADC'lerinde, DAC'lerde, mikrodenetleyicilerde, örnekleme hızı dönüştürücülerinde vb. kullanılır.
  • I2S, özellikle dijital ses verilerini iletmek için entegre devreler arasında kullanılmak üzere tasarlanmıştır.
  • Bu protokol, I2S dijital ses cihazları arasındaki ses verisi iletimine odaklandığında mikrodenetleyicinin ve çevre birimlerinin bağlanmasında önemli bir rol oynar.

Bu nedenle, tüm bunlar genel bir bakışla ilgilidir. I2S protokolü belirtimi çalışma, farklılıklar ve uygulamalarını içerir. I²S, 3 kablolu senkron seri protokoldür iki entegre devre arasında dijital stereo sesi aktarmak için kullanılır. bu I2S Protokol Analizörü tüm DigiView Mantık Analizörlerini içeren bir sinyal kod çözücüdür. Bu DigiView yazılımı, her tür sinyal için geniş arama, gezinme, dışa aktarma, ölçüm, çizim ve yazdırma yetenekleri sağlar. İşte size bir soru, I3C protokolü nedir?