電子回路

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月19日 (月)

ラズベリーのパイが無ければパインを食べればいいじゃない

マリー妃が言ったかどうかは触れませんが…

品薄で市場に出回らず、どこかで売り出したら即完売というラズパイファミリー

ウチには初代から複数、3は各種5台、4は3台ほど在庫しています。まぁこれも飯のタネの一部なので💦

 

でも、これじゃぁ趣味には使えない

最近はAllwinnerのSoCが載ったBananaPiやOrangePiの試食試用を行い性能・機能を確認していますが、まぁ行けそうだなと

OSたるLinux側の対応を見るとメモリは最低1G、プロセッサは64bitって感じになってきていますが、性能をがっつり追いかけなきゃ大丈夫

(H3+512MBのBananaPiM2Zero+I2S DACでもDebian Bullseyeとmpdが軽く動いてます

 

とはいえAliexpressでの調達も価格が高騰してきて(32bitのH2+/H3で5000円超えとか)、悩ましい限り

そんな中、足元にダイヤ?の原石が

みんな大好き秋月電子のPINE A64

Pine64

クラウドファンディングで市場初の64bit!になるはずが直前でラズパイ3が出てしまい初じゃなくなった悲劇のSBC…とのこと

出た当初はグラフィック系ドライバの未熟さ等々、マイナスなイメージだったらしい(2016年)

とはいえ出てから時間が経過し、それでも(腐っても)64bitということでArmbianの公式サポート機種としていまだに残っています

まぁ性能的にはラズパイ3を超える(Giga-Ethernetも付いてる…無線はオプションだけど)のに、なんと¥2,980!!!安いです

 

ということでいつも通り試食開始

いつもどおりArmbianをビルドしてインストールするのも面白くないのでVolumio、それも最新の3をビルドして入れてしまおうと

 

Windows10のPC上の仮想環境(Hyper-V+Debian Buster)にクロス環境を構築

必須パッケージ

build-essential
ca-certificates
curl
debootstrap
dosfstools
git
jq
kpartx
libssl-dev
lz4
lzop
md5deep
multistrap
parted
patch
pv
qemu-user-static
qemu-utils
qemu
squashfs-tools
sudo
u-boot-tools
wget
xz-utils
zip

このあたりをapt installで導入

 

つぎに、gitでvolumio/volumio3-os (github.com)をクローン

ビルドのスクリプトが用意されているので

build.sh -b armv7 -d pine64plus

小一時間待つとイメージのzipファイルが出来上がるのでmicroSDカードに書き込み、PINEに差し込み起動

Volumio

あっさりと起動しました。

 

再生機器の選択にI2SDACやオンボードSPDIFが出てくるので、ある程度はOSで対応されている模様

近々ピン配置を確認して外部DACを繋げてみます

 

 

| | | コメント (0)

2022年11月17日 (木)

Beagle Bone Black(Green)のOSをビルドしてみる(Debian Bullseye)

以前IoTゲートウェイの開発で調達したBeagleBoneBlackとGreen(以下BBB)が発掘されたので、

何かに使えないかな?と

公式サイトを見てみると既に旧型扱いの様でBusterベースの2020年4月というものが最新らしい

AI64など新しいボード用にはBullseyeベースのOSが絶賛更新中なのに

 

まぁ一発書き込み出来るイメージじゃなければ新しいOSを自前でビルドすればいいじゃん、と

ということで(実機じゃ重すぎるから)クロス環境を用意

今回はWindows10+WSL上のDebianにて

 

※重要

 今回は試行錯誤してかなり手戻りしたので、大事な点・手順を書き留めておきます

1.WSLからSDカードに書き込みを行うにはWindows11+WSL2が簡単

2.もしWindows10を使っている場合、まずWSLが1なら2に更新

 そのままだとSDカード(というよりUSB機器)が接続出来ないので、WSLのカーネルをUSB認識する様に設定・ビルドが必須

 そのうえでUSBIP(USB機器をネットワーク越しに接続するソフトウェア)をインストール

※僕は、この作業をカーネルビルド等が終わってから始めたんですが…なぜかWindowsが起動しなくなり、「元の状態に復元」で

復旧したらビルドした内容ともにDebianが消えました💦

 

 上記の手順はこちらのサイトに詳しく書かれていますので参照ください(ただしUbuntu用)

 

 さて準備が出来たところでBBB用の環境

 こちらも公式?で手順が詳しく書かれていますので、それに沿って作業しました

 とはいえ、その手順が公開されてから元のソースは更新されていますので、出来るだけ新しいソース、パッチを入手します

 カーネルはここからgitで

  branchはorigin/ti-linux-rt-5.10.y

 u-bootはここからgitで

  branchはWIP/16Nov2022

 ルートFSはここからwgetで

 ・debian-11.5-minimal-armhf-2022-10-06

 

 あとは公式?の手順通りに作業していきます。ウチの環境(初代Lenovo ThinkCentre Tiny m75q+ダウンロード約700Mのネット)で

1時間弱で終了

 はじめにインストールしたusbipで、WindowsのカードリーダーのmicroSDカードに書き込み、BBBに挿入、起動

 

U-Boot SPL 2022.11 (Nov 15 2022 - 17:34:01 +0900)
Trying to boot from MMC1
Loading Environment from EXT4... ** File not found /boot/uboot.env **

** Unable to read "/boot/uboot.env" from mmc0:1 **


U-Boot 2022.11 (Nov 15 2022 - 17:34:01 +0900)

CPU : AM335X-GP rev 2.1
I2C: ready
DRAM: 512 MiB
No match for driver 'omap_hsmmc'
No match for driver 'omap_hsmmc'
Some drivers were not found
Reset Source: Global warm SW reset has occurred.
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from EXT4... ** File not found /boot/uboot.env **

** Unable to read "/boot/uboot.env" from mmc0:1 **
Board: BeagleBone Black
<ethaddr> not set. Validating first E-fuse MAC
BeagleBone Black:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net: eth0: MII MODE
cpsw, usb_ether
Press SPACE to abort autoboot in 0 seconds
board_name=[A335BNLT] ...
board_rev=[000C] ...
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
Checking for: /boot.scr ...
Checking for: /boot/boot.scr ...
Checking for: /boot/uEnv.txt ...
gpio: pin 55 (gpio 55) value is 1
27 bytes read in 22 ms (1000 Bytes/s)
Loaded environment from /boot/uEnv.txt
Checking if uname_r is set in /boot/uEnv.txt...
gpio: pin 56 (gpio 56) value is 1
Running uname_boot ...
loading /boot/vmlinuz-5.10.145-ti-rt-r53 ...
10625536 bytes read in 694 ms (14.6 MiB/s)
debug: [enable_uboot_overlays=] ...
loading /boot/dtbs/5.10.145-ti-rt-r53/am335x-boneblack.dtb ...
93357 bytes read in 75 ms (1.2 MiB/s)
uboot_overlays: add [enable_uboot_overlays=1] to /boot/uEnv.txt to enable...
debug: [console=ttyO0,115200n8 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait] ...
debug: [bootz 0x82000000 - 0x88000000] ...
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8ffe6000, end 8ffffcac ... OK

Starting kernel ...

[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.10.145-ti-rt-r53 (root@DESKTOP-9JT8RFU) (arm-linux-gnueabi-gcc (GCC) 10.4.0, GNU ld (GNU Binutils) 2.39) #1 SMP PREEMPT_RT Tue Nov 15 14:56:23 JST 2022
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 48 MiB at 0x9c800000
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000080000000-0x000000009fdfffff]
[ 0.000000] HighMem empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080000000-0x000000009fdfffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x000000009fdfffff]
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (sgx neon)
[ 0.000000] percpu: Embedded 17 pages/cpu s39840 r8192 d21600 u69632
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129412
[ 0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:on, heap free:off
[ 0.000000] Memory: 444180K/522240K available (15360K kernel code, 1464K rwdata, 3896K rodata, 1024K init, 453K bss, 28908K reserved, 49152K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU priority boosting: priority 1 delay 500 ms.
[ 0.000000] rcu: RCU_SOFTIRQ processing moved to rcuc kthreads.
[ 0.000000] No expedited grace period (rcu_normal_after_boot).
[ 0.000000] Trampoline variant of Tasks RCU enabled.
[ 0.000000] Tracing variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[ 0.000000] TI gptimer clocksource: always-on /ocp/interconnect@44c00000/segment@200000/target-module@31000
[ 0.000002] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000024] clocksource: dmtimer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000419] TI gptimer clockevent: 24000000 Hz at /ocp/interconnect@48000000/segment@0/target-module@40000
[ 0.001677] Console: colour dummy device 80x30
[ 0.001718] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
[ 0.001724] This ensures that you still see kernel messages. Please
[ 0.001728] update your kernel commandline.
[ 0.001762] Calibrating delay loop... 995.32 BogoMIPS (lpj=1990656)
[ 0.048489] pid_max: default: 32768 minimum: 301
[ 0.049033] LSM: Security Framework initializing
[ 0.049074] Yama: becoming mindful.
[ 0.049399] AppArmor: AppArmor initialized
[ 0.049414] TOMOYO Linux initialized
[ 0.049614] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.049632] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.051484] CPU: Testing write buffer coherency: ok
[ 0.051567] CPU0: Spectre v2: using BPIALL workaround
[ 0.072935] Setting up static identity map for 0x80100000 - 0x80100060
[ 0.080514] rcu: Hierarchical SRCU implementation.
[ 0.105491] EFI services will not be available.
[ 0.116551] smp: Bringing up secondary CPUs ...
[ 0.116563] smp: Brought up 1 node, 1 CPU
[ 0.116571] SMP: Total of 1 processors activated (995.32 BogoMIPS).
[ 0.116583] CPU: All CPU(s) started in SVC mode.
[ 0.117592] devtmpfs: initialized
[ 0.144782] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.145300] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.145350] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.149229] pinctrl core: initialized pinctrl subsystem
[ 0.150592] DMI not present or invalid.
[ 0.151591] NET: Registered protocol family 16
[ 0.156220] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.178892] l3-aon-clkctrl:0000:0: failed to disable
[ 0.179811] audit: initializing netlink subsys (disabled)
[ 0.181562] thermal_sys: Registered thermal governor 'fair_share'
[ 0.181576] thermal_sys: Registered thermal governor 'bang_bang'
[ 0.181582] thermal_sys: Registered thermal governor 'step_wise'
[ 0.181587] thermal_sys: Registered thermal governor 'user_space'
[ 0.181591] thermal_sys: Registered thermal governor 'power_allocator'
[ 0.182150] cpuidle: using governor ladder
[ 0.182272] cpuidle: using governor menu
[ 0.188574] audit: type=2000 audit(0.176:1): state=initialized audit_enabled=0 res=1
[ 1.456486] hw-breakpoint: debug architecture 0x4 unsupported.
[ 1.485817] Kprobes globally optimized
[ 1.513067] raid6: skip pq benchmark and using algorithm neonx8
[ 1.513087] raid6: using neon recovery algorithm
[ 1.520622] iommu: Default domain type: Translated
[ 1.523103] SCSI subsystem initialized
[ 1.524005] usbcore: registered new interface driver usbfs
[ 1.524071] usbcore: registered new interface driver hub
[ 1.524128] usbcore: registered new device driver usb
[ 1.525269] mc: Linux media interface: v0.10
[ 1.525367] videodev: Linux video capture interface: v2.00
[ 1.525540] pps_core: LinuxPPS API ver. 1 registered
[ 1.525548] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.525572] PTP clock support registered
[ 1.528071] NetLabel: Initializing
[ 1.528085] NetLabel: domain hash size = 128
[ 1.528091] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
[ 1.528190] NetLabel: unlabeled traffic allowed by default
[ 1.529469] clocksource: Switched to clocksource dmtimer
[ 2.639691] VFS: Disk quotas dquot_6.6.0
[ 2.639837] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 2.640137] FS-Cache: Loaded
[ 2.640603] CacheFiles: Loaded
[ 2.642201] AppArmor: AppArmor Filesystem Enabled
[ 2.657698] NET: Registered protocol family 2
[ 2.657983] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 2.660144] tcp_listen_portaddr_hash hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 2.660465] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 2.660622] TCP bind hash table entries: 4096 (order: 4, 114688 bytes, linear)
[ 2.660734] TCP: Hash tables configured (established 4096 bind 4096)
[ 2.661119] MPTCP token hash table entries: 512 (order: 2, 18432 bytes, linear)
[ 2.661247] UDP hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 2.661296] UDP-Lite hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 2.661781] NET: Registered protocol family 1
[ 2.675368] RPC: Registered named UNIX socket transport module.
[ 2.675385] RPC: Registered udp transport module.
[ 2.675389] RPC: Registered tcp transport module.
[ 2.675394] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 2.675407] NET: Registered protocol family 44
[ 2.677171] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[ 2.683441] Initialise system trusted keyrings
[ 2.683991] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[ 2.695164] zbud: loaded
[ 2.704104] NFS: Registering the id_resolver key type
[ 2.704173] Key type id_resolver registered
[ 2.704179] Key type id_legacy registered
[ 2.704421] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 2.704432] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 2.704486] jffs2: version 2.2. (NAND) (SUMMARY) c 2001-2006 Red Hat, Inc.
[ 2.706005] fuse: init (API version 7.32)
[ 2.796603] xor: automatically using best checksumming function neon
[ 2.796628] Key type asymmetric registered
[ 2.796635] Asymmetric key parser 'x509' registered
[ 2.796728] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 2.801127] io scheduler mq-deadline registered
[ 3.103875] ti-sysc: probe of 44e31000.target-module failed with error -16
[ 3.147530] ti-sysc: probe of 48040000.target-module failed with error -16
[ 3.256302] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[ 3.384839] debugfs: Directory '49000000.dma' with parent 'dmaengine' already present!
[ 3.384877] edma 49000000.dma: TI EDMA DMA engine driver
[ 3.414820] pinctrl-single 44e10800.pinmux: 142 pins, size 568
[ 3.432897] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[ 3.438335] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 20, base_baud = 3000000) is a 8250
[ 3.438560] printk: console [ttyS0] enabled
[ 3.443588] omap_rng 48310000.rng: Random Number Generator ver. 20
[ 3.447812] random: crng init done
[ 3.505621] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[ 3.508884] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
[ 3.509874] cpsw 4a100000.ethernet: initialized cpsw ale version 1.4
[ 3.509892] cpsw 4a100000.ethernet: ALE Table size 1024
[ 3.510038] cpsw 4a100000.ethernet: cpts: overflow check period 1250 (jiffies)
[ 3.510119] cpsw 4a100000.ethernet: Detected MACID = d0:5f:b8:fb:d4:95
[ 3.514718] usbcore: registered new interface driver smsc95xx
[ 3.516537] am335x-phy-driver 47401300.usb-phy: supply vcc not found, using dummy regulator
[ 3.516893] am335x-phy-driver 47401300.usb-phy: dummy supplies not allowed for exclusive requests
[ 3.522758] am335x-phy-driver 47401b00.usb-phy: supply vcc not found, using dummy regulator
[ 3.523133] am335x-phy-driver 47401b00.usb-phy: dummy supplies not allowed for exclusive requests
[ 3.531382] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 3.531448] ehci-platform: EHCI generic platform driver
[ 3.531869] ehci-omap: OMAP-EHCI Host Controller driver
[ 3.544838] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[ 3.544891] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 1
[ 3.545296] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[ 3.545313] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 3.545322] usb usb1: Product: MUSB HDRC host driver
[ 3.545330] usb usb1: Manufacturer: Linux 5.10.145-ti-rt-r53 musb-hcd
[ 3.545337] usb usb1: SerialNumber: musb-hdrc.1
[ 3.546667] hub 1-0:1.0: USB hub found
[ 3.546747] hub 1-0:1.0: 1 port detected
[ 3.558780] omap_rtc 44e3e000.rtc: already running
[ 3.560890] omap_rtc 44e3e000.rtc: registered as rtc0
[ 3.560985] omap_rtc 44e3e000.rtc: setting system clock to 2022-11-17T02:28:13 UTC (1668652093)
[ 3.563038] i2c /dev entries driver
[ 3.567149] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[ 3.568049] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0)
[ 3.568063] softdog: soft_reboot_cmd=<not set> soft_active_on_boot=0
[ 3.569786] cpuidle: enable-method property 'ti,am3352' found operations
[ 3.571378] sdhci: Secure Digital Host Controller Interface driver

