Raspberry Pi I2Sをスレーブ設定にして外部クロック同期でDACを再生


マスタークロックを水晶発振器で発振させて、ADCに入れてLRCK/BCKを発生させて、それをRaspberry PiのI2Sの同期信号として入力し、Raspberry PiのI2S出力で DACを再生をしてみた。 

adc master dac slave


今回は、fs=96KHz固定のものだ。 水晶発振器の周波数を変更したり、分周比(512 ?  256)を変更すれば ほかの周波数にも対応可能だ。


I2S DACモジュールとして hifiberry(pcm5102a)を以下のように変更して、 make して、できたモジュールをinstall して使う。
モジュールを変更して作成するためには、カーネルの再構築の環境が必要だ。

/usr/src/linux/soundsoc/bcm/hifiberry_dac.c
SND_SOC_DAIFMT_CBM_CFM,    <--- マスターに変更。 これでLRCK/BCKは外部からの信号同期になる。

/usr/src/linux/soundsoc/codecs/pcm5102a.c
    return snd_soc_dai_set_bclk_ratio(cpu_dai,  32*2);  <--- bck=64fs 固定。クロックをADCで発生する都合上、BCK=64fsの固定にしておく。



(今回作成した回路図)
ADCmaster DACsalve


aplayexを使って、96KHzのS24_3LEとS16_LEのWAVが再生できることが確認できた。
また、LIRCを使ってリモコンで 曲指定でPLAYとSTOPできるようにしてみた。 lircrc




参考になる資料




警告
PI基板をつかって接続する場合は、電気的なことをよく理解した上でお 使いください。そうしないと、PI基板と接続した相手などを破壊する危険があります。

免責
(1)回路図やプログラムやデータの使用により、使用者に損失が生じたとしても、その責任 を負いません。
(2)回路図やプログラムやデータにバグや欠陥があったとしても、修正や改良の義務を負い ません。