I2S プロトコル : 動作、相違点、およびそのアプリケーション

問題を排除するために楽器を試してください





モバイルハンドセット、コンピュータ、およびデジタルシステム内のデジタルシステムとそのオーディオデータ要件 ホームオートメーション 製品は、ある期間にわたって劇的に変化しました。プロセッサからの、またはプロセッサへのオーディオ信号はデジタル化されています。さまざまなシステムのこのデータは、次のような多くのデバイスを介して処理されます DSP 、ADC、DAC、デジタル I/O インターフェイスなど。これらのデバイスがオーディオ データを相互に通信するには、標準プロトコルが必要です。その 1 つが I2S プロトコルです。これは、1986 年 2 月に Philip Semiconductor によってデバイス間のデジタル オーディオ インターフェイス用に設計されたシリアル バス インターフェイスです。この記事では、I の概要について説明します。 2Sプロトコル そのアプリケーションでの作業。


I2S プロトコルとは何ですか?

あるデバイスから別のデバイスにデジタル オーディオ データを送信するために使用されるプロトコルは、I2S または Inter-IC サウンド プロトコルとして知られています。このプロトコルは、PCM (パルス符号変調) オーディオ データを電子デバイス内の 1 つの IC から別の IC に送信します。 I2S は、録音済みのオーディオ ファイルを MCU から DAC またはアンプに送信する際に重要な役割を果たします。このプロトコルは、マイクを使用してオーディオをデジタル化するためにも利用できます。 I2S プロトコル内には圧縮がないため、OGG、MP3、またはオーディオを圧縮するその他のオーディオ フォーマットは再生できませんが、WAV ファイルは再生できます。



特徴

I2S プロトコル機能 以下のものが含まれます。

  • 各サンプルに 8 ~ 32 データ ビットがあります。
  • Tx & Rx FIFO 割り込み。
  • DMA に対応しています。
  • 16 ビット、32 ビット、48 ビット、または 64 ビットのワード選択期間。
  • 同時双方向オーディオ ストリーミング。
  • 8 ビット、16 ビット、および 24 ビットのサンプル幅。
  • サンプルレートが異なります。
  • データ レートは、64 ビットのワード選択期間を通じて最大 96 kHz です。
  • インターリーブされたステレオ FIFO または独立した左右チャンネル FIFO
  • Tx と Rx の独立した有効化。

I2S 通信プロトコルの動作

I2S 通信プロトコル SCK (Continuous Serial Clock)、WS (Word Select) & SD (Serial Data) を含む 3 ライン シリアル バスを介してオーディオ データを処理する 3 ワイヤ プロトコルです。



I2S の 3 線式接続:

SCK

SCK またはシリアル クロックは、同様のサイクルでデータを取得するために使用される BCLK またはビット クロック ラインとしても知られる I2S プロトコルの最初のラインです。シリアル クロック周波数は、周波数 = サンプル レート x 各チャネルのビット数 x 番号のような式を使用して簡単に定義できます。チャネルの。

WS

I2S 通信プロトコルでは、WS またはワード セレクトは、左右のチャネルを分離する FS (フレーム セレクト) ワイヤとも呼ばれるラインです。

WS = 0 の場合、左チャネルまたはチャネル 1 が使用されます。

WS = 1 の場合、右チャネルまたはチャネル 2 が使用されます。

SD

シリアル データまたは SD は、ペイロードが 2 補数内で送信される最後のワイヤです。したがって、MSB が最初に転送されることは非常に重要です。これは、送信機と受信機の両方に異なるワード長が含まれる可能性があるためです。したがって、送信機または受信機は、送信されたビット数を認識しなければなりません。

  • 受信側のワード長が送信側より大きい場合、ワードは短縮されます (LSB ビットはゼロに設定されます)。
  • 受信側の語長が送信側の語長より短い場合、LSB ビットは無視されます。

送信機 次のいずれかでデータを送信できます クロックパルスの前縁または後縁 .これは、対応する 制御レジスタ .しかし 受信機は、シリアル データと WS をクロック パルスの立ち上がりエッジでのみラッチします。 .トランスミッタは、WS が変化してから 1 クロック パルス後にのみデータを送信します。レシーバは、シリアル データの同期に WS 信号を使用します。

I2S ネットワーク コンポーネント

複数の I2S コンポーネントが相互に接続されている場合、これは I2S ネットワークと呼ばれます。このネットワークのコンポーネントには、さまざまな名前とさまざまな機能が含まれています。したがって、次の図は 3 つの異なるネットワークを示しています。ここでは、ESP NodeMCU ボードが送信機として使用され、I2S オーディオ ブレークアウト ボードが受信機として使用されます。送信機と受信機を接続するために使用される 3 本のワイヤは、SCK、WS、および SD です。

  I2S ネットワーク コンポーネント
I2S ネットワーク コンポーネント

最初の図では、送信機 (Tx) がマスターであるため、SCK (シリアル クロック) と WS (ワード選択) ラインを制御します。

2 番目の図では、レシーバーがマスターです。したがって、SCK と WS の両方のラインがレシーバーから始まり、トランスミッターが終わります。

