Raspberry Pi I2Sをスレーブ設定にして外部クロック同期でDACを再生
マスタークロックを水晶発振器で発振させて、ADCに入れてLRCK/BCKを発生させて、それをRaspberry
PiのI2Sの同期信号として入力し、Raspberry PiのI2S出力で
DACを再生をしてみた。
今回は、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の固定にしておく。
(今回作成した回路図)
aplayexを使って、96KHzのS24_3LEとS16_LEのWAVが再生できることが確認できた。
また、LIRCを使ってリモコンで 曲指定でPLAYとSTOPできるようにしてみた。 lircrc
■参考になる資料
- aplayex ビット長とエンディアンの違いを変換して、 再生できるようにするaplayです。 サンプリング周波数とチャネル数の違いは、変換できません。
- aplayexのコンパイル: alsa-project-pub-utils aplayerなどのソースが置いてある中から、今回は、Piの中の/usr/include/alsa/version.hヘッダーファイルのバージョンと同じalsa-utils-1.0.25.tarを使って/configureをして準備した。次に、オリジナルの aplayが問題なくmakeできることを確認する。 aplayexのページの中の aplayex_src をダウンロードしたものを展開してmake するとaplayex ができる。
■
警告
PI基板をつかって接続する場合は、電気的なことをよく理解した上でお
使いください。そうしないと、PI基板と接続した相手などを破壊する危険があります。
■免責
(1)回路図やプログラムやデータの使用により、使用者に損失が生じたとしても、その責任
を負いません。
(2)回路図やプログラムやデータにバグや欠陥があったとしても、修正や改良の義務を負い
ません。