2021年11月17日水曜日

TOKAIZ TWA-001をLinuxで使ってみた。

  OrangePi PC用に11acのUSB WiFiアダプタを探していたらTOKAIZのTWA-001が安かったのでなんのチップが載っているのか調べてみた。技適にも対応してるみたいだし。Linuxで使う場合はチップがわかっていればドライバモジュールを探して使えたりするので。
しかしTOKAIZのTWA-001、日本向けっぽくて情報がない。ということで技適の番号210-138110で調べてみるとどうやら中身はCOMFASTのCF-811ACだということが判明。形状は全く同じで刻印が違う感じ。そんでもってCF-811ACはRealtekのRTL8811CUが乗ってるらしい。

そしてドライバモジュールも存在することがわかった。
Realtek RTL8811CU/RTL8821CU USB Wi-Fi adapter driver for Linux

この手のドングル、見た目は同じっぽいけど別なチップが乗っていたりするので難しい。たとえばTP-LinkのArcher T2U Nanoも同じぐらいの価格で、同じようなサイズだけど、RealtekのRTL8812AUが載っていて、RTL8811CUとは品番が似てるけどドライバモジュールに互換性がなかったり。

RTL8811AUとRTL8812CUの違いはちょっと調べたぐらいでは公開されているドライバモジュールではMonitor Modeの対応の違いがありそう。RTL8812AUだとaircrack-ngから出ているドライバモジュールでMonitor modeでairmon-ngが使える。RTL8811CUだとiwしか使えない。
というぐらいしか見つからなかったので特殊な使い方をしなければどちらでも良さそう…

どちらもhostapdは使えそうなので、APモードも問題なさそう。

とりあえずTP-LinkのArcher T2U NanoよりTOKAIZのTWA-001が安かったので早速ポチってみた。

USBに接続すると出っ張り具合はこんな感じ。10cmぐらいのフレキシブル延長ケーブルでOrange Pi PCから離すと電波強度が良くなる。

早速ドライバモジュールをビルドしようと思ったんだけど、試しにifconfigしてみたら普通に認識していた…
lsmodするとちゃんと8821cu(rtl8821cuとrtl8811cuはドライバが共通っぽい)が読み込まれていた。
ちなみにOSはArmbian 21.08 bullseye
インターフェース名がwlxのあとにmacアドレスになっててすごく覚えにくいけど。
Armbianのフォーラムを見る限り、上で貼ったドライバモジュールがマージされてそうな感じだった。sudo iw listをしてみるとAPモードも使えそう。
"interface combinations are not supported"となっているので2.4GHzと5GHzは同時使用できないっぽい。

しかもArmbianにはhostapdも最初から入っていたので設定ファイルさえ作ればAPモードでもすぐに使用可能だった。とりあえず簡易的な設定でAPモードにして繋いでみたら普通につながったのでapmodeも対応しているモジュールが入っているっぽい。brctlも入ってて至れり尽くせり。

hostapdで11ac(5Ghz)で飛ばして1mぐらいの距離でiPhoneからスピードテストしてみたところ上下95Mbpsぐらい出たんだけど、Orange Pi PCのLANが100Mbpsなのでそこがボトルネックになってる。11n(2.4Ghz)だと35~40Mbpsだった。

