Raspberry Pi4B WiFi調査メモ

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/f0379a7f-fd93-daca-d2d1-5006c60ddb72.png" width=80%>

## 【前文】
以前レポートした [Pi4B の WiFi が遅い問題](https://qiita.com/god19/items/2a27b81333b8d6baf623 "Raspberry Pi 4B Wi-Fi通信速度測定 - Qiita")。
ネットを検索しても日本語圏では特に情報が得られないのが謎。（自分の環境だけが特殊？）
[公式フォーラム](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245386 "WiFi speed on Pi4 - Raspberry Pi Forums") には報告が挙がっているけど解決には至っていない模様。


最近 [CPU冷却ファンクーラ付きケース](https://qiita.com/god19/items/e8277b1cbced62cc6877 "Raspberry Pi4B CPU冷却ファンクーラ付きケース使用レポート - Qiita") に乗り換えたので気分も一新。再度 Pi3B+、Pi4B の WiFi通信速度を `iperf3`コマンドで計測するも、やはり Pi4B の方が遅い。
改めて WiFi周りを調べてみた。

## 【WiFiチップ確認】
Pi3B+ と Pi4B の Wi-Fiチップは同じらしいけど、まずそこから確認。
しかし、ネットを検索してもそんな情報、中々見つからない（公式サイトにも情報なし）。
そもそも一般的な Windowsラップトップの WiFi仕様にしてもメーカーサイトで公開しているのはせいぜい 「WiFi5(5GHz)対応」とかで、チップ情報なんてわざわざデバイスマネージャで確認しなければ分からない訳で。

Pi4B に話を戻すと、結論としては Pi3B+ と同じだった。
参考になったサイトは [こちら](https://raspberrypi.stackexchange.com/questions/117941/what-exact-wireless-chip-does-pi-4-use "pi 4 - What exact wireless chip does Pi 4 use_ - Raspberry Pi Stack Exchange")。
確認手順は以下。

### 1. ドライバ名確認
`lsmod`コマンドの結果を `cfg80211` で grep。

```shell-session
pi@raspberrypi4:~ $ lsmod | grep cfg80211
cfg80211              860160  1 brcmfmac
rfkill                 36864  6 bluetooth,cfg80211
pi@raspberrypi4:~ $
```

ドライバ名は `brcmfmac` であることが分かる。
因みに、`sudo apt-get install lshw` で `lshw` を入れて確認すれば、詳細も得られる。

```shell-session
pi@raspberrypi4:~ $ sudo lshw
raspberrypi4                
    description: Computer
    product: Raspberry Pi 4 Model B Rev 1.2
    serial: 1**************c
    width: 32 bits
    capabilities: smp cp15_barrier setend swp tagged_addr_disabled
(中略)
  *-network:1
       description: Wireless interface
       physical id: 2
       logical name: wlan0
       serial: dc:a*:**:**:**:*f
       capabilities: ethernet physical wireless
       configuration: broadcast=yes driver=brcmfmac driverversion=7.45.229 firmware=01-2dbd9d2e ip=1**.***.**.**3 multicast=yes wireless=IEEE 802.11
```

### 2. ドライバ名からチップ名を検索
`journalctl`コマンドの結果を `brcmfmac` で grep。

```shell-session
pi@raspberrypi4:~ $ sudo journalctl -b | grep brcmfmac
 2月 24 23:17:02 raspberrypi4 kernel: brcmfmac: F1 signature read @0x18000000=0x15264345
 2月 24 23:17:02 raspberrypi4 kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
 2月 24 23:17:02 raspberrypi4 kernel: usbcore: registered new interface driver brcmfmac
 2月 24 23:17:02 raspberrypi4 kernel: brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt failed with error -2
 2月 24 23:17:03 raspberrypi4 kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
 2月 24 23:17:03 raspberrypi4 kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Jan  4 2021 19:56:29 version 7.45.229 (617f1f5 CY) FWID 01-2dbd9d2e
 2月 24 23:25:50 raspberrypi4 kernel: brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
pi@raspberrypi4:~ $
```

見にくいけど `for chip BCM4345/6` とあるので、これがチップ名らしい。
Pi3B+ でも同様に確認すると、同じ結果が得られた。

チップの仕様は以下のメーカ公式サイト参照。
[BCM43456](https://www.broadcom.com/products/wireless/wireless-lan-bluetooth/bcm43456 "BCM43456")
> Features
IEEE 802.11ac compliant
​Single-stream spatial multiplexing up to 433.3 Mbps data rate
Broadcom TurboQAM® data rates (256-QAM) 
IEEE 802.11ac transmit beamforming support
TX and RX Low-density Parity Check (LDPC)
Bluetooth 5.0  with Class 1 or Class 2 transmitter operation

所謂 1×1 の WiFi5 で最大転送速度は 433.3Mbps といったところ。
なんだけど、目についたのが `beamforming` の文字。ビームフォーミングに対応しているんだね。初めて知ったよ。

ビームフォーミングといえば~~中二病をくすぐるネーミングで知られ~~「あなたのスマホをキャッチ」なんて売り文句で宣伝されている奴だよね。
[iPhoneでWi-Fiを使うなら ビームフォーミング＆ビームフォーミングEX](https://www.buffalo.jp/topics/utilize/detail/beamforming.html "iPhoneでWi-Fiを使うなら ビームフォーミング＆ビームフォーミングEX _ バッファロー")
[ビームフォーミング](https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0 "ビームフォーミング - Wikipedia")

ついでにちょっと余談。
今回チップの [データシート](https://www.cypress.com/file/298786/download "Radio with Integrated Bluetooth 4.1 and FM Receiver.pdf") まで調べていて、これも初めて知ったんだけど、WiFiチップには FM受信機能もあるんだね。
上記のメーカー公式サイトには「802.11ac Wi-Fi, Bluetooth 5.0 and FM Combo Chip」とあるし、データシートにも以下の記載がある。
> • FM unit supports HCI for communication.
• FM receiver: 65 MHz to 108 MHz FM bands; supports the European radio data systems (RDS) and the North American radio broadcast data system (RBDS) standards

スマホには実は FMラジオを受信する機能が組み込まれているんだけど、需要が無いので敢えて止められている、なんて話を以前耳にしたことがあるけど、これのことか、と自分の中で繋がった。
WiFiチップに FM受信機能が統合されているのね。
勿論、ここで言う「FMラジオ」とは、[radiko](https://radiko.jp/ "radiko") とかみたいなインターネットストリーミングじゃなくて、昔からあるラジオの方ね。

ざっと調べたところ、Raspberry Pi でも FM受信機能は止められているらしい。
そんなに需要が無いのかなぁ。震災時にはラジオが有効と昨今は見直されているという認識だけど。

これまたざっと調べたところ、海外メーカーで [FMラジオ機能が搭載されている製品](https://k-tai.watch.impress.co.jp/docs/column/minna/1134341.html "ZenFone 5のラジオ機能はワイドFM対応、帯域切替の手間なし - ケータイ Watch") は一応出ているみたいだね。
個人的には Raspbery Pi でもチューナー無し、本体だけでラジオが聞けると嬉しいんだけどなぁ。

## 【WiFiリンクスピード確認】
脱線したので話を戻す。次はリンクスピードの確認。
ぐぐったら `wavemon`コマンドが良さげだったので `sudo apt-get install wavemon` でインストール、実行。
デフォルトのターミナルサイズだと微妙に見切れるので少し広げるが吉。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/99f96cee-a478-c1a2-892e-2a1ab007167f.png" width=80%>

見るべきポイントは緑色のグラフ「link quality」と「rx rate」（受信速度）、「tx rate」（送信速度）。
分かりやすくていい感じ。

TeraTerm で Pi3B+、Pi4B を同時に比較してみると……。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/a93b1504-bafd-ee9c-9d32-1ea03edd1771.png" width=80%>
左が Pi4B、右が 3b+ なんだけど、どちらも送受信共がっつり 433.3Mbit/s 出てる。
「link quality」に関しては Pi4B の方が少しいいくらい。
これが何で `iperf3`コマンドで計測比較すると Pi4B の方が遅いんだろう？
リンクスピード以外に何かボトルネックとなっている問題箇所が Pi4B にはある、という結論。

## 【Pi4B の WiFiリンクスピード色々と確認】
結局ボトルネックを突き止められなかったけど、`wavemon`コマンドが面白くて色々と計測してみた。

| 接続先 | 周波数 | 距離 | link quality | rx rate | tx rate |
| ---- | ---- | ---- | ---- | ---- | ---- |
| 中継機 | 5GHz | 約4m | 81% | 433.3Mbit/s | 390.0Mbit/S |
| 中継機 | 5GHz | 約10cm | 100% | 433.3Mbit/s | 433.3Mbit/s |
| 親機 | 5GHz | 約8m | 81% | 433.3Mbit/s | 390.0Mbit/S |
| 親機 | 2.4GHz | 約8m | 100% | 135.0Mbit/s | 150.0Mbit/S |

因みに「約10cm」ってのは、Pi4B をモバイルバッテリで起動し、中継機の目の前で計測。
Pi4B は kodi専用機になっているので普段はリビングの TV に接続。それが、中継機から約4m、親機から約8m 離れているといったところ。
それと距離は大雑把な数字なので参考程度に。

元々、メインで使用している Windows10ラップトップの WiFiパフォーマンスがあまりにも酷かったので中継器を導入した経緯がある。
しかし、Pi4B に関して今回の計測結果によれば、中継機ではなく更に離れた親機でも受信速度は変わらないことが分かった。（今まで中継機に繋げていたけど）
これがビームフォーミングの威力ですか。下手なラップトップの WiFi より強力。
それと、2.4GHz はやはり距離に強いんだなと。「link quality」が 100%だし。
速度自体は 5GHz には劣るけど。
でも Youtube で動画を見たりするにはこれでも十分なんだよな。

[システム要件 - YouTube ヘルプ](https://support.google.com/youtube/answer/78358?hl=ja "システム要件 - YouTube ヘルプ")
> 下の表は、各動画形式の再生で推奨されるおおよその速度を示しています。
> 
> | 動画の解像度 | 推奨される持続的な速度 |
| ---- | ---- |
| 4K | 20 Mbps |
| HD 1080p | 5 Mbps |
| HD 720p | 2.5 Mbps |
| SD 480p | 1.1 Mbps |
| SD 360p | 0.7 Mbps |
 
試しに 親機 2.4GHz 接続で kodi を動かしてみたところ、一覧表示は流石にもっさりしていたけど、動画再生自体には問題なかった。
2.4GHz なんて遅いし今更使い道ないと思っていたけど、案外使えるのかも。安定度の点では 5GHz より上だし。

## 【WiFi5 の考察】
最後に改めて WiFi仕様の整理。
仕様で定義されている WiFi5 の速度は以下。
[IEEE 802.11 - Wikipedia](https://ja.wikipedia.org/wiki/IEEE_802.11#IEEE_802.11ac_(Wi-Fi_5) "IEEE 802.11 - Wikipedia")
要するに、アンテナ1本タイプなら 433.3Mbps だけど、2本タイプなら 866.7Mbps。
この差は大きいよね。倍違うんだから。

手持ちの機器で比較的新しめなやつのリンクスピードを確認すると以下。

[Intel NUC](https://qiita.com/god19/items/7fb861c56287c7c284e1 "NUC10i7FNH - Qiita")
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/64e3e87f-d25a-3d18-0b38-d2530200510b.png" width=40%>

[スマホ Xperia 1 SOV40](https://www.sonymobile.co.jp/xperia/xperia1/spec_au.html "Xperia 1（エクスペリア ワン） _ 仕様 _ Xperia（エクスペリア）公式サイト")
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/72822e2a-eab9-3745-22c7-7264818bd769.png" width=40%>

どちらも 2本タイプ 866Mbps。
と、当たり前のように書いているけど、実はこの Xperia 1、自分にとっては初スマホ。
初めてこのリンクスピードを見た時は結構ビビった。限界値だし、普段メインで使っている古めのラップトップなんかより全然速いしで。今どきの携帯って凄いんだなと。

それはさておき、WiFi といえば昔は g、n、a、ac だので分かり辛かった。IEEE802.11 の仕様上の名称からきているのは分かるんだけど。
しかし一般消費者には馴染まないってことで、WiFi4、WiFi5、WiFi6 という名称を使いましょう、という流れなんだけど、それでもまだ不親切だと思うのは自分だけだろうか。

（繰り返しになるけど）Raspberry Pi も含めてラップトップPC 等の WiFi仕様の製品説明は、「WiFi5(5GHz)対応」といった記載だけで、アンテナ数の説明なんてまず無いよね。でも1本か2本かの違いは大きいでしょ。
今どきは普通 2本でしょってことなのかもしれないけど。

それと、有線LAN と違って WiFi接続は、例え繋がっていても、本来のパフォーマンスが出ているかは、今回のように実際にリンクスピードを計測確認してみないと分からない。
無頓着に遅い状態で使っている人も多いのでは。自分も昔はそうだったし。その点も WiFi の分かり辛い点。

WiFi親機でアンテナ4本、最大転送スピード1733Mbps を高らかに謳っている製品があるけど、あれも分かり辛いというか最早詐欺レベル。当たり前の話だけど、受信側もアンテナ4本じゃなければそのスピードは実現しないし、そんな製品、殆ど出回っていないよね。
このメーカーが謳う最大転送スピードに釣られて購入して、リンクスピードを確認したらガッカリ、なんてことも。
但し、アンテナ4本なら、複数機器の接続に強いってメリットはありそう。

更に余談。
Pi4B が出た時、どうせ直ぐにプラスが出るんでしょ、なんて声がネット上では挙がっていたけど、全然出ないよね（笑）。
で、Pi4B+ が出たとして、WiFi が強化されました、となった場合、流石に WiFi6対応は無理だろうから、アンテナ 2本タイプの WiFi5 ってのが現実的なのかなと。これまた分かり辛いアップデートなんだけど。