[ 3.571389] sdhci: Copyright(c) Pierre Ossman
Welcome to Debian GNU/Linux 11 (bullseye)!

[ 3.571393] sdhci-pltfm: SDHCI platform and OF driver helper
[ 3.573335] sdhci-omap 481d8000.mmc: supply vqmmc not found, using dummy regulator
[ 3.576946] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[ 3.577412] omap-aes 53500000.aes: will run requests pump with realtime priority
[ 3.581350] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[ 3.582222] omap-sham 53100000.sham: will run requests pump with realtime priority
[ 3.587896] hid: raw HID events driver (C) Jiri Kosina
[ 3.588990] usbcore: registered new interface driver usbhid
[ 3.589002] usbhid: USB HID core driver
[ 3.589985] remoteproc remoteproc0: wkup_m3 is available
[ 3.594684] drop_monitor: Initializing network drop monitor service
[ 3.596380] NET: Registered protocol family 10
[ 3.608973] mmc1: SDHCI controller on 481d8000.mmc [481d8000.mmc] using External DMA
[ 3.613211] Segment Routing with IPv6
[ 3.613352] mip6: Mobile IPv6
[ 3.613364] NET: Registered protocol family 17
[ 3.618329] Key type dns_resolver registered
[ 3.618348] mpls_gso: MPLS GSO support
[ 3.618529] ThumbEE CPU extension supported.
[ 3.618555] Registering SWP/SWPB emulation handler
[ 3.618564] omap_voltage_late_init: Voltage driver support not added
[ 3.620399] printk: console [ttyS0]: printing thread started
[ 3.620574] registered taskstats version 1
[ 3.620594] Loading compiled-in X.509 certificates
[ 3.621007] zswap: loaded using pool lzo/zbud
[ 3.642870] Key type ._fscrypt registered
[ 3.642886] Key type .fscrypt registered
[ 3.642892] Key type fscrypt-provisioning registered
[ 3.651649] Btrfs loaded, crc32c=crc32c-generic
[ 3.651836] AppArmor: AppArmor sha1 policy hashing enabled
[ 3.707509] mmc1: new high speed MMC card at address 0001
[ 3.712265] OMAP GPIO hardware version 0.1
[ 3.719977] mmcblk1: mmc1:0001 MMC04G 3.60 GiB
[ 3.720601] mmcblk1boot0: mmc1:0001 MMC04G partition 1 2.00 MiB
[ 3.721230] mmcblk1boot1: mmc1:0001 MMC04G partition 2 2.00 MiB
[ 3.721710] mmcblk1rpmb: mmc1:0001 MMC04G partition 3 128 KiB, chardev (241:0)
[ 3.724210] mmcblk1: p1 p2
[ 3.745959] tps65217-pmic: Failed to locate of_node [id: -1]
[ 3.759566] tps65217-bl: Failed to locate of_node [id: -1]
[ 3.765366] tps6521x_pwrbutton tps65217-pwrbutton: DMA mask not set
[ 3.766664] input: tps65217_pwr_but as /devices/platform/ocp/44c00000.interconnect/44c00000.interconnect:segment@200000/44e0b000.target-module/44e0b000.i2c/i2c-0/0-0024/tps65217-pwrbutton/input/input0
[ 3.772636] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[ 3.773293] at24 0-0050: supply vcc not found, using dummy regulator
[ 3.774768] at24 0-0050: 32768 byte 24c256 EEPROM, writable, 1 bytes/write
[ 3.776003] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[ 3.787167] at24 2-0054: supply vcc not found, using dummy regulator
[ 3.827878] at24 2-0055: supply vcc not found, using dummy regulator
[ 3.865799] at24 2-0056: supply vcc not found, using dummy regulator
[ 3.903102] at24 2-0057: supply vcc not found, using dummy regulator
[ 3.942342] omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz
[ 3.970701] omap_gpio 44e07000.gpio: Could not set line 6 debounce to 200000 microseconds (-22)
[ 3.970729] sdhci-omap 48060000.mmc: Got CD GPIO
[ 3.970948] sdhci-omap 48060000.mmc: supply vqmmc not found, using dummy regulator
[ 4.030339] mmc0: SDHCI controller on 48060000.mmc [48060000.mmc] using External DMA
[ 4.087572] mmc0: new high speed SDHC card at address 59b4
[ 4.097591] tda998x 0-0070: found TDA19988
[ 4.099828] mmcblk0: mmc0:59b4 USDU1 30.0 GiB
[ 4.102948] mmcblk0: p1
[ 4.108315] tilcdc 4830e000.lcdc: bound 0-0070 (ops 0xc109ca90)
[ 4.115372] [drm] Initialized tilcdc 1.0.0 20121205 for 4830e000.lcdc on minor 0
[ 4.115722] tilcdc 4830e000.lcdc: [drm] Cannot find any crtc or sizes
[ 4.117714] tilcdc 4830e000.lcdc: [drm] Cannot find any crtc or sizes
[ 4.118082] of_cfs_init
[ 4.118191] of_cfs_init: OK
[ 4.165296] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
[ 4.165528] VFS: Mounted root (ext4 filesystem) readonly on device 179:769.
[ 4.175598] devtmpfs: mounted
[ 4.177640] Freeing unused kernel memory: 1024K
[ 4.180222] Checked W+X mappings: passed, no W+X pages found
[ 4.180255] Run /sbin/init as init process
[ 4.242445] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.
[ 5.063184] systemd[1]: systemd 247.3-7+deb11u1 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[ 5.064277] systemd[1]: Detected architecture arm.
[ 5.091977] systemd[1]: Set hostname to <arm>.
[ 7.075162] systemd[1]: Queued start job for default target Graphical Interface.
[ 7.092216] systemd[1]: Created slice system-getty.slice.
[ OK ] Created slice system-getty.slice.
[ OK ] Created slice system-modprobe.slice[ 7.116888] systemd[1]: Created slice system-modprobe.slice.
.
[ 7.133388] systemd[1]: Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice User and Session Slic[ 7.160498] systemd[1]: Created slice User and Session Slice.
e.
[ OK ] Started Dispatch Password …ts to [ 7.182680] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
Console Directory Watch.
[ OK ] Started Forward Password R…uests [ 7.206495] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
to Wall Directory Watch.
[ OK ] Set up automount Arbitrary…s File[ 7.231676] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
System Automount Point.
[ OK ] Reached target Local Encrypted Volu[ 7.258226] systemd[1]: Reached target Local Encrypted Volumes.
mes.
[ OK ] Reached target Paths.[ 7.282205] systemd[1]: Reached target Paths.

