I2Sライブラリ

SAMD21ボードでのI2S(Inter-IC Sound)プロトコルの使い方に関する文書です。


AUTHOR: Arduino、LAST REVISION: 2022/11/23 23:29


概要

このライブラリを使うと、SAMD21ベースのボード(例: Arduino/Genuino Zero、MKRZero、MKR1000)で、I2Sプロトコルを使うことができます。

このライブラリを使うには、

1
#include <I2S.h>

I2S(Inter-IC Sound)は、デジタルオーディオデバイス間を接続するシリアルバスインターフェイスの標準です。PCMオーディオデータを、電子デバイス内のIC間で通信するために使われます。

Phillips標準に従うI2Sバスは、少なくとも3本の電線を使います。

  • SCK(Serial Clock)は、クロック信号です。BCLK(Bit Clock Line)とも言われます。
  • FS(Frame Select)は、右チャネルデータと左チャネルデータを区別するために使われます。WS(Word Select)とも呼ばれます。
  • SD(Serial Data)は、送信されるデータです。

以下で説明しますが、SCKとWSを生成するデバイスはコントローラです。

SCKラインはサンプリングレートとチャネルのビット数、チャネル数に依存した周波数をもち、以下のように決まります。

  • Frequency = SampleRate x BitsPerChannel x numberOfChannels

典型的な設定では、オーディオデータの送信者はトランスミッタ(Transmitter)と呼ばれ、他端のレシーバにデータを転送します。バスクロック(SCK)とWS信号を制御するデバイスはネットワーク内のコントローラで、どんなネットワークでも、ある時間内では、ただ一つのデバイスだけがコントローラになることができます。他の接続されている全てのデバイスはペリフェラルモードになります。コントローラは、トランスミッタにもレシーバにも、独立したコントローラもなることができます。デジタルオーディオデータのサンプルは4ビットから32ビットのサイズです。

一般的に、サンプリングレート(kHz)とサンプリングのビット数が高くなると、オーディオ品質は上がります(デジタルデータがアナログオーディオに変換されたときに)。

I2Sクラス

begin()

説明

与えられた引数で通信するためにI2Sインターフェイスを初期化します。

文法

1
2
I2S.begin(mode, sampleRate, bitsPerSample); // controller device
I2S.begin(mode, bitsPerSample); // peripheral device

パラメータ

  • mode: I2S_PHILIPS_MODE、I2S_RIGHT_JUSTIFIED_MODE、I2S_LEFT_JUSTIFIED_MODEのどれか
  • sampleRate: 利用するサンプリング周波数(Hz) - long
  • bitsPerSample: 1サンプルあたりのビット数(例: 8、16、32)

戻り値

成功時: 1、失敗時: 0

end()

説明

I2S通信を終了します。I2SピンはGPIOとして利用できるようになります。再度I2S通信を行うには、I2S.begin()を呼びます。

文法

1
I2S.end()

パラメータ

なし

戻り値

なし

available()

説明

I2Sインターフェイスから読み取り可能なバイト数を取得します。これはすでに到着したデータで、I2S受信バッファに格納されています。available()はStreamユーティリティクラスを継承しています。

文法

1
I2S.available()

パラメータ

なし

戻り値

読み取り可能なバイト数。

peek()

説明

内部のI2Sバッファからデータを削除しないで、入力されたI2Sデータの次のサンプルを返します。すなわち、連続したpeek()の呼び出しは同じサンプルを返します。次のread()の呼び出しも同じです。peek()はStreamユーティリティクラスを継承しています。

文法

1
I2S.peek()

パラメータ

なし

戻り値

利用可能な入力I2Sデータの次のサンプル(もしくは、データが利用可能でない場合は0)。

write()

説明

I2Sインターフェイスにバイナリデータを書き込みます。このデータは、サンプルもしくは連続したサンプルとして送信されます。

文法

1
2
I2S.write(val) // blocking
I2S.write(buf, len) // not blocking

パラメータ

  • val: 一つのサンプルとして送信するデータ
  • buf: 一連のサンプルとして送信する配列
  • len: バッファ長

戻り値

byte

  • write()は、送信したバイト数を返します。しかし、その値を読み取ることはオプションです。

availableForWrite()

説明

書き込み操作をブロックすることなくバッファに書き込むことができるバイト数を取得します。

文法

1
I2S.availableForWrite()

パラメータ

なし

戻り値

書き込み可能なバイト数。

onTransmit(handler)

説明

データブロックが送信されたときに呼び出す関数を登録します。

パラメータ

  • handler: データが送信されたときに呼び出す関数。関数は何も返しません。例えば、void myHandler()

戻り値

なし

onReceive(handler)

説明

データブロックを受信したたときに呼び出す関数を登録します。

パラメータ

  • handler: データを受信したときに呼び出す関数。関数は何も返しません。例えば、void myHandler()

戻り値

なし

オリジナルのページ

https://docs.arduino.cc/learn/built-in-libraries/i2s

最終更新日

August 25, 2024

inserted by FC2 system