NanoPiNEO2 HiFiBerry DAC+対応 β版

HiFiBerry DAC+ PRO対応のβ版リリース

HiFiBerry DAC+ PROに対応しました。
twitterには書いてましたがこっちにも簡単にまとめます。

  • HiFiBerry DAC+ PROにて動作確認しています。クローンもたぶん動くはず。
  • HiFiBerry DAC+(外部クロックなし)は未検証です。動くかもしれません。
  • ソフトウェアはmpdとplay(SoX)にて動作確認しています。
  • 対応フォーマット(確認済みのもの)
    • CBM_CFM/CBM_CFS(CBM_CFSは未検証)
    • 16/24/32bit (16bitはバグっててちゃんと出ません。修正版を評価中です。)
    • 44.1/88.2/176.4/352.8k 44.1k系
    • 48/96/192/384k 48k系

接続方法

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の整理
    • 1イメージでI2S Generic(PCM510x)とHifiBerry DAC+ PROの両対応
    • MCLKの有効・無効もdtbの差し替えで対応できるようにしたい
    • Neo PLUS2対応
  • digi+ PRO対応(評価用のボードを入手できれば)
  • バイナリの提供
  • volumio2対応

bugfix

  • 再生中に停止したあと、再度再生するときにノイズの修正
  • メモリリーク(初期化時)

こんな感じであたりで考えていますが、思いがけずSwitch(10G L2と任天堂)を入手してしまったのでいつになるか不明です。
dt-overlay対応はあんまりやる気が無いです。

コードの修正内容抜粋(詳細はコミットログを見てください)

AllWinner系のコード

  • sun8i-i2s.c
    • DAIFMTのCBM_CFM/CBM_CFSサポート
    • Codecノードが見つからない場合にも登録するように修正
      若干メモリリークしていますが、初期化一発のみなのでとりあえず放置。そのうち直す

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だとどうやって動いてるんだ?
  • clk-hifiberry-dacpro.c
    • 修正なし