[ OK ] Reached target Remote File Systems systemd[1]: Reached target Remote File Systems.
[0m.
[ OK ] Reached target Slices.[ 7.325867] systemd[1]: Reached target Slices.

[ OK ] Reached target Swap.[ 7.346036] systemd[1]: Reached target Swap.

[ OK ] Listening on Syslog Socket.[ 7.378094] systemd[1]: Listening on Syslog Socket.

[ OK ] Listening on fsck to fsckd communic[ 7.399188] systemd[1]: Listening on fsck to fsckd communication Socket.
ation Socket.
[ OK ] Listening on initctl Compatibility [ 7.422640] systemd[1]: Listening on initctl Compatibility Named Pipe.
Named Pipe.
[ OK ] Listening on Journal Audit Socket 7.447653] systemd[1]: Listening on Journal Audit Socket.
0m.
[ OK ] Listening on Journal Socket (/dev/l[ 7.471211] systemd[1]: Listening on Journal Socket (/dev/log).
og).
[ OK ] Listening on Journal Socket.[ 7.495454] systemd[1]: Listening on Journal Socket.

[ OK ] Listening on udev Control Socket 7.519602] systemd[1]: Listening on udev Control Socket.
m.
[ OK ] Listening on udev Kernel Socket[ 7.542920] systemd[1]: Listening on udev Kernel Socket.
.
[ 7.567244] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
Mounting POSIX Message Queue File System..[ 7.584751] systemd[1]: Mounting POSIX Message Queue File System...
.
Mounting Kernel Debug File System...[ 7.628411] systemd[1]: Mounting Kernel Debug File System...

