NanoPiNEO2 HiFiBerry DAC+対応 β版
HiFiBerry DAC+ PRO対応のβ版リリース
HiFiBerry DAC+ PROに対応しました。
twitterには書いてましたがこっちにも簡単にまとめます。
- HiFiBerry DAC+ PROにて動作確認しています。クローンもたぶん動くはず。
- HiFiBerry DAC+(外部クロックなし)は未検証です。動くかもしれません。
- ソフトウェアはmpdとplay(SoX)にて動作確認しています。
- 対応フォーマット(確認済みのもの)
接続方法
NanoPiとRPiでピン配置が微妙に異なります。 そのままピンヘッダで接続せず、下記のピンのみ接続したほうが安全です。
RPiとNanoPiで互換配置ピン(I2CのPU追加は必須)
- PWR
- Pin01 3.3V
- Pin17 3.3V
- Pin02 5V
- Pin06 GND
- I2C
NanoPi NEO2は基板内でI2CのPullUpが実装されていません。NanoPiとRPiを接続したうえで、3.3Vに4.7k-22kくらいの抵抗でPullUpしてください。- Pin03 I2C0_SDA 3.3VにPU
- Pin05 I2C0_SCL 3.3VにPU
RPIとNanoPiで非互換配置ピン
- I2S (NanoPi to DAC+ PRO)
- Audio Pin08 I2S0_LRC to Pin35 LRCK
- Audio Pin09 I2S0_BCK to Pin12 BCK
- Audio Pin10 I2S0_SDOUT to Pin40 DATA
ビルド方法
ソースはGitHub - tkztkztkz/linux: Linux kernel source treeのREL_HIFIBERRYDACPLUSPRO_BETAブランチにあります。
NanoPi NEO2 4.11系カーネルビルド手順メモ - _tkz_ memoを参考に、checkoutするブランチを下記に変えてビルドしてください。
git checkout REL_HIFIBERRYDACPLUSPRO_BETA
ビルド後は、zImageのほか下記のdtbもターゲットにコピーしてください。
arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2-audio.dtb をターゲットの/boot/sun50i-h5-nanopi-neo2.dtbに上書きコピーする
モジュールも必要な人はmodluesもビルドして、なんとかmodules以下を固めてターゲットで展開してください。
私は面倒なので必要なモジュールだけ手でコピーしてます。
今後の予定
improve
- dtsの整理
- digi+ PRO対応(評価用のボードを入手できれば)
- バイナリの提供
- volumio2対応
bugfix
- 再生中に停止したあと、再度再生するときにノイズの修正
- メモリリーク(初期化時)
こんな感じであたりで考えていますが、思いがけずSwitch(10G L2と任天堂)を入手してしまったのでいつになるか不明です。
dt-overlay対応はあんまりやる気が無いです。
コードの修正内容抜粋(詳細はコミットログを見てください)
AllWinner系のコード
- sun8i-i2s.c
RPiからポーティングしたコード
- hifiberry_dacplus.c
- ディレクトリをbcmからcodecに移動
- i2s-codecをdt参照対応 RPiへの影響は無いはず
- 352.8k対応
- pcm512x.c
- 20/24bitデータ再生時に、BCLKを64fs(32bit WORD)強制
bcm系は24bit WORDも可能だけど、sunxiは未対応のため - 44.1kクロック時に384k再生するときの上限チェックを無効化
バグに仮対処。44.1kHz系のクロックで再生後、384kHzを設定しようとすると上限が44.1k x 8 = 352.8kとなり、384k再生がエラーとなる模様。
clk-hifiberry-dacproの設定が後に走ることが原因の模様。クロック設定が先に走ればいいんだけど、RPiだとどうやって動いてるんだ?
- 20/24bitデータ再生時に、BCLKを64fs(32bit WORD)強制
- clk-hifiberry-dacpro.c
- 修正なし