NanoPi Neo2 I2S Audio Kernel alpha1 release
これは何?
- NanoPi Neo2用のカーネルにI2Sオーディオ関連のパッチを当てたものになります。
- カーネルのみのリリースとなります。音を出すにはSoXやmpdなどを自力で導入する必要があります。
手軽に音を出したい方は、本カーネルを適用したVolumio2を作成予定ですので、それまでお待ちください。
標準のカーネルに加えて下記の修正が施してあります
- 特定sampling resolutionで音が出ない問題の修正(24bitでノイズになるなど)
- MCLK出力の有効化
- 768/1536kHzのサンプリングレートに対応
- HifiBerry DAC+ PRO or 互換ボードに対応
- PCM Right Justified16/24bit出力に対応
- BCLK外部クロック駆動など特殊動作に対応
baseは4.11になります。
現在はalpha3にアップデート済みです。
ダウンロード・使い方
バイナリダウンロード
- githubにカーネル・dtb・モジュールを固めたものをPushしています。(alpha3へのリンクに差し替えました)
- https://github.com/tkztkztkz/nanopineo2-platform/raw/master/nanopineo2/kernel/npi_audio_kernel_1807_alpha3.zip
メーカ提供 UbuntuCoreの場合
- FriendlyArm提供のUbuntuCore ImageをSDに書き込む
- PC上でもターゲット上でも構わないので、/bootのImageを上記からダウンロードしたもので上書きする
- ターゲット上でmodulesを展開する
# tar xvfz npi_audio_modules_1807_alpha3.tgz -C / or $ sudo tar xvfz npi_audio_modules_1807_alpha3.tgz -C /
- 再起動でAudio Kernelに差し替わります
動作モードの切り替え方
- dtbファイルを差し替えて機能の切り替えを行ってください。
- NanoPi Neo2のbootスクリプトは、defaultではsun50i-h5-nanopi-neo2.dtbで起動するので、sun50i-h5-nanopi-neo2.dtbへ上書きしてやるのが簡単です。
$ cd /boot $ cp sun50i-h5-nanopi-neo2-i2s-generic.dtb sun50i-h5-nanopi-neo2.dtb
- dtbの種類と動作モードは下の方で説明していますのでご確認ください。
ソースコード
- https://github.com/tkztkztkz/linux
- ブランチ npi-audio-4.11.y
- ビルドしたタグ alpha1
制約など
- npi-configは実行しない方が良いです。dtbを書き換える項目を実行すると起動不可になる可能性があります。
- Linuxカーネルですので、自由にfork・改造などして頂いて構いません。
- 音楽再生ディストリビューションや独自ディストリビューションへの組み込みも歓迎します。作成されたディストリビューションを公開する際には、ご連絡頂けますと嬉しいです。カーネルデバッグの際に活用したいと思います。
dtbファイルと動作モードの紹介
通常利用向けdtb
- I2S Generic
sun50i-h5-nanopi-neo2-i2s-generic.dtb sun50i-h5-nanopi-neo2-i2s-generic_32fs.dtb
- I2S Generic + MCLK
- MCLK出力に対応します。MCLKはPA6に出力します。
- デフォルトは64fsは32bit長固定とします。16/24bit再生時、LSBは0パディングします。
- 32fsは16bit長固定とします。
- PCM179X/AK449XなどのMCLKが必要なI2S DACの接続に利用します。
- 出力されるMCLKの周波数とサンプリングレートの対応は以下の通りです。
サンプリングレート | MCLK周波数 |
---|---|
48/96/192/384kHz | 24.576MHz |
44.1/88.2/176.4/352.8kHz | 22.5792MHz |
768kHz | 49.152MHz |
1536kHz | 98.304MHz |
sun50i-h5-nanopi-neo2-i2s-generic_mclk.dtb sun50i-h5-nanopi-neo2-i2s-generic_mclk_32fs.dtb
- HiFiBerry DAC+ Pro or compatible
sun50i-h5-nanopi-neo2-i2s-dacpluspro.dtb sun50i-h5-nanopi-neo2-i2s-dacpluspro_slave.dtb
- PCM RJ16/RJ24bit
sun50i-h5-nanopi-neo2-pcm_rj16_32fs_mclk.dtb sun50i-h5-nanopi-neo2-pcm_rj16_64fs_mclk.dtb sun50i-h5-nanopi-neo2-pcm_rj24_64fs_mclk.dtb
実験向けdtb
- I2S CBM_CFS fixed clock mode 実験用
- 外部から固定BCLKを入力するモードです。
- 水晶発振器などを利用して、NanoPi Neo2及びDACのBCLKにクロックを入力してください。
- LRCLKはNanoPi NEO2にて生成します。
- MCLKは出力できません。
- 64fs固定です。(dtsを編集すれば32fs/48fsも設定可)
- 24.576MHz入力で32bit 384kHz固定
- 12.288MHz入力で32bit 192kHz固定
- mpdなどでリサンプリングを有効にして利用することを想定しています。
- クロックに合ったサンプリングレートで再生しない場合、音程が正しく出力されません。
sun50i-h5-nanopi-neo2-i2s-cbmcfs_bclkin.dtb
- I2S Generic + MCLK less than 100MHz 実験用
- MCLKに100MHz未満で設定可能な最大周波数を設定
- ES9018SでMCLKをNanoPi Neo2から入力する場合に使用します。
- I2C制御はしませんので、ES9018Sはデフォルト動作とさせるか外部マイコンで制御または、i2c-toolsなどで制御が必要です。
sun50i-h5-nanopi-neo2-i2s-generic_mclk_lt100m.dtb
- I2S Generic + MCLK less than 50MHz 実験用
- MCLKに50MHz未満で設定可能な最大周波数を設定
- PCM5102A/ES9023Pなどで、MCLKをNanoPi Neo2から入力する場合に使用します。
- MCLKのクロックによって音が変化するか実験するときにどうぞ
sun50i-h5-nanopi-neo2-i2s-generic_mclk_lt50m.dtb
今後の予定(あくまで予定です)
- Volumio2のNanoPi Neo2版提供(本カーネル導入済み)
- beta版ではbaseバージョンを最新の4.14にアップデート
- rt patchの取り込み
- オーディオフォーマット対応のリファクタリング
もしかしたらやるかも
- 外部I2S Master基板の製作とドライバ作成