Mounting Kernel Trace File System...[ 7.682635] systemd[1]: Mounting Kernel Trace File System...

Starting Restore / save the current clock.[ 7.747226] systemd[1]: Starting Restore / save the current clock...
..
[ 7.778484] systemd[1]: Condition check resulted in Create list of static device nodes for the current kernel being skipped.
Starting Load Kernel Module configfs...[ 7.854142] systemd[1]: Starting Load Kernel Module configfs...

Starting Load Kernel Module drm...[ 7.903450] systemd[1]: Starting Load Kernel Module drm...

[ 7.969083] systemd[1]: Starting Load Kernel Module fuse...
Starting Load Kernel Module fuse...
[ 8.015302] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[ 8.037279] systemd[1]: Starting File System Check on Root Device...
Starting File System Check on Root Device...
Starting Journal Service...[ 8.103591] systemd[1]: Starting Journal Service...

Starting Load Kernel Modules...[ 8.171222] systemd[1]: Starting Load Kernel Modules...

Starting Coldplug All udev Devices...[ 8.239770] systemd[1]: Starting Coldplug All udev Devices...

[ OK ] Mounted POSIX Message Queue File Sy[ 8.365194] systemd[1]: Mounted POSIX Message Queue File System.
stem.
[ OK ] Mounted Kernel Debug File System 8.400110] systemd[1]: Mounted Kernel Debug File System.
m.
[ OK ] Mounted Kernel Trace File System 8.415352] systemd[1]: Mounted Kernel Trace File System.
m.
[ OK ] Finished Restore / save the current[ 8.469978] systemd[1]: Finished Restore / save the current clock.
clock.
[ OK ] Finished Load Kernel Module configf[ 8.512562] systemd[1]: modprobe@configfs.service: Succeeded.
s.
[ 8.545418] systemd[1]: Finished Load Kernel Module configfs.
[ OK ] Finished Load Kernel Module drm.
[ 8.575304] systemd[1]: modprobe@drm.service: Succeeded.
[ OK ] Finished Load Kernel Module fuse 8.604585] systemd[1]: Finished Load Kernel Module drm.
m.
[ 8.632473] systemd[1]: modprobe@fuse.service: Succeeded.
[ OK ] Finished Load Kernel Modules.[ 8.662109] systemd[1]: Finished Load Kernel Module fuse.

