« 2022年12月 | トップページ

2023年1月

2023年1月29日 (日)

ラズベリーのパイが無ければ…バナナのパイを食べてみる

PIN64+と順序が逆になってしまいました

実はBeagleBoneを弄ったあと、やはり転がってたBananaPiM2Zeroを弄っていたのでした。

Img_6267

搭載されているCPUはAllwinnerのH3。実はM2Zero、当初はH2+が載ってていつの間にかH3に置き換わった?模様

完全にピンコンパチだし、大抵のソフトもそのまま動く

このSBC、載ってるメモリが512MByteなので最新のLinuxからは正式サポートが無かったり、と💦

 

Volumio3は箸にもひっかからない💦

正式ではなくてもArmbianをビルドしてみました

毎回同様、WinPC上のHyper-Vで動くDebianなどにクロス環境を構築し、

ここからリポジトリをクローンします

>sudo ./compile.sh

メニューが出たら「Full OS Image」→「Show a kernel configuration」(お好みで。変えなくても可→

一番下の「<Show CSC/WIP/EOS/TVB>」(正式サポート外)で、「BananaPiM2Zero」を選択

後はお好みで進めます

で、出来たイメージをmicroSDに書き込み、電源を入れ

シリアルコンソールで初回起動時の設定を進めればOK

 

さてArmbianが起動したところで何に使おうか…

上の写真には既に搭載されていますが、外部クロック(Si5351A)と外部DAC(PCM5102A)を搭載してmpdを動かそうと

もちろん内蔵PLLのジッタ多いクロックは排除します

で、問題なのはH3…MCLKがピンに出ていません

仕方ないのでBCLKとLRCLKだけ外部から供給(もちろんDACにも)、MCLKはDACにだけ供給

 

(順番が逆ですが)PINE64+で使っているsun8i-i2s.cを多少改変してEXT3clk設定した時にもMCLKは内部動作する様にしておきます

Armbianビルドのkernel configuration(2回目のメニュー)で、デバイスドライバのクロックの中でSi5351aモジュール、

DACモジュールのPCM510xを有効にしておく必要もあります

 I2Sモジュールのsun4i-i2sは無効にするか、組み込まれない様に<m>か<n>に

 codecドライバは、PINE64+同様、_tkz_氏の開発成果を利用させて頂きました

 

 

 sun8i-i2s.cとi2s_mfdl.cは、BananaPiM2Zero実機でビルドしてもあまり負荷にはなりませんがカーネルソースは必要、

そのダウンロードにはそこそこ時間がかかります(armbian-configで実行可能

 出来上がったドライバ2つをモジュールフォルダに投入してsudo depmod -a、そしてデバイスツリーオーバーレイ追加(armbian-add-overlay)

Img_6075

teratermのフォントを弄って、ちょっとレトロ感w

正常に認識したようです

 

あとはmpdの設定を行えばDACからの音楽再生が出来ます

 

追記:

BananaPiM2ZeroでのI2S関連信号です

 MCLK 出てない

 BCLK CON-27

 LRCLK CON-28

 DOUT CON-40

(おまけ SPDIF-OUT CON-37

 

 

| | | コメント (0)

2023年1月28日 (土)

ラズベリーのパイが無いのでパインを食してみた

前回の投稿ではPINE64+にVolumio3をビルドしてインストールしました

 

あ、書いて無かったのだけど買ったのは

Img_6264

4台w 安かったもので…(4台買っても、ラズパイ1台分にならない

 

さて、Volumioを使う人なら説明が要らない外部DAC駆動にとりかかります

 

PINE64+に使われているAllwinner A64はIIS DAC駆動に必要なMCLK,BCLK,LRCLKの3つの基準クロックが

ピンに割り当てられています

もちろんCBM,CFMモード対応も

となるとCPUの内蔵PLLで発生させているジッタに埋もれたクロックではなく、ある程度クリアなクロックでDACを

駆動したくなる

使用するDACにマスターモードがある場合、そこでMCLKを用意し、DACで適当に分周させたBCLK,LRCLKを出力させる

ってのが手軽な方法です

今回はDACの選択肢を増やすために各クロック全部をSiliconLabのSi5351Aで発生させ、CPUとDACに供給します

Si5351Aの制御(I2C)はCPU…というか動作しているDebianのDAI-codecから行い、再生するアプリからは一切

見えず気にしないで済むように、と

Img_6256

ちょっと前に弄ってたBananaPiM2Zeroと同様(まだ投稿してなかったかな?💦)、先達の開発成果を使わせて頂きました

_tkz_memo

 

まず最初に躓きがちな点を

Volumio3自体はarmv7(32bit)ですが、デバイスドライバなどはarmv8(64bit)と

Img_6260

VolumioOSのBusyboxは32bit、ドライバー(AllwinnerH3系I2Sドライバーのsun8i-i2s)は64bit

これを念頭に入れ環境構築しないと読み込んでくれるドライバーが作れません💦

 

ドライバのビルドで用意するもの

・amd64で動くDebian Busterあたり(実機は32bitのモジュール群なので、そこでの64bitのドライバービルドはかなり面倒なのです)

・Volumio3のベースの、Kernel5.7.19のソース

・ドライバーをビルドするツールチェイン(gcc-8-aarch64-linux-gnu

・Device Tree Compiler

そのうえで、以下の3つのドライバーソース

・Si5351Aのドライバー(Kernelソースに入ってるはず

・AllwinnerH3系のI2Sドライバーsun8i-i2s.c(詳しくはArmbianのフォーラム辺りに

・__tkz__氏製codecドライバーi2s_mfdl.c(リンク記事のLinuxリポジトリではなく氏のLinuxSBCAudioリポジトリのものを

 

この環境で3つのドライバーを作成し、/lib/modules/5.7.19/にコピー

現在I2S処理を行っているsun4i-i2s.koを一旦退避させ(/lib/modules/5.7.19/kernel/sound/soc/sunxi/にある)

sudo depmod -aでエラー無く登録出来たら(lsmodで確認

dtcで現行デバイスツリーを逆コンパイル、3つのドライバーを導入する様改変し、再コンパイル、再起動

 

Img_6257

当初構築した元のVolumio3-OS以外に実際必要なものは、

clk-si5351a.ko、sun8i-i2s.ko、i2s_mfdl.ko、改変したsun50i-a64-pin64-plus.dtb

4つのファイルだけです

 

これの難点?はPINE64+の消費電力というか起動時の突入電流、ラズパイの電源では起動しないことがありました

とはいえ、一旦起動してしまえばそこそこパワフルなCPUですからVolumio程度?軽快に動作します

 

追記:

 PINE64+でのI2S関連ポートのメモ

(ラズパイ互換のPi-portではなく、Euler-BUSの方に全てでています

 MCLK Eulerー11

 BCLK Eulerー13

 LRCLK Eulerー12

 DOUT Eulerー15

(おまけ SPDIF-OUT Eulerー10

追記2:

 Si5351aを繋ぐI2Cはラズパイ同様Pi-BUSの3、5ピンなのですが、KernelからはI2C1(I2C0ではない)として

認識されています(0だと信じてて時間を無駄に💦

| | | コメント (0)

« 2022年12月 | トップページ