11acもビルド無しでデフォルトで使えるのは便利だな~
Orange Piシリーズだと技適の問題とかがあるのでどうせ内部接続USBのWiFiを積むならOrange Pi PCみたいにWiFi無しタイプも取り扱ってほしいな。(もしくはヒートガンで剥がすしか無いのか…
Armbianでそのまま11ac使えるようにしてくれてるし。

あとから気がついたんだけどEDUPのEP-AC1689だと技適対応(レビューに技適シール写ってた)でUSB3.0で1300Mbps(5GHz:867Mbps+2.4Ghz:400Mbps)で値段も100円しか違わなかった…
ちなみにEP-AC1689に乗ってるICはRTL8812BUで、Linux用のドライバモジュールもあるみたい。
USB2.0でつかったときの速度はどうなるかわからないけど…(理論上の帯域は足りてないけど。

Realtek RTL8812BU/RTL8822BU USB Wi-Fi adapter driver for Linux
ちなみにArmbianの/lib/modulesの中を覗いてみたらこれも対応してそう。
(rtl88x2buとrtl8812auとrtl8811cuがもうすでに入っていた。)

しかし11acなRealtekのICは種類がおおいな…そして性能的な違いがよくわからない…(ドライバモジュールが対応してないだけで機能的にはついていたり)

ちなみにTWA-001をRaspberry Pi 3Bに繋いでみたけどRaspberry Pi OSにはドライバモジュールが入っていないようだった。でもラズパイ向けの情報はたくさんあるのでビルドすれば普通に使えそうな気がしている。

2021年11月14日日曜日

Orange Pi PCでRTC-8564NBを使ってみた

 Armbianを入れたOrange Pi PCにi2c接続のRTCをつけてオフラインでも時間を保持するようにしてみた。今回も秋月のRTC-8564NBモジュールを使用してみた。Raspberry Pi OSにもともと入っているモジュールでpcf8563として使えたのでArmbianでもそのまま使えるんじゃないかな…

まずはsudo armbian-configで設定画面を開いて
System→Hardwareでi2c0を有効にしておく。
sudo i2cdetect -y 0
でRTCが認識されてるかどうか確認した。

ラズパイの場合はDevicetree Overlayで簡単にRTCの設定ができたので、Orange Pi PCのArmbian上ではどうなんだろうと思って調べてみたら自分でDTSファイルを作成してuser_overlayで読み込ませればデバイスツリーでもRTCが使えるみたい。

Device Tree overlays for sunxi devicesにds1307を使用したサンプルがあったのでRTC-8564NB用に少し変更して使ってみた。i2cバスのレジスタさえ合わせれば他のArmbianなデバイスでも同じように設定できるかも。

/dts-v1/;
/plugin/;

/ {
	compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5";

	fragment@0 {
		target-path = "/aliases";
		__overlay__ {
			rtc0 = "/soc/i2c@01c2ac00/pcf8563@51";
		};
	};

	fragment@1 {
		target = <&i2c0>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			pcf8563@51 {
				compatible = "nxp,pcf8563";
				reg = <0x51>;
				status = "okay";
			};
		};
	};
};

これをpcf8563.dtsとかにして保存したあとに

sudo armbian-add-overlay pcf8563.dts

を実行すると自動でコンパイルされて、/boot/armbianEnv.txtに追記してコンパイル済みのdtboが読み込まれるようにしてくれる。
あとは再起動してtimedatectlを実行してみるとRTCが認識されてるはずなので

ls /dev
してみる。

するとAllwinner H3自体にRTCが内蔵されているため、Orange Pi PCではrtc0とrtc1としてRTCが2つ認識されてしまった。どっちがRTC-8564NBなのかは時間を読み込んで見ればわかるので
timedatectl
を実行してみる。そうするとrtc0はCPU内蔵のRTCで、rtc1がRTC-8564NBになっていた。

rtc0が優先されるっぽいのでrtc1がある場合にはrtcへのシンボリックリンクをrtc1にするスクリプトを起動時に実行されるようにする。

sudo nano /etc/rc.local
でexit0の前辺りに

if [ -e /etc/rtc1 ]; then
  ln -f -s /dev/rtc1 /dev/rtc
  hwclock -f /dev/rtc1 -s
fi

と追記して保存。これで起動時にrtc1がデバイスツリーで追加された場合はrtcへのシンボリックリンクをrtc1に変更した後にrtc1の時刻を読み込んでくれる。

今回は時計バックアップ用バッテリに秋月で売っていたMSリチウム二次電池のMS621FEをバックアップ電源に使ってみた。3.3Vからダイオードと抵抗だけで充電できるし良いんじゃないかなと。一緒に低Vfのダイオード買っておけばよかった…最初電池で行こうとしていたので低リークな1SS380しか買ってなかったので、とりあえずこれと1kオーム入れてみたら2.88Vぐらいまでしかチャージされなかった。
秋月だと1SS154あたりが低Vfっぽいので良さそうなので次回買ってみようかな。用途違うけど… 

2021年11月4日木曜日

Raspberry Pi Zero専用USBハブを作ってみた。

 AliexpressでUSB2.0の3ポートハブが1.75ドルで売っていたのを見かけたので改造してラズパイZero用にしてみた。

USB3.0のタイプも同じ値段だったんだけど、ラズパイZeroで使うときはUSBホスト機能がUSB2.0までの対応なのでとりあえずUSB2.0対応品を。そもそもUSB3.0のタイプ、1ポートだけUSB3.0で2ポートがUSB2.0なんだけど、USB2.0の信号だけハブを通してUSB3.0の信号は直結っぽい。それでいいのか…
ストラップもUSBのキャップも付属してきている。
品番とかスペック表記はなにもない…
形状はタイムリーのBLOCK3-BKにそっくり。

早速分解。
隙間にデザインナイフを入れてこじるとかんたんにオープンできた。接着とかもされていないっぽい。ICはSL2.1Aだった。BLOCK3-BKはGL850Gだと思っていたのでやっぱり別物なのかな。値段も違うし。ちなみにVID:PIDは1a40:0101
端子構成はこんな感じ。中にスペースが少し有るようだったので早速ラズパイZero用に改造。
基板と干渉しないようなところにmicroUSB端子用の穴を開けてみた。1.2mmぐらいのドリルで4箇所穴を開けたあとにデザインナイフで広げていく感じ。このケース、結構サクサク切れる。そんでもってOTGの配線(IDをGNDにつないだ状態)のmicroUSBコネクタを内側から挿入してホットボンドで固定。microUSBの端子は昔買ったやつがまだ余っていたので…
USBのオス端子は浮かしながらハンダを当てていたら結構簡単に外れた。
あとはオス端子がついていたところにmicroUSB端子からのケーブルをハンダしてカプトンテープを貼って絶縁しただけ。蓋を閉めれば完成。
これでRaspberry Pi Zero WでUSBポートが3つ使えるようになった!電源のmicroUSB端子とも干渉しない。miniHDMIは使わないので実質OK。
USBホストケーブルにUSBハブを付けて作業していたけどこっちのほうが断然スマートで良いなぁ。