[ 8.698343] systemd[1]: Finished Load Kernel Modules.
[ OK ] Finished File System Check on Root [ 8.776577] systemd[1]: Finished File System Check on Root Device.
Device.
Mounting FUSE Control File System...[ 8.846554] systemd[1]: Mounting FUSE Control File System...

Mounting Kernel Configuration File System.[ 8.956010] systemd[1]: Mounting Kernel Configuration File System...
..
[ OK ] Started File System Check Daemon to[ 9.064017] systemd[1]: Started File System Check Daemon to report status.
report status.
Starting Remount Root and Kernel File Systems systemd[1]: Starting Remount Root and Kernel File Systems...
[0m...
Starting Apply Kernel Variables...[ 9.231002] systemd[1]: Starting Apply Kernel Variables...

[ OK ] Mounted FUSE Control File System 9.306568] systemd[1]: Mounted FUSE Control File System.
m.
[ OK ] Mounted Kernel Configuration File S[ 9.331702] systemd[1]: Mounted Kernel Configuration File System.
ystem.
[ 9.587874] EXT4-fs (mmcblk0p1): re-mounted. Opts: errors=remount-ro
[ OK ] Finished Apply Kernel Variables[ 9.634307] systemd[1]: Finished Apply Kernel Variables.
.
[ OK ] Finished Remount Root and Kernel Fi[ 9.670198] systemd[1]: Finished Remount Root and Kernel File Systems.
le Systems.
[ 9.705416] systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.
[ 9.710791] systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
Starting Load/Save Random Seed...[ 9.748741] systemd[1]: Starting Load/Save Random Seed...

Starting Create System Users...[ 9.862277] systemd[1]: Starting Create System Users...

[ OK ] Started Journal Service.[ 10.102198] systemd[1]: Started Journal Service.

