DAIをI2Cで制御する時の備忘録(CS8416 WM8805)

自力でDAC作りたくて挫折して幾年…
ハードウェアモードでも動かず、どこが間違っているかもデータシート見てもわからず、マイコン制御したいよねということでI2Cでやってみようにも以下略)

という前置きは置いといて。
I2Cで制御できたので備忘録を残しておきます。

必要なもの
raspberry pi(使ったのはb+)
諦めない根性
オシロスコープ

あったらいいもの
ロジック・アナライザ LAP-C

注意事項
raspberry piのI2Cは内部自動プルアップです。別途プルアップ抵抗は不要です。

WM8805編
共立電子様のDAIトランシーバ独立実験基板「WM8805_G」を使用しました。
組み立て完了し電源供給ができたら、raspberry pi b+ のSCL、SDA、GNDをWM8805基板のCN2Gの所定ピンにつなぎます。
raspberry pi b+にI2Cで必要なライブラリを導入します。
sudo su -でrootになってからi2cdetect -y 1 を実行します。
このコマンドはI2Cでの鬼門となるデバイスアドレスの探索を自動でやってくれる神コマンドです。
多分デバイスアドレスは0x3a辺になると思います。以下0x3aと仮定して記述します。
初期状態のWM8805はクロックなどがパワーダウンしているので、起動するためフラグを書き込む必要があります。
起動コマンド
i2cset -y 1 0x3a 0x1e 0x00 b
光TOSLINKを使うのでそれ用のセッティングを入れます
i2cset -y 1 0x3a 0x09 0x00 b
このままだとスレーブモードでの動作になり必要なクロックなどが出ないので、データフォーマットの指定とマスタモードの指定をします。
i2cset -y 1 0x3a 0x1c 0x4a b
これでI2Sフォーマット24bit長マスターモードになります。
この時点でSPDIFがロックしていれば信号が出ています。

ロックの確認
i2cdump -y 1 0x3a
48kHzでロックしている場合は0cレジスタの値が0x20になっていると思います。
オシロスコープなどで各シグナルが出ているか確認して下さい。
もし出ていない場合はロックしていません。

CS8416の場合
共立電子様のDAIレシーバ独立実験基板「CS8416_B」を使用しました。
このチップの動作には癖があるようで、説明書ではリセット端子に10uFのコンデンサをつけたら動作する事が書かれていますが、安定しない時があるようです。
組み立て完了し電源供給ができたら、raspberry pi b+ のSCL、SDA、GNDをCS8416基板のCN2Gの所定ピンにつなぎます。
sudo su -でrootになってからi2cdetect -y 1 を実行します。
多分0x10あたりに出てくると思います。
こちらも初期状態ではクロックのパワーダウンが行われており動作しません。
起動コマンド
i2cset -y 1 0x13 0x04 0x88 b
起動してもスレーブモードですので、マスターモードの指定とデータフォーマットの指定を行います。

i2cset -y 1 0x10 0x05 0x88 b
指定した内容
右寄せ
24bit
MSBファースト
マスターモード
となります。
こちらもロックしていたら信号が出ますのでオシロスコープで確認して下さい。

出力されている信号をDACに接続して音が鳴るか確認してください。


WM8805の注意点
i2cdump -y 1 0x3a b の結果ですが、RaedOnlyのレジスタ以外は内容の表示がされません。つまり設定値の確認はできません。

カテゴリー: 電子工作 パーマリンク

コメントは停止中です。