M5Stackでも使える Seeed Studio の Groveシステムの4線のみを使ってI2Sのステレオ信号のLeft/RightのどちらかをモノラルとしてDA変換してスピーカー出力できないか調査してみたが、手元にある機材(IC)ではできないことがわかった。可能にするICは見つかっていない。
うまくいかないことがわかったので、目的を達成することには役立たないが、備忘録として残しておく。
目次
I2S(Inter-IC Sound)の仕様
I2Sの仕様 ( I2SBUS.pdf (sparkfun.com) ) によれば、電源以外に以下のSCK、WD、SD3線を使って、ステレオ信号を伝送する。さらに、MCLKが使われることもある。
SCK (Continuous Serial Clock)
SDのデータビットのタイミングを示すクロックである。
Bit Clock (BCLK)とも呼ばれることも多い。
WS (Word Select)
ステレオ信号のLeftチャンネルとRightチャンネルを識別するための信号である。
LRCLK、LRCK と呼ばれることもある。
• WS = 0; channel 1 (left)
• WS = 1; channel 2 (right)
SD (Serial Data)
データビット列を示す信号である。
MCLK (Maser Clock)
I2S信号を処理するICによっては、SCK、WS、SDを処理するために、 SCK、WS、SDと同期したMCLK が外部から必要になるものがある。
I2Sを2線で使う考え方
Groveの4線のうち2線は電源で使用する必要があるので、信号のやりとりに使えるのは2線のみである。I2Sは信号を3線でやりとりするので、そのまま2線にすることはできない。
しかし、モノラルのみ伝送すればよいだけなら、ステレオのチャンネルを指定するWS(LRCLK)信号はなくても良く、受け側ではWSを0もしくは1で固定することで、2線伝送の可能性があるのではないかと考えた。仕様上はそのような使い方が禁止されているようではない。
そこで、手元にあるI2S Digital-to-Analog IC のBreakout board を使って試してみた。試さなくてもICの仕様書をちゃんと読めば分かったことであるが…。
たとえ、受け側が思っているように動作したとしても、送り側もWSを送出するのが前提になっているので、実質的にモノラルの出力が正しく行われるように特別なプログラムにする必要がある。
検討したIC
手元にあった 3種類のI2S DAC ブレークアウトボードを使って検討した。
Cirrus Logic Inc. CS4344
https://www.cirrus.com/products/cs4344-45-48/
Aliexpress で購入した CJMCU-4344 を使った。
動作させるためには、SCLK、SD以外に、WS(LRCLK)とMCLKが共に必要であることがわかった。MCLKがないと動作しないし、MCLKを与えても WSがなければ動作しない。
結果的にGroveでのI2Sモノラル伝送に使えない。
NXP UDA1334A
https://www.nxp.com/docs/en/data-sheet/UDA1334ATS.pdf
Adafruit UDA1334 を使用した。
動作させるためには、SCLK、SD以外に、WS(LRCLK)が必要なことがわかった。
WSからMCLKを生成しているため、WSがないと動作しない。
これも、GroveでのI2Sモノラル伝送に使えない。
Texus Instruments PCM5102
https://www.ti.com/product/PCM5102
Aliexpress で購入した GY-PCM5102 を使用した。
BCLK から MCLKを生成できるようなので、モノラル出力ができるかと思ったが、WS(LRCK)信号とBCLKの同期がなくなるとアナログ出力が0になってしまう仕様になっている。
まとめ
現時点では、GroveでI2Sを利用してモノラルの音声を出力することはできない。
電源にWS信号を重畳することなどはできるであろうが、簡便に使えるI2Sの意味がなくなってしまう。