Starting Flush Journal to Persistent Storage...
[ OK ] Finished Load/Save Random Seed.
[ OK ] Finished Create System Users.
Starting Create Static Device Nodes in /dev...
[ 10.475345] systemd-journald[191]: Received client request to flush runtime journal.
[ OK ] Finished Create Static Device Nodes in /dev.
[ OK ] Reached target Local File Systems (Pre).
[ OK ] Reached target Local File Systems.
Starting Rule-based Manage…for Device Events and Files...
[ OK ] Finished Coldplug All udev Devices.
Starting Helper to synchronize boot up for ifupdown...
[ OK ] Finished Flush Journal to Persistent Storage.
Starting Create Volatile Files and Directories...
[ OK ] Finished Create Volatile Files and Directories.
Starting Network Time Synchronization...
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Started Rule-based Manager for Device Events and Files.
[ OK ] Finished Update UTMP about System Boot/Shutdown.
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target System Time Set.
[ OK ] Reached target System Time Synchronized.
[ OK ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[ OK ] Started Discard unused blocks once a week.
[ OK ] Started Daily rotation of log files.
[ OK ] Reached target Timers.
[ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting Avahi mDNS/DNS-SD Stack...
[ OK ] Started Regular background program processing daemon.
[ OK ] Started D-Bus System Message Bus.
Starting Network Manager...
Starting Remove Stale Onli…t4 Metadata Check Snapshots...
Starting Authorization Manager...
Starting System Logging Service...
Starting User Login Management...
Starting WPA supplicant...
[ OK ] Started System Logging Service.
[ OK ] Started Avahi mDNS/DNS-SD Stack.
[ OK ] Started WPA supplicant.
[ OK ] Started Authorization Manager.
Starting Modem Manager...
[ OK ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
[ OK ] Started Network Manager.
[ OK ] Started User Login Management.
Starting Hostname Service...
[ OK ] Started Modem Manager.
[ OK ] Started Hostname Service.
Starting Network Manager Script Dispatcher Service...
[ OK ] Started Network Manager Script Dispatcher Service.
[ OK ] Found device /dev/ttyS0.
[ OK ] Reached target Hardware activated USB gadget.
[ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch.
[ OK ] Finished Helper to synchronize boot up for ifupdown.
Starting Raise network interfaces...
[ 30.030150] cpsw 4a100000.ethernet: initializing cpsw version 1.12 (0)
[ 30.095363] SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)
[ OK ] Finished Raise network interfaces.
[ OK ] Reached target Network.
Starting A high performanc… and a reverse proxy server...
Starting OpenBSD Secure Shell server...
Starting Permit User Sessions...
[ OK ] Finished Permit User Sessions.
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyS0.
[ OK ] Reached target Login Prompts.
[ OK ] Started OpenBSD Secure Shell server.
[ OK ] Started A high performance…er and a reverse proxy server.
[ OK ] Reached target Multi-User System.
[ OK ] Reached target Graphical Interface.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Finished Update UTMP about System Runlevel Changes.
[ 32.162334] cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
[ 32.162446] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Debian GNU/Linux 11 arm ttyS0

default username:password is [debian:temppwd]

arm login: debian
Password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Oct 6 19:53:37 UTC 2022 on ttyS0
debian@arm:~$ uname -a
Linux arm 5.10.145-ti-rt-r53 #1 SMP PREEMPT_RT Tue Nov 15 14:56:23 JST 2022 armv7l GNU/Linux
debian@arm:~$

 

 という感じでBBBのBullseyeの起動が出来ました

 こんなので何するの?という話なんですが…ちょっと前にラズパイでRTL-SDRやらネットラジオ受信した流れでDACを(今頃)載せて

遊んでいるのを、BBBにも、と

 ただ、BBBがラズパイより有利なクロック全部外部供給に対応する、いわゆるBoticの開発が数年前に止まっているので…

それと同等なものを自前で組んで、新しいOS上で動かしてみようかと思っています

 僕は元来組込み屋ですし、楽しめそうw

 

 

| | | コメント (0)

2022年10月22日 (土)

現時点でのRaspberry PiのBluetooth Audio状況

机の片隅に転がってたRTL-SDR V3.0

パソコンに繋いでデジタルでラジオ受信が出来るという興味だけで買ったもので、一応ソフトウェアをインストールして「凄いなぁ」と

関心したところで放置されていました。w

ラジオ受信するためにパソコンが必要ってのが、ねぇ

 

久々に目に留まったので、パソコンじゃなくてラズパイとかで再生出来るなら、と、やはり放置されていたRaspberry Pi 3Bを掘り起こしてきました。

OSをmicroSDにインストールするツール(Raspberry Pi Imager)も以前と変わって便利になってるし💦

 

さて現時点でのRaspberry Pi OSの最新はBullseye。

3Bということで64bit版を選択し、インストール

 

インストールが済んだmicroSDをラズパイに挿し、電源を入れ初期設定を済まし

まず受信で最低限必要なものを

$apt-get install rtl-sdr

RTL-SDRをUSBポートに挿せばモジュールを認識します

 $ lsusb
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

再生するには

 $rtl_fm -f 83.2M -M wfm -E demp  -s 200000 -r 48000 - | aplay --device=plughw:0 -r 48000 -f S16_LE

こんな感じでヘッドフォンから受信した音声が流れはじめます

(deviceは、環境によってはplughw:0がHDMIの場合もあります

さて、ここで違和感…モノラルじゃね?

rtl_fmの情報を読むと、予想通りモノラル受信オンリーです

せっかくのFM放送なのでステレオ受信に取り組みます。

RTL-SDRのステレオ受信に対応するソフトはいくつかみつかりますが(国内での高性能を謳うものもあります

今回はお手軽なSoftFMを利用

$git clone heetps://github.com/jorisvr/SoftFM
$ mkdir build
$ cd build
$ cmake ..
$ make

これで

$ ./softfm -f 83.2M


でデフォルト音声出力先にステレオ放送が出力されます




まぁここで本来の目的は達成できたんですが…
ここまで来たらLCDのメニューで放送選べたり、音量調整も出来たりすれば…なんで思い始めて
またまた手軽にpython使って組んでみました

そして、そんなことやってるウチに「ネットに繋がってるラズパイなんだしネットラジオ受信出来た方が良いんじゃ?」と
余計なことまで組み込むことに💦

お馴染みRadikoへアクセスし、受信地域や受信可能局とそのロゴをダウンロードし表示するなど…

ノイズ無しでラジオ聴ける…ウチじゃ受信が難しいTOKYO-FM、J-WAVE、beyfm78、NACK5、FMヨコハマも

RTL-SDRの必要性が無く💦

 

と、ここまで3.5mmジャックに刺さったヘッドフォンで聴いてたんです

スピーカーで聴こうと思った時に目に入った「最近作ったBluetoothスピーカー」が

 

うん、Bluetoothスピーカーに出力しよう。ラズパイはBluetooth付いてるんだし

 

で、ラズパイの最新Bluetooth Audio環境を調べ始める

これまで(busterまで)サポートされていたbluealsaが廃止され、現行はPluseAudioに集約されているらしい

しかしPulsaAudioはリソースバカ食いの様子。

ざっと調べたところ

 

  関連パッケージ数 ダウンロードサイズ DiscSpace
Bluealsa 6 242kByte 708kByte
PulsaAudio 105 69200kByte 244000kByte

 

これ以外にもPulsaAudioは負荷が大きくノイズが混じる等々の報告がコミュニティにちらほら

自分でも慣れ親しんだBluealsaで構築しようと思います

 

上に書いた通り現行RaspbianからBluealsaは除外されている(開発は進行中)ので、方法としては

1.旧OSバージョンbusterリポジトリからインストールする(bluealsaの旧バージョン…おそらく1.4くらいになる

2.bluealsaのソースからビルド(もちろん最新

 今回は2.を

 まずは必須のモジュールをインストール

 $sudo apt install git automake build-essential libtool pkg-config python3-docutils
$sudo apt install libasound2-dev libbluetooth-dev libdbus-1-dev libglib2.0-dev libsbc-dev libldacbt-enc-dev libldacbt-abr-dev  

 次に今回bluetoothで送る伝送コーデックとして使うaac、aptxHD(open aptx)のライブラリを先に構築

 $git clone https://github.com/mstorsjo/fdk-aac
$cd fdk-aac
$./autogen
$./configure
$make
$make install

$git clone https://github.com/pali/libopenaptx
 $cd libopenaptx
$make
$make install

 blue-alsa本体

 $git clone https://github.com/Arkq/bluez-alsa
$cd bluez-alsa
$autoreconf --install --force
$mkdir build
 $cd build
 $../configure --enable-aac --enable-aptx --enable-aptx-hd --with-libopenaptx --enable-ldac --enable-manpages
$../make
$../make install

インストールが終わったら環境として

/etc/default/bluealsaを
OPTIONS="-p a2dp-source -p a2dp-sink" 

で保存

 $systemctl start bluealsa
 $systemctl status bluealsa
● bluealsa.service - BluezALSA proxy
Loaded: loaded (/etc/systemd/system/bluealsa.service; static)
Active: active (running) since Fri 2022-10-21 17:23:12 JST; 7h ago
Main PID: 13981 (bluealsa)
Tasks: 3 (limit: 1010)
CPU: 55.584s
CGroup: /system.slice/bluealsa.service
mq13981 /usr/bin/bluealsa -p a2dp-source -p a2dp-sink
10月 21 21:02:40 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/ba-transport.c:631: Closing A2DP transport: 18
10月 21 21:02:40 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/ba-transport.c:1548: Exiting IO thread [ba-a2dp-sbc]: A2DP Source (SBC)
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/dbus.c:66: Called: org.bluez.MediaEndpoint1.ClearConfiguration() on /org/bluez/hci0/A2>
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/bluez.c:354: Disconnecting media endpoint: /org/bluez/hci0/A2DP/SBC/source/1
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/ba-transport.c:901: Freeing transport: A2DP Source (SBC)
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/storage.c:132: Saving storage: /var/lib/bluealsa/41:42:E6:A2:0B:96
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/ba-device.c:142: Freeing device: 41:42:E6:A2:0B:96
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/bluez.c:1160: Signal: org.freedesktop.DBus.ObjectManager.InterfacesRemoved()
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/bluez.c:1160: Signal: org.freedesktop.DBus.ObjectManager.InterfacesRemoved()
10月 21 21:03:01 raspberrypi bluealsa[13981]: /usr/bin/bluealsa: D: ../../src/bluez.c:1160: Signal: org.freedesktop.DBus.ObjectManager.InterfacesRemoved()

 

 表示されているアドレスがbluetoothスピーカーのもの

 接続はbluetoothctlでアドレスをtrust、pair、connectする

 

 最初に戻り、RTL-SDRでステレオ放送を受信し、bluetoothスピーカーで再生するには

 $alias AUDIODEV='bluealsa:DEV=41:42:E6:A2:0B:96'
$softfm -f 83.2M -a -R - |  ffplay -nodisp -f s16le -ar 44100 -ac 2 -i

※softFMの-Rは出力ファイル名だが、「-」を指定するとstdoutへ出力される

 それをffplayで受け、44.1kHz2chオーディオ信号としてbluetooth オーディオ機器に送信します

 

 

| | | コメント (0)

2022年9月29日 (木)

最近のもの作り(趣味)~Bluetooth audio編

仕事のことは書けないので、趣味を

DAISOの300円スピーカーの話を2周遅れくらいで知って購入、それを素材としていろんなエンクロージャ(DAISO縛りで)を作って

その流れでBluetooth Audioを再生出来るものへ進んでた。

 

最後に作ったのはこれ

Img_5571

公称2400mAhのLiPoバッテリーを内蔵した小さなモバイルスピーカー

スピーカーユニットとアンプはDAISO300円を魔改造したもの

これに使ったBluetoothAudioモジュール(以下、Bluetoothモジュールと略)は4.1Profileの、大昔に購入したもの

いろいろ弄ってみたけれど、詳細なデータシート(モジュールの内部回路など)がなく、ノイズ対策などに苦労しました。

 

さらにその流れでBluetoothモジュールをいくつか調達したり在庫を掘り起こして調べてみた、と💦

組み込んでしまったものもあり、現在目に見えるのはこちら

Img_5625

左からAliexpressで100円程度のもの、Qualcommの載った1000円ちょっとの技適付きKRC-86Bという高級品w、一番右は2.1chアンプも搭載しています

 

詳しくみてみます

右から

Img_5626

JeiliのAC6955F4が搭載されています。こいつはDACの出力がGNDから浮いている(DACのネガティブ出力がある)のに

プラス側に100uFの電解コンだけ入れて出力されていますね…

データシートにもシングルエンド出力するにはオペアンプで変更する推奨回路図があるのに。

 

次に真ん中

Img_5627

Qualcomm製CSR8630。

差動出力をオペアンプでシングルエンドに丁寧に変換しています。

 

右端は

Img_5628

データシートが見つからなかったのですが、音声系の配線パターンを追ってみるとどうやら差動出力したのを簡易的にシングルエンドに

変換している様子(写真中央~右にある、コンデンサ4個と抵抗2個部分)

 

変なことしてる2つの回路図は、こんな感じです

Img_5629

もしDACのネガティブ側に、GNDに対して一定でなくノイズが載ってると簡易回路ではそのまま出てくる…と思ってしまいます。

 

今のところノイズを嫌うならKRC-86B一択になってしまうんですが、他のモジュールが10個買える値段💦

それにQualcommを選ぶっていうならIIs出力もあるのでDACも載せてハイエンドにしたい、など(いつもの本末転倒

 

おまけ:

右のアンプ付きモジュール(Blurtrumのチップ)をペアリングさせると、なぜか…

Img_5617_20220929202301

| | | コメント (0)

2022年1月16日 (日)

中華なArduinoっぽいマイコンで遊んでみる(定番のLチカ編

環境構築は終わったので、コンパイル~実行の初手の定番のLチカを。

GitHub上にはArduinoレベルのものが上がってますが、まぁそれはおいおい。

ボードマネージャで見たところから拾ってきます。

 

USBシリアルはCH340なので、初めて使うからはSparkfunあたりからドライバーをインストール。

ArduinoIDEの一般的な使い方通り、コンパイルしてボードに書き込み。

 

このボードはPB0~2にLEDが繋がっているので、それが順番に点灯します。

 

さて、何に使おうか…💦

IO多いから、活用しないと。(本末転倒

| | | コメント (0)

2022年1月11日 (火)

F30にG30の10インチモニターを

自分のBMW 320d(F30)のコーディングを行っている時に思いついたのですが…

コンピュータ類は同社の車両(及びMINIやRolls-Royce!)すべて共通で、内部のパラメータで差別化を行っている。

つまり、他の車種のパーツの流用は可能だよなぁ、ということ。

実際、320dのナビをタッチパネル付きディスプレイにした時はF39…x2シリーズ用を流用しました。(今はF3x…3シリーズ用に交換済み

 

8インチのモニターでも十分だと思うのですが…新型のモニターが大きくなっているのを見ると悪戯の虫がゴソゴソを💦

 

で、G30…現行の5シリーズのモニターを調達して交換してみました。

こちらは10.25インチ。解像度なども上がります。そこらを試行錯誤して設定値を見つけました。

(配線繋ぎ変えだけで、特段エラーが出なかった…エラーの時はモニターに「NO SIGNAL」表示されるはず…ので

通信プロトコルなどではない、数値的な設定だけだと考えて)

Img_3928

後にあるのが、元のF3x用CID8.8インチ。

まだ固定してません。穴に差し込んだだけ。w

タッチパネル含めて動作に問題はありませんでした。大きさはボンネット先端が隠れない、絶妙な高さです。

あと、F3x用よりも「画面が手前にくるので、タッチ操作がしやすい」です。

後日暖かい日にでも、切った貼ったの作業でしっかり固定しなくちゃ。

 

| | | コメント (2)

2022年1月 9日 (日)

中華なArduinoっぽいマイコンで遊んでみる(環境構築編

11/11…独身の日ということでAliexpressを徘徊していたところ、半導体不足でAVRのArduino系は値上がりしているなぁ…と。

そんななか、安い互換ボードらしきW806-C200が載った基板を見つけました。

W806 Microcontroller 240MHZ 5-8Bit STM32 Development Board CH340 IoT MCU Chip CDK Development Environment Low Power IOT

買った時は送料込み¥279。240MHzなんてクロックで動いてこの値段なんて。面白そう。

データシートなど調べずにポチってしまいました。w

 

さて、この時期に中国からの荷物がまともに届くとは思ってなく…12/22に到着。💦

慌ててデータシートやら開発環境を調べ始めました。

W806と記載されていますが、本当はHLK-W806というらしい。32bitシングルコア240MHz。フラッシュメモリが1MByte。

上位には801というものもあり。(無線付だったので、技適面倒だから購入リストから除外

 

で、開発環境は…GitHub - Hi-LinkDuino/w80x_arduino: w806 for arduino ide package 

おおっと、1/8ですか。届いた時点では存在しなかった様子。w

 

さてArduinoIDEを起動してボードマネージャへ登録…と思いきや、エラー。

jsonファイルを開いてみると

"url": "https://github.com.cnpmjs.org/Hi-LinkDuino/w80x_arduino/releases/download/v0.0.1/w80x_arduino-0.0.1.zip",

…中国国内のプライベートミラーですか。💦

まぁこれの実態はGitHub上にあるので、このファイルをテキトーな場所にダウンロードして「.cnpmjs.org」をnull置換します。

次にArduinoIDEの環境設定を開き、

Setting_20220224140901

追加のボードマネージャのurl欄に「file://C:\Users\midio\Downloads\package_w80x_proxy_index.json」

の様に(自分のPCでダウンロード、置換修正したファイルを)記載します。

 

これでボードマネージャーを開くと

Boardmanager_20220224141001

一番下に「w80x_arduino csky plain C/C++ core」が出てくるので「インストール」。

とりあえず環境は出来ました。

| | | コメント (0)

2021年9月12日 (日)

MINI(F55)にDIYでHBA

ということで(?)先日BCスイッチを卓上丸鋸で縦割りし、電導ゴム接点を追加した「なんちゃってHBA対応

インスツルメントクラスタースイッチ」を嫁車に搭載してみました。

まずはバッテリーのマイナス極を外し、エアバッグ内蔵ホーンボタンも取り外し。

Img_3381

ステアリングの左右と下の穴からΦ5mm程度の棒を押し込み、針金?のロックを押すと外れます。

センターは16mmのボックス(もちろん固いです

あとはクラスターのカバーを上下にこじ開け、8mm?の六角ビスを4本。

交換したスイッチは

Img_3383

レバー先端が2つになっています。

 

元通りに組み直したあと、やはり自車F30の変更箇所を参考にコーディング。

二つに切ったスイッチの下側を押すと

Img_3397

A付ライトマークが点灯しました。

 

中古で買っても3万円程度になるクラスタースイッチですが、切ってしまえばほぼタダ💦

(Aliexpressでなんとか探した電導ゴム接点ですが、ちょっと上乗せすれば純正がヤフオクの中古スイッチから部品取り可能ですね)

 

これ、恐らくBMWのF3x系でも使えるワザじゃないかと。w

あとは夜間に動作チェックします。

| | | コメント (0)

より以前の記事一覧