3 番目の図では、マスター デバイスのように機能する外部コントローラーがネットワーク内のノードに接続されています。したがって、このデバイスは SCK と WS を生成します。

上記のすべての I2S ネットワークでは、使用可能なマスター デバイスは 1 つだけであり、サウンド データを送受信する他の多くのコンポーネントがあります。

I2S では、クロック信号を提供することにより、任意のデバイスをマスターにすることができます。

I2S タイミング図

I2S とその機能をよりよく理解するために、I2S 通信プロトコルのタイミング図を以下に示します。 I2S プロトコルのタイミング図を以下に示します。これには、SCK、WS、および SD の 3 つのワイヤが含まれます。

  I2S プロトコルのタイミング図
I2S プロトコルのタイミング図

上の図では、まず、シリアル クロックの周波数 = サンプル レート * 各チャネルのビット数 * 番号です。チャネルの)。ワード選択ラインは、右チャンネルの「1」と左チャンネルの「0」の間で変化する 2 番目のラインです。

3 番目のラインはシリアル データ ラインで、HIGH から LOW までのドットで示される立ち下がりエッジの各クロック サイクルでデータが送信されます。

さらに、MSB が送信される 1 CLK サイクル前に WS ラインが変化することがわかります。これにより、レシーバーは前のワードを格納し、次のワードのために入力レジスタをクリアすることができます。 MSB は、WS が変化した後に SCK が変化したときに送信されます。

送信機と受信機の間でデータが送信されるたびに、次のような伝搬遅延が発生します。

伝播遅延 = (外部クロックと受信機の内部クロックの時間差)+(内部クロックからデータ受信までの時間差)。

伝搬遅延を最小限に抑え、送信機と受信機の間のデータ伝送を同期するには、送信機のクロック周期が

T > トラ – 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

このプロジェクトの主な目的は、Arduino I2S ライブラリを使用して I2S テルミン インターフェイスを作成することです。このプロジェクトを作成するために必要なコンポーネントは次のとおりです。 Arduino MKRゼロ、 ブレッドボード 、ジャンパー線、Adafruit MAX98357A、3W、4 オームのスピーカー、RobotGeek Slider。

Arduino I2S ライブラリを使用すると、I2S バスを介してデジタル オーディオ データを送受信できます。したがって、この例では、Arduino 設計で計算されたサウンドを再生するために、このライブラリを使用して I2S DAC を駆動する方法を説明することを目的としています。

この回路は次のように接続できます。この例で使用される I2S DAC は、I2S バス用の電源だけでなく、3 本のワイヤのみを必要とします。 Arduino MKRZero の I2S の接続は次のとおりです。

ピン A6 のシリアル データ (SD)。

ピン 2 のシリアル クロック (SCK)。

ピン 3 のフレームまたはワード選択 (FS)。

働く

基本的に、テルミンにはピッチとボリュームの 2 つのコントロールがあります。したがって、これら 2 つのパラメーターは 2 つのスライド ポテンショメーターを動かすことによって変更されますが、それらを調整して読み取ることもできます。 2 つのポテンショメータは分圧器の形で接続されているため、これらのポテンショメータを動かすと、0 から 1023 までの値が得られます。その後、これらの値は、最大周波数と最小周波数、および最小音量と最大音量の間にマッピングされます。

  I2S テルミン図
I2S テルミン図

I2S バスで送信される音は単純な正弦波で、その振幅と周波数はポテンショメータの読み取り値に基づいて変更されます。

コード

テルミンを Arduino MKRZero、2 スライダー ポテンショメータ、I2S DAC と接続するためのコードを以下に示します。

#include

const int maxFrequency = 5000; //最大生成頻度
const int minFrequency = 220; //最小生成頻度
const int maxVolume = 100; //生成周波数の最大音量
const int minVolume = 0; //生成された周波数の最小音量
const int sampleRate = 44100; //生成された周波数のサンプルレート
const int wavSize = 256; //バッファサイズ
短い正弦[wavSize]; //正弦値が格納されるバッファ
const int frequencyPin = A0; //信号の周波数を決定するポットに接続されたピン
const int 振幅ピン = A1; //信号の振幅を決定するポットに接続されたピン
const int ボタン = 6; //周波数を表示するためにボタンコントロールに接続されたピン

ボイドセットアップ()
{

Serial.begin(9600); //シリアルポートを設定
// I2S トランスミッタを初期化します。
if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println(“I2S の初期化に失敗しました!”);

ながら(1);
}

