NanoPi NEO2用Volumio2の機能切り替え(dtb差し替え)について

大まかな仕組み

  • NEO2用Volumio2に採用しているLinuxカーネルはdevice treeという方法でドライバのパラメータなどを変更し実際の動作を切り替えています
  • device treeの実行時バイナリはdtbとdtboの2種あります。
  • NanoPi NEO2の場合、現時点ではdtbのみを使用しています。
  • 使用するdtbは/boot/boot.scrで指定されている /boot/sun50i-h5-nanopi-neo2.dtb となります。
  • そんなわけで、/boot/sun50i-h5-nanopi-neo2.dtbを差し替えることで動作を変えることができるわけです。

変更方法

  • /boot/sun50i-h5-nanopi-neo2.dtbを任意のdtbで上書きすることで動作が変わります。
  • ここではsun50i-h5-nanopi-neo2-i2s-generic.dtbに変更する例を書いておきます。
  • SSHでログインして変更する方法と、Windows上で変更する方法を紹介します。どちらかお好みの方法で変更してください。

その1 NanoPi NEO2にログインして変更

  • TeraTermputtysshコマンドでログインしdtbを変更する方法
  • まずはWEB UIに接続してみます。ブラウザで接続してみましょう。volumio.local(mDNS経由)での接続ができない場合は、直接IPアドレスを指定して接続してください。
  • http://volumio.local
  • 無事繋がったらSSHを有効化します。ブラウザで開発者メニューを開きsshをEnableにします。イメージを書き込んだ後に一度だけやればOKです。
  • http://volumio.local/dev
  • sshクライアントでvolumio2が動作しているNanoPi NEO2に接続します。
ssh volumio.local
  • ログインできたらコピーコマンドでdtbファイルを差し替えます
cp /boot/sun50i-h5-nanopi-neo2-i2s-generic.dtb /boot/sun50i-h5-nanopi-neo2.dtb
  • あとはリブートして反映します
reboot
  • 再起動したらWEB UIから「プレイバックオプション」を開き、出力デバイスを選択し直してください。

その2 MicroSDをカードリーダでWindows PCに接続し書き換え

  • イメージ書き込み済みのMicroSDをカードリーダでPCに接続してください。
  • イメージを書き込んだ直後は認識できていないことがあるので、一度カードリーダを外して付け直してください。
  • ボリューム名BOOTというドライブを認識するはずです。ドライブを認識しない場合は、ドライブ文字の割り当てがされていない可能性があります。ドライブ文字を変更したいのですが?|Q&A | IODATA アイ・オー・データ機器などを参考にBOOTパーティションのドライブ文字を設定してください。
  • まずはsun50i-h5-nanopi-neo2.dtbを削除
  • sun50i-h5-nanopi-neo2-i2s-generic.dtbを複製
  • 複製したファイルをsun50i-h5-nanopi-neo2.dtbにリネームしてください。
  • 「安全な取り外し」を行なったらNEO2にSDカードを差し込み起動してください。
  • 起動したらWEB UIから「プレイバックオプション」を開き、出力デバイスを選択し直してください。

dtbの簡単な説明

  1. sun50i-h5-nanopi-neo2-i2s-generic.dtb

    • もっとも基本的にI2Sドライバです。
    • PCM5102A/ES9023/TDA1387T/TDA1543などのMCLKが不要なDACを鳴らす場合にはこれを選択してください。
  2. sun50i-h5-nanopi-neo2-i2s-generic_32fs.dtb

    • 基本的なI2Sドライバですが、32fs固定となっています。
    • 16bit固定出力になります。上記dtbに比べるとBCLKの周波数が低くなります。
    • TDA1387T/TDA1543などの16bitが上限のDACで384kHz再生する場合にオススメです。
  3. sun50i-h5-nanopi-neo2-i2s-generic_mclk.dtb

    • 基本的なI2Sドライバですが、BCLK/LRCLKに加えPA6ピンからMCLKを出力します。
    • MCLKが必要なFN1242A/PCM1794などの再生に利用します。
  4. sun50i-h5-nanopi-neo2-pcm_rj16_32fs_mclk.dtb

    • PCM RJ 16bit固定出力とするドライバです。
    • TDA1545A/TDA1543Aなど、RJフォーマットで16bitが上限のDACで再生する場合に利用します。
  5. sun50i-h5-nanopi-neo2-i2s-generic_mclk_ak449x.dtb

    • I2S MCLK有りでAK4490/AK4493/AK4495/AK4497を利用する場合に使用します。
    • I2CでAK449xを制御することができ、mixerから電子ボリュームやデジフィルの変更を行えます。
    • デフォルトのI2Cアドレスは0x10、制御デバイスはAK4495となっています。
    • 他のデバイスを使用する場合にはdtbファイルをdtsに変換し編集の後、dtbに再変換してください。
  6. sun50i-h5-nanopi-neo2-i2s-dacpluspro.dtb

    • I2SでPCM5122+外部クロック対応のDACを利用する場合に使用します。
    • HifiBerry DAC+ PROもしくは互換DACで動作します。
    • 外部回路はHifiBerry DAC+ PRO互換としてください。
  7. sun50i-h5-nanopi-neo2-spdif.dtb

その他情報・メモなど

  • device tree関係

  • mDNS関係

    • volumio.localでのアクセスですが、LinuxMacであれば問題なくアクセスできると思います。
    • 同じネットワーク内に複数Volumio2を動かしているときどうなるかは不明。
    • Volumio2のWEB UIでホスト名を変えるとvolumioの部分が変わりますのでご注意を。
    • WindowsでのmDNSの動作はよくわかりません。Windows10で実装されたようですが完璧では無いようで。
    • Windows利用者でもiTunesを導入している環境だとBonjourサービスがインストールされるため動くことがあるようです。
    • 繋がらない場合はIPアドレスでアクセスしてください。
    • arpコマンドで調べるか、ルータのDHCP振り出し情報を見るか。
    • mDNSを使ってローカルDNSサーバーを廃止する - Qiitaに情報あります。
  • Volumio2でsshの有効化関連

    • /boot/sshがあればsshが動くのでそれでもOK
    • イメージ書き込み後にgui設定と一緒に書いておくのも良いかも
    • ユーザ・パスワード固定かつrootパスも同じなので、パスワードを変えておくなどの配慮は必要です。踏み台にされちゃうぞ!
  • WindowsでUSBドライブが見えない問題

    • 複数のドライブが見えるタイプのカードリーダでガチャガチャやってると発生する模様
    • Windowsのシステム上は認識しているが、ドライブ文字が割り当てられていないだけのようです。
    • 手動でドライブ文字を割り当てれば見えるはず。