memoこの広告は、90日以上更新していないブログに表示しています。Zeroで動かす手順の紹介です。volumio対応)をカスタムしたものになります。Base(じんそんさんよりリリース予定)に対応しています。HATはI2S信号ラインとキーの配線がぶつかってるた2か所カット・ジャンパーの必要があります。Sleep機能の追加(一定時間無操作でSPI通信をOFF)現時点での制約事項などvolumio2のみ対応です。Yes起動手順mpd_guiを/usr/local/binにコピーして実行権限を付けたうえで、下記のコマンドを/etc/rc.localあたりに放り込んでください。UP/DOWNで音量を変更PREV/NEXT長押しで音量を連続的に変更PLAY長押しでメニューに入ります。Frameworkに則り実装Si5351シリーズに対応。最大8ch出力できる。リファレンスクロックを指定。clocksは別途fixed-clockで定義しておき参照する。VCXO(Variant_Cのみ)silabs,clock-sourceはclkoutにどのMultiSynthをソースにするか指定。0で自動的にclkoutのソースをMultiSynthに結び付ける。clockout_Nに対してMultiSynth_Nを割あてる。1でclkout1-3のソースをMultiSynth_0に結び付け、clkout5-7のソースをMultiSynth_4に結び付ける。clkout0,4には無効2でclkoutのソースをxtalに結び付ける3でclkoutのソースをclkinに直結。指定したclkoutにPLLの再設定を許可するこの指定のあるclkoutに周波数設定を行ったとき、PLL設定周波数を算出・設定する。clkout1/2の順で設定する必要があるclkout0にmclkを。clkout1にbclk,clkout2にlrclkを割り当てた。<1>なので下記のように参照する。init時にクロック出力状態の場合、不安定になるケースが見られたので修正しています。Labsの3CHクロックジェネレータSi5351Aモジュールを見つけたので、これでI2Sマスタを作ってみた。クロック出力をちょうど3系統持っているので、MCLK/BCLK/LRCLKの3種を生成してみる。Jitterなしで44.1kHz/48kHz系のクロックを生成できる。SoCが出力できないMCLKも生成できる。Jitterと呼ばれる計算上の辻褄あわせで、時々1周期の長さが可変するJitterが存在する。DIPモジュール形状で500円とお手ごろ価格。電源とI2Cを繋ぐだけ。100円くらいかな?使用上の注意点としては、必ずVDDOを先かVDDと同時に立ち上げること。VDDOを供給せずVDDを入れると壊れることもあるようです。チップが非常に弱いので逆接や電源シーケンスを守らないと簡単に壊れます実装方法ハードウェア結線についてPOWERVCORE/VOUTに3.3Vを供給するGNDを繋ぐI2CSCL/SDAをSBCに接続する。NEO2の場合にはPU抵抗を忘れずに。CLKOUTCLK0をMCLK/CLK1をBCLK/CLK2をLRCLKに接続する。DIP基板が秋月のSi5351Aモジュール。対応ハードウェアblue-7さんが頒布しているハードウェアを使うと簡単に動作させることができます。HATに秋月のSi5351Aモジュールを搭載したものです。DAIドライバに設定(snd_soc_dai_set_bclk_ratio)考察とかメモとか音質はIntPLLより向上。arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2-i2s_3clk.dts近いうちに対応済みVolumio2イメージを公開予定ですラズパイ向けのドライバセットも出せるかもSi5351AのスペックをメモSi5351Aは25MHzの水晶振動子を基に2.5kHzから200MHzまでのクロックを生成できる。Jitterは3.5psだそうなWebにしか記述は無い。70ps水晶発振器には及ばないがそこそこ良さそう。高いBCLK入力に対応可能であることNEO2(H5)では98.304MHzでも動いてた。12.288MHzより高い周波数はスペック範囲外となる。Zero(BCM2835)では24.576MHzまで確認。DACはダメなことが多い。左詰(LJ+1シフト)になるからBCLKカウンタが必要なため?古くてもRJ入力だとOKなことがある。ZERO)では512fsで音が出ることを確認PCM5102Aでは64fs(384kHz)のみ音が出た。残念ながら512fs動作はできず。128fsから上は無音となる。TDA1543/TDA1387T(I2S)では動作せず。TDA1545A(RJ)では512fs動作した。ICの18bitなどには対応できない(裏技で対応することはできそう?という情報有り。40I2S/LJ/RJでそれぞれ計算が必要で面倒だが、データ出力開始位置を柔軟に指定できるRJで15bit出力するなど特殊なslotwidthを実現可能。ICを使用するときにはとても良さそう。AK449Xシリーズにて、複雑なクロック生成回路ではなく単純な発振器を用いて外部クロック化する手法の紹介。memo])は外部回路追加無しでしたが今回はちょっとだけ外部回路を追加して、もっと高品質なクロックを供給できないかな?というお話です。Zeroで動作確認済みなお、データシート的にはダメとは書いてないように見えるが、イレギュラーなクロック入力になるので、動作保証はできません。DIPソケットは次回以降に説明する別のお話なので、今のところ無視してください。LINKに組み込むか、CODECに組み込むか。writeするという離れ業をやっている。DAI(I2S)側が用意する。DAIsnd_soc_dai_set_tdm_slotかsnd_soc_dai_set_bclk_ratio経由で外部から指定できる。DAIに設定可能なCallbackはこの辺。実装はされていないものもある。制御でよく使いそうなhw_paramsとshutdownのみポイントは開始時はdai_link->codecs->cpudai。終了時はcpudai->codecs->dai_linkとなることcodecsが複数ある場合は、hw_params/shutdown両方とも昇順のみ。daiが最後になるので、外部クロック制御はdai_link/codecどちらでやっても大丈夫そう。daiは設定されたfs/clkを元にPLLやDIVを決定し設定と、いうことができる。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。