generateSine(); // サイン値でバッファーを埋めます
pinMode(ボタン、INPUT_PULLUP); //ボタンピンを入力プルアップに入れる

}
ボイドループ() {

if (digitalRead(ボタン) == LOW)

{

float 周波数 = map(analogRead(frequencyPin), 0, 1023, minFrequency, maxFrequency); //マップ頻度
int 振幅 = map(analogRead(amplitudePin), 0, 1023, minVolume, maxVolume); //マップの振幅
playWave(周波数、0.1、振幅); //音を出す
//シリアルに値を出力
Serial.print(“周波数 = “);
Serial.println(頻度);
Serial.print(“振幅 = “);
Serial.println(振幅);

}

}
void generateSine() {
for (int i = 0; i < wavSize; ++i) {
sine[i] = ushort(float(100) * sin(2.0 * PI * (1.0 / wavSize) * i)); //100 は小さい数を持たないようにするために使用されます
}
}
void playWave(float 周波数, float 秒, int 振幅) {
// 指定された波形バッファを再生します
// 秒数。
// 最初に、実行するために再生する必要があるサンプルの数を計算します
// 必要な秒数。

unsigned int iterations = seconds * sampleRate;

// 次に、波の中を移動する「速度」を計算します
// 再生中のトーンの周波数に基づいてバッファします。

float delta = (周波数 * wavSize) / float(sampleRate);

// すべてのサンプルをループして再生し、
// 各瞬間のウェーブ バッファ内の位置。

for (unsigned int i = 0; i < 繰り返し; ++i) {
short pos = (unsigned int)(i * delta) % wavSize;
短いサンプル = 振幅 * 正弦 [pos];

// サンプルを複製して、左チャンネルと右チャンネルの両方に送信します。
// 書きたい場合は、右チャンネル、左チャンネルの順番のようです
// ステレオ サウンド。

while (I2S.availableForWrite() < 2);
I2S.write(サンプル);
I2S.write(サンプル);

}
}

I2C と I2S プロトコルの違い

I2C と I2S プロトコルの違いは次のとおりです。

2C

I2S

の I2C プロトコル Inter-IC バスプロトコルの略 I2S は Inter-IC サウンド プロトコルの略です。 .
主に、同様の PCB に配置された集積回路間で信号を実行するために使用されます。 デジタルオーディオ機器の接続に使用します。
SDA や SCL などの複数のマスターとスレーブ間で 2 回線を使用します。 . WS、SCK、SD の 3 回線を使用します。
マルチマスター&マルチスレーブに対応。 シングルマスターをサポートします。
このプロトコルは、CLK ストレッチをサポートします。 このプロトコルには CLK ストレッチがありません。
I2C には、追加のオーバーヘッド スタート & ストップ ビットが含まれます。 I2S にはスタート ビットとストップ ビットは含まれません。

利点

I2S バスの利点 以下のものが含まれます。

  • I2S は、個別の CLK およびシリアル データ ラインを利用します。したがって、非同期システムと比較して、受信機の設計は非常に単純です。
  • これは単一のマスター デバイスであるため、データの同期に問題はありません。
  • I2S o/p に基づくマイクロフォンは、アナログ フロント エンドを必要とせず、デジタル トランスミッターを使用してワイヤレス マイクロフォン内で使用されます。これを使用することで、送信機と変換器の間を完全にデジタル接続できます。

短所

I2S バスの欠点 以下のものが含まれます。

  • I2S は、ケーブルを介したデータ転送には提案されていません。
  • I2S は、高度なアプリケーションではサポートされていません。
  • このプロトコルには、3 つの信号線間の同期の問題があり、高いビット レートとサンプリング周波数で注目されます。したがって、この問題は主に、クロックラインとデータライン間の伝搬遅延の変動が原因で発生します。
  • I2S にはエラー検出メカニズムが含まれていないため、データのデコード中にエラーが発生する可能性があります。
  • 主に、同様の PCB 上の IC 間通信に使用されます。
  • I2S 用の一般的なコネクタと相互接続ケーブルは存在しないため、異なる設計者は異なるコネクタを使用します。

アプリケーション

I2S プロトコルのアプリケーション 以下のものが含まれます。

  • I2S は、デジタル オーディオ デバイスの接続に使用されます。
  • このプロトコルは、オーディオ データを DSP またはマイクロコントローラからオーディオ コーデックに転送してオーディオを再生する際に広く使用されています。
  • 最初は、I2S インターフェイスが CD プレーヤの設計に使用されました。これで、デジタル オーディオ データが IC 間で送信されている場所を見つけることができます。
  • I2S は、DSP、オーディオ ADC、DAC、マイクロコントローラ、サンプル レート コンバータなどで使用されます。
  • I2S は、特にデジタル オーディオ データ通信用の集積回路間で使用するように設計されています。
  • このプロトコルは、I2S がデジタル オーディオ デバイス間のオーディオ データ伝送に重点を置く場合、マイクロコントローラとその周辺デバイスを接続する上で重要な役割を果たします。

したがって、これはすべての概要についてです I2S プロトコル仕様 これには、作業、違い、およびそのアプリケーションが含まれます。 I²S は 3 線同期シリアル プロトコルです。 2 つの集積回路間でデジタル ステレオ オーディオを転送するために使用されます。の I2S プロトコル アナライザー すべての DigiView ロジック アナライザを含む信号デコーダです。この DigiView ソフトウェアは、あらゆる種類の信号に対して幅広い検索、ナビゲーション、エクスポート、測定、プロットおよび印刷機能を提供します。 I3C プロトコルとは何ですか?