2) Raspberry Pi DAC ES9023x2
ESS Technologies社のDAC ES9023を左右チャンネルそれぞれに独立搭載した、デュアルDAC仕様のI2S DAC基板です。アンプ無しでも力強いサウンドを再現してくれるのがウリです。
本来はZero系ではない通常のRaspberry Pi向けの基板サイズですが、ピンアサインは互換なのでRaspberry Pi Zeroにもそのまま挿すことが出来ます。今回は以前、マキタ互換12Vバッテリ用に作ったUSB充電アダプタを電源にしてみました。
初回起動は先ほどと同じ要領なのですが、互換性のあるI2S DACが見つからないようなので、手動でI2S DACを有効にして汎用的なHiFiBerry DACを指定してみます。
- I2S DAC: HiFiBerry DAC
これで初期設定ウィザードを完走させて再起動させると、WiFiには繋がってDHCPサーバからIPを受け取るものの、その後一切のネットワーク通信が出来なくなりました。何度Volumioを焼き直しても再現されるので、デバッグのためにシリアルコンソール環境を整えることにしました。
シリアルコンソールを使うには
Raspberry Pi Zero WのUARTピンは、I2S DACに塞がれているGPIOの中に有るので、I2S DACを繋いだままデバッグするために、Raspberry Pi Zero W基板裏のGPIOヘッダーピンのうち、以下の3本の基部にL字ヘッダーピンを追加してみました。
- 6: GND
- 8: TXD
- 10: RXD
枝分けしたUARTピンをUSB UARTアダプタに繋ぐと、Ubuntu 18.04母艦のminicomからシリアルコンソールを開くことが出来ます。
ハードウェアに続いてシステム側の準備では、Volumioの boot パーティションにある、 cmdline.txt 、 config.txt をそれぞれ次の要領で変更します(デフォルトで loglevel=0 が既に記述されていたらこれを loglevel=8 へ上書き)。
1 2 |
# 以下を行末に追記 loglevel=8 console=ttyAMA0,115200 |
config.txtは最終行にインクルードファイルuserconfig.txtが指定されているので、そちらにUARTを有効にするパラメータを記述します。
1 2 3 4 5 6 7 8 9 10 |
initramfs volumio.initrd gpu_mem=32 max_usb_current=1 dtparam=audio=on audio_pwm_mode=2 dtparam=i2c_arm=on disable_splash=1 hdmi_force_hotplug=1 include userconfig.txt |
1 2 3 4 5 6 |
# Add your custom config.txt options to this file, which will be preserved during updates # Add your custom config.txt options to this file, which will be preserved during updates # Add your custom config.txt options to this file, which will be preserved during updates dtoverlay=pi3-miniuart-bt core_freq=250 |
ここでUARTを有効にするために次のパラメータを加えると、一部のカーネルではブートしなくなるバグがあるようなので、使うのを避けます(ハマりました)。
1 |
enable_uart=1 |
不具合の詳細をコンソールより確認
シリアルコンソールをUbuntu 18.04母艦で監視しながら、Raspberry Pi Zero Wをブートしてみると、システム自身は正常に立ち上がっていることが分かりました。その後、WiFiが繋がりネットワークオンラインになった後、しばらくすると受信パケットが尽く破棄されてしまう様子。尚、 iwconfig など一部のコマンドは隠されているので、フルパスで実行する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:##:##:## brd ff:ff:ff:ff:ff:ff inet 192.168.26.64/24 brd 192.168.26.255 scope global wlan0 valid_lft forever preferred_lft forever $ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1588 errors:0 dropped:0 overruns:0 frame:0 TX packets:1588 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:151914 (148.3 KiB) TX bytes:151914 (148.3 KiB) wlan0 Link encap:Ethernet HWaddr b8:27:eb:##:##:## inet addr:192.168.26.64 Bcast:192.168.26.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:356 errors:0 dropped:117 overruns:0 frame:0 TX packets:373 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:88426 (86.3 KiB) TX bytes:50247 (49.0 KiB) $ iwconfig -bash: iwconfig: command not found $ /sbin/iwconfig lo no wireless extensions. wlan0 IEEE 802.11 ESSID:"######" Mode:Managed Frequency:2.462 GHz Access Point: ##:##:##:##:##:## Retry short limit:7 RTS thr:off Fragment thr:off Power Management:off |
dmesgに次のような内蔵WiFiモジュールのエラーが挙がっていました。このI2S DACを外して起動すると不具合は発生しないこと、2,3年前当時は問題なく使えたことから、カーネルを含め、現行Volumioとの間に何か問題があるのかも知れません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ dmesg [ 1394.728776] brcmfmac: _brcmf_set_multicast_list: Setting mcast_list failed, -110 [ 1397.288780] brcmfmac: _brcmf_set_multicast_list: Setting allmulti failed, -110 [ 1399.848781] brcmfmac: brcmf_cfg80211_disconnect: error (-110) [ 1402.408788] brcmfmac: _brcmf_set_multicast_list: Setting BRCMF_C_SET_PROMISC failed, -110 [ 1410.088926] brcmfmac: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110 [ 1429.848855] brcmfmac: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110 [ 1429.849145] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save disabled [ 1432.408928] brcmfmac: brcmf_cfg80211_set_power_mgmt: error (-110) [ 1437.528777] brcmfmac: _brcmf_set_multicast_list: Setting mcast_list failed, -110 [ 1440.088786] brcmfmac: _brcmf_set_multicast_list: Setting allmulti failed, -110 [ 1442.648795] brcmfmac: brcmf_run_escan: error (-110) [ 1442.648817] brcmfmac: brcmf_cfg80211_scan: scan error (-110) [ 1445.208774] brcmfmac: _brcmf_set_multicast_list: Setting BRCMF_C_SET_PROMISC failed, -110 [ 1452.888773] brcmfmac: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110 [ 1452.888819] brcmfmac: brcmf_cfg80211_get_tx_power: error (-110) |
Volumio 3 開発版を試す
Debian JessieベースのVolumio 2に対し、Busterベースで開発中のVolumio 3のBeta版が、公式コミュニティにて公開されていたので、試してみることに。
1 |
Volumiobuster-3.083-2021-08-16-pi.zip 538,488,990 byte |
開発版なので cmdline.txt には、デフォルトで loglevel=8 が記述されていました。ブートログは割愛しますが、初回起動ウィザードでI2S DACをセットして再起動するまで、WiFiが正常に機能する点ではv2.9系と変わりありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Raspbian GNU/Linux 10 voluzero ttyAMA0 Welcome to Volumio! WebUI available at voluzero.local (127.0.0.1) ___ /\_ \ __ __ __ ___\//\ \ __ __ ___ ___ /\_\ ___ /\ \/\ \ / __`\\ \ \ /\ \/\ \ /' __` __`\/\ \ / __`\ \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \ \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/ \/__/ \/___/ \/____/ \/___/ \/_/\/_/\/_/\/_/\/___/ Free Audiophile Linux Music Player - Version 2.0 © 2015-2020 Michelangelo Guarise - Volumio Team - Volumio.org Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Welcome to Volumio for Raspberry Pi (5.4.83+ armv6l) $ uname -a Linux volumio 5.4.83+ #1379 Mon Dec 14 13:06:05 GMT 2020 armv6l GNU/Linux |
Busterベースになり、カーネルも5.4系と進んだのですが、やはり同じエラーが挙がり、受信パケット破棄してしまう現象に陥りました。
1 2 3 4 5 6 7 8 9 10 11 |
[ 166.968261] ieee80211 phy0: _brcmf_set_multicast_list: Setting mcast_list failed, -110 [ 169.528269] ieee80211 phy0: _brcmf_set_multicast_list: Setting allmulti failed, -110 [ 172.088260] ieee80211 phy0: _brcmf_set_multicast_list: Setting BRCMF_C_SET_PROMISC failed, [ 322.408234] ieee80211 phy0: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/stat [ 324.968199] ieee80211 phy0: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/stat [ 324.968228] ieee80211 phy0: brcmf_cfg80211_get_station: GET STA INFO failed, -110 [ 327.528185] ieee80211 phy0: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110 [ 330.088183] ieee80211 phy0: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/stat [ 330.088209] ieee80211 phy0: brcmf_cfg80211_get_station: GET STA INFO failed, -110 [ 330.930826] ieee80211 phy0: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110 [ 330.930853] ieee80211 phy0: brcmf_cfg80211_get_tx_power: error (-110) |
Volumio 2.4 は動く!
このI2S DACを購入した当時ダウンロードした、古いVolumio v2.4のイメージをまだ保存していたので焼いてみました。
1 |
volumio-2.452-2018-08-27-pi.img.zip 275,875,465 byte |
Volumioは昔、GitHubのレポジトリでリリースされていた頃は、古いバージョンも試すことが出来たのですが、Volmuo2以降、古いバージョンへのリンクは公開されておらず、よしんば直リンを知り得ても404エラーになることが多いので、ダウンロードしたイメージは手元に残しておいた方が良いかもしれません(こちらフォーラムページに、古いイメージへのリンクのダウンロード可否について記述あり)。
ホットスポットモードでの初期設定ウィザードにおいて、検出されたAP一覧から選んだWiFi にパスフレーズを入れ終わると、なぜかその下のAPが選ばれたことになる不具合に何度も悩まされました。リスト中に既知のAPが有ってもそれを選ばず、一番下にある「手動でWiFiに接続」より、SSIDとパスフレーズ全て手打ちするのがこのバージョンでは確実です。
シリアルコンソールから見てみると、この頃のバージョンはswap周りの構成が異なり、起動直後の空きメモリも多め。そのせいか、WebUIの操作感も明らかにサクサクとレスポンスが早い印象を受けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Raspbian GNU/Linux 8 voluzero ttyAMA0 Linux voluzero 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l ___ /\_ \ __ __ __ ___\//\ \ __ __ ___ ___ /\_\ ___ /\ \/\ \ / __`\\ \ \ /\ \/\ \ /' __` __`\/\ \ / __`\ \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \ \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/ \/__/ \/___/ \/____/ \/___/ \/_/\/_/\/_/\/_/\/___/ Free Audiophile Linux Music Player - Version 2.0 C 2015 Michelangelo Guarise - Volumio Team - Volumio.org Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. $ uname -a Linux voluzero 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mmcblk0p2 2.2G 544M 1.6G 27% /imgpart /dev/loop0 234M 234M 0 100% /static overlay 12G 525M 11G 5% / devtmpfs 230M 0 230M 0% /dev tmpfs 241M 0 241M 0% /dev/shm tmpfs 241M 4.5M 237M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 241M 0 241M 0% /sys/fs/cgroup tmpfs 241M 0 241M 0% /tmp tmpfs 241M 0 241M 0% /var/spool/cups tmpfs 20M 16K 20M 1% /var/log tmpfs 241M 0 241M 0% /var/spool/cups/tmp /dev/mmcblk0p1 61M 37M 24M 61% /boot /dev/sda1 58G 50G 8.2G 86% /media/F2B1-FB36 tmpfs 49M 0 49M 0% /run/user/1000 $ free -h total used free shared buffers cached Mem: 481M 316M 164M 4.6M 62M 189M -/+ buffers/cache: 64M 416M Swap: 511M 0B 511M |
そしてやはりこのバージョンでは、プレイバックオプションを以下のように設定すれば、正常に動作しました。
- Output Device: HiFiBerry DAC
- DAC Model : HiFiBerry DAC
- Mixer Type : Software
デュアルDACの力強いサウンドは、あまり耳のよくない私でもはっきりとその違いが分かります。
firmware-brcm80211を入替えてみる
上記エラーメッセージで検索してみると、GithubにあるVolumioフォーラムにやRaspberry Piフォーラムにも挙がっていて、オンボードWiFiドライバであるfirmware-brcm80211を入れ替えると解消した例もあることから、まずはこれまでに試したVolumio各バージョンの搭載ドライバを確認。
1 2 3 4 |
#Volumio #Kernel #Debian #brcm80211 2.452 4.14.62 Jessie 20161130-3+rpt3 2.907 4.19.118 Jessie 20190114-1+rpt6 3.083 5.4.83 Buster 20190114-2+rpt1 |
各バージョンのfirmware-brcm80211はこちらのページよりダウンロード可能で、Jessie以降を抜粋してみてもこれだけのバージョンが存在しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
firmware-brcm80211_20161130-3+rpi1_all.deb 2017-08-16 11:42 3.4M firmware-brcm80211_20161130-3+rpi2_all.deb 2018-02-07 12:26 3.4M firmware-brcm80211_20161130-3+rpt1_all.deb 2018-02-26 21:12 3.4M firmware-brcm80211_20161130-3+rpt2_all.deb 2018-03-13 21:32 3.4M firmware-brcm80211_20161130-3+rpt3_all.deb 2018-06-04 14:31 3.5M <--Volumio2.452 firmware-brcm80211_20161130-3+rpt4_all.deb 2019-06-17 17:18 3.5M firmware-brcm80211_20190114-1+rpt1_all.deb 2019-04-25 16:01 4.1M firmware-brcm80211_20190114-1+rpt2_all.deb 2019-06-17 17:18 4.1M firmware-brcm80211_20190114-1+rpt3_all.deb 2019-10-09 17:44 4.2M firmware-brcm80211_20190114-1+rpt4_all.deb 2019-10-30 12:29 4.1M firmware-brcm80211_20190114-1+rpt5_all.deb 2020-03-11 14:21 4.2M firmware-brcm80211_20190114-1+rpt6_all.deb 2020-04-17 16:28 4.2M <--Volumio2.907 firmware-brcm80211_20190114-1+rpt7_all.deb 2020-08-19 16:38 4.3M firmware-brcm80211_20190114-1+rpt8_all.deb 2020-08-24 11:06 4.2M firmware-brcm80211_20190114-1+rpt9_all.deb 2020-10-16 16:04 4.4M firmware-brcm80211_20190114-1+rpt10_all.deb 2020-12-01 17:50 4.4M firmware-brcm80211_20190114-1+rpt11_all.deb 2021-01-25 10:27 4.4M firmware-brcm80211_20190114-2+rpt1_all.deb 2021-06-23 15:37 4.4M <--Volumio3.083 |
今回はVolumio2.907へ、いくつか異なるバージョンのドライバを、以下の要領でインストールしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ ls ./fir* firmware-brcm80211_20161130-3+rpt3_all.deb firmware-brcm80211_20190114-1+rpt4_all.deb firmware-brcm80211_20190114-2+rpt1_all.deb $ dpkg -l |grep firmware-brcm80211 ii firmware-brcm80211 1:20190114-1+rpt6 all Binary firmware for Broadcom/Cys $ sudo dpkg -i ./firmware-brcm80211_20190114-1+rpt4_all.deb dpkg: warning: downgrading firmware-brcm80211 from 1:20190114-1+rpt6 to 1:20190114-1+rpt4 (Reading database ... 25154 files and directories currently installed.) Preparing to unpack .../firmware-brcm80211_20190114-1+rpt4_all.deb ... Unpacking firmware-brcm80211 (1:20190114-1+rpt4) over (1:20190114-1+rpt6) ... Setting up firmware-brcm80211 (1:20190114-1+rpt4) ... $ dpkg -l |grep firmware-brcm80211 ii firmware-brcm80211 1:20190114-1+rpt4 all Binary firmware for Broadcom/Cys |
インストール後、再起動してみても不具合はいずれのドライバでも解消されませんでした。もし、解消されるドライバが見つかった場合は、その後のパッケージ更新でアップデートされないよう、 apt-mark でホールドする必要があります。
1 |
$ sudo apt-mark hold firmware-brcm80211 |
取り敢えず、お気に入りのデュアルDAC基板で、問題なく動くバージョンのVolumioを見つけたところで今回はここまでとします。まだまだいくつか異なるDAC ICの載った基板を持っているので、VolumioのみならずmoodeやRuneAudioのセットアップ手順とも共にまとめたいと思います。
2023年10月27日 加筆
Volumio公式サイトがだいぶ色気づいてしまい、ドキュメンテーションなどだいぶ変わっていたので、一部参照リンクを外しました。