今回はDAI、DAC部分の紹介です。
DAIにはシーラスロジックの CS8416、DACにはロームの BU9480F を使用しました。
CS8416を選んだ理由は、単純に入手しやすいってだけです。
秋葉原の若松通商で850円。
足の幅が広いのと狭い物の二種類ありましたが、もちろん
幅の広い方を購入しました! (`・ω・´)
ハンダ付けしやすいからね...w
BU9480F は足の数が少なくて扱いやすいです。
私の頭の中では 「足の数が少ない = 簡単」となってます。 (`・ω・´)
こちらは秋葉原の鈴商で210円で購入~
あとはネットの回路を参考にブレッドボード上に構築してみました。
とはいえ、数日前にCS8416のハードウェアモードは挫折しています。
今回はソフトウェアモードなので、CS8416を何かでコントロールしてやる必要があります。
これはRaspberryPiでやりましょう。
当初はCD-ROMドライブの操作しか考えてませんでしたが、意外なところで役に立ちそうです~(´∀`)
CS8416をコントロールするには I2C とかいうシリアル通信で操作できるようです。
そういえば、RaspberryPi の仕様に I2C ってありましたよね...
調べてみると GPIO-0とGPIO-1が I2C 用に使えるようです。
しかも!
Linux自体がI2Cに対応してるようで、コマンドラインから操作できちゃいます。
なにかしらのプログラミング言語でシリアル通信のプログラムを作る覚悟をしていたのですが、
かな~り手間を省けました。(=´∇`=)
ただ、デフォルトではLinuxの I2C 関係の機能は使えないので、
http://www.skpang.co.uk/blog/archives/575
を参考に使えるようにします。
I2Cの機能が使えるようになったら、以下のようにコマンド入力します。
sudo -i
i2cdetect -y 0
←DAI電源OFF状態
←電源ON状態
通信方法がSPIモードの時はこんな風になるようです。
実はI2Cへの切り替え方法わかってません。
リセットしたらI2Cモードになったり、
電源投入直後すでにI2Cモードになってたりします。(;´д`)
←電源ON状態 I2Cモード
ぉ、どうやらチップアドレス 0x13 で認識しているようですね。
では現在の設定状況を確認します。
コマンドと結果は以下の通り。
raspberrypi:~# i2cdump -y 0 0x13
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 00 00 00 00 01 00 00 00 00 00 00 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 03 ff 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f
80: 00 00 00 00 01 00 00 00 00 00 00 01 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 03 ff 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f
この状態では音が鳴りません。
以下、この状態で動作させた場合のDAIの出力波形です。
そこで、DACの BU9480F に合わせてオーディオフォーマットなどを以下のように設定してやります。
・よくわからんRUNフラグを1に
・SPDIF入力端子はRXP0
・出力オーディオフォーマット 右寄せ
・出力オーディオフォーマット 16bit
・出力オーディオフォーマット MSBファースト
コマンドは以下の通り。値の意味は CS8416 のデータシート参照にょろ。
i2cset -y 0 0x13 0x04 0x80
i2cset -y 0 0x13 0x05 0xa8
設定後、現在の設定状況を確認すると以下のようになっていると思います。
(データアドレス0x06以降は状況によって変わるので無視)
raspberrypi:~# i2cdump -y 0 0x13
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 00 00 00 00 80 a8 00 00 00 00 41 40 00 00 01 09
10: 01 01 05 18 00 42 37 07 02 00 10 00 00 00 00 10
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 0f ff 00 00 00 00 00 00 07 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f
80: 00 00 00 00 80 a8 00 00 00 00 41 40 00 00 01 09
90: 01 01 05 24 00 42 37 13 00 00 10 00 00 00 00 10
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 0f ff 00 00 00 00 00 00 07 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f
ここまでできれば cdplay でCD再生するとスピーカーから音が鳴ると思います。
いやぁ~それなりに手こずったので、最初に音が鳴ったときは
感動しまっせヽ(´▽`)ノ
正常に音が鳴ってるときのDAI出力波形