100円ショップのセリアに行ったらUSBツインチャージャーがまだ売っていたので買ってきた。USBのメス端子取り用に前に買った記憶が…
パッケージは昔と変わって袋になっていた。パソコン専用らしい。2ポートUSB充電器とかも売っているのに未だに使う人いるのかね…2024年12月30日月曜日
USBツインチャージャーをUSBハブに改造してみた
2024年12月29日日曜日
USB1.1ハブをUSB2.0ハブに改造してみた。
この前購入した3ポートUSBハブが実はUSB1.1 Full Speed(12Mbps)までしか対応していなかったのでUSB2.0 High-Speed(480Mbps)に改造してみた。確かにUSB2.0 Full Speedとして認識したら気が付かないよこれ…
気がついたのはUVC対応のWebカメラ、C270をLuckfox Picoに繋いだときにv4l2-ctlで対応解像度を調べたときに800x600までしか出なかった(いつも1280x720まで出ていたのに…)
C270はUSBのスピードで対応解像度を変更してるのかな。
このUSBハブは同じ形状で、USB2.0が3ポートのものと、1ポートだけUSB3.0ポートのものがあって、前にUSB2.0のみ対応のやつを買ったときはちゃんとUSB2.0対応のSL2.1AというコントローラICが乗っていた。今回購入したUSB3.0版は、USB1.1のMW7211AというICだった。調べてみるとHS8836Aが乗ってるバージョンもあったみたいで、こちらはUSB2.0 High-Speed対応のICらしい。どちらもUSB3.0は1ポートしか無いのでUSB2.0の配線だけハブICを経由して、ほかはPC側の端子に直結されていた。
ちなみにMW7211AとHS8836Aはほぼピンコンパチで、MW7211の9番Pinと12番PinはNCになっている。なのでHS8836A(480Mbps)用に基板を作ればMW7211A(12Mbps)も乗っけられる…
今回購入したハブもそんな配線になっていて、そのままHS8836Aを乗っければ動きそう。ほかのMW7211A搭載ハブとかだとR1の100kΩが未実装だったりするけど、今回の基板はそのまま載ってるし。もともとHS8836Aで生産していたけどバレないから安いMW7211Aに変更したのかな…コンデンサも測定すると10uF品が実装されるし。(MW7211Aの推奨回路では4.7uF)
HS8836Aをそのまま買ってきて乗っけても良かったんだけど、他のUSB2.0ハブが12MHzのクリスタルを外付けしてるのに内蔵クロックなのが気になったので前のハブと同じSL2.1Aを購入してみた。こっちのほうが安かったし。アリエクで5個で145円(送料込み)
クリスタルはジャンクボードから取り外した2.5x2.0のやつ。4PinあるけどECSのデータシートとか見ると対角のGNDピンはメタルカバーにつながってるだけみたいなのでとりあえずクリスタルの2pinだけ繋いだ(ディスクリートだとそうだしね)
SL2.1Aは出力側はMW7211Aと同じなんだけど、右側が結構違うのでパターンカットとかジャンパーしないといけないのが面倒かな。
2024年12月28日土曜日
KTV-FSPCIE(MX版)を追加購入してみた。
KEIANのKTV-FSPCIEのMX版の中古が出ていたのでもう一枚ポチってみた。
シリアルナンバーがわからなかったけど、チューナICとしてMXL136が載ってるタイプのKTV-FSPCIEは見た目でわかるしISDBT-6005_V1Bって刻印が入っていたので大丈夫だろうということで…
R19も除去済みみたいだったし。
届いてみるとシリアルナンバーはK1108だった。製造コードも1139(2011年39週)で前回購入したK1107の2ヶ月後ぐらいっぽい。見た目は全く同じだった。USBで接続するとVID_0511&PID_0029ってなっていたのでKTV-FSUSB2N化済みだった。念の為R19には0Ω抵抗をはんだ付けして書き込み禁止に戻した。
USBケーブルはマルツでZL2001-4PSを買ってきて自作した。バッファローコクヨサプライのBSW3K03Hっていう昔のWebカメラのUSBケーブルをカットして作ろうと思ったら中身のケーブルの色が通常のUSBケーブルとまったく違う…
テスターで測定したらオレンジがVBUS、緑がD-、青がD+、白がGNDという変な配色。通常はVBUSは赤、D-が白、D+が緑、GNDが黒なので特に緑がややこしい。とりあえず付属のケーブルを見ながら作成した。写真はGNDが黒になっているけど、シールド線と白いケーブルを束ねて熱収縮したから黒くなってる。
通常のUSBケーブルの配色で作りたい人は前回の写真を参考にするか、付属のケーブル通りに配線すれば良い。
2024年12月21日土曜日
Luckfox Pico MiniでGPIOを使ってみた。
Luckfox Pico MiniをWiFiに繋いだり、USBのカメラを使ってみたり、Linuxマシンとして使ってみたけど、せっかくGPIOがついてるのでGPIOを使用してみた。
LuckfoxのGPIOはファイルシステム上で通常のファイルのようにいじれるデバイスドライバが入っているので/sys/class/gpio/の中でcatコマンドとかechoコマンドでGPIOを操作できる。Linuxが動くSBCなら結構普通の実装かも。
とりあえずLuckfox Pico MiniにはLEDが2つついていて、片方はステータス表示用のLEDになっているけど、もう片方は未使用なのでLEDがつながってるGPIOを操作してみる。
LuckfoxのGPIOは公式Wikiで紹介されてるピンアサインを見るとわかりやすいかも。使われてない方のLEDはGPIO1_A2につながっていて、Linux上だとGPIO34になっている。図には両方書いてあるんだけど。Linux上のデバイスファイル名の算出方法も下の方に書いてあった。GPIO1_A2の場合は"バンク1 x 32 + (グループ0 x 8 + 2)"で34になってるっぽい。グループはA、B、C、Dと4つあってそれぞれ0、1、2、3。
さっそくGPIO34を操作してみる。
echo 34 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio34/direction echo 1 > /sys/class/gpio/gpio34/value
echo 0 > /sys/class/gpio/gpio34/value
他のピンもluckfox-configでペリフェラルに設定していなければこんな感じで普通のGPIOとして使用できる。
echo 144 > /sys/class/gpio/export cat /sys/class/gpio/gpio144/value
ボタンを押したまま、もう一度
cat /sys/class/gpio/gpio144/value
#!/bin/sh GPIO_PIN=144 echo "$GPIO_PIN" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIO_PIN/direction echo "1" > /sys/class/gpio/gpio$GPIO_PIN/active_low while true; do VALUE=$(cat /sys/class/gpio/gpio$GPIO_PIN/value) if [ "$VALUE" -eq 1 ]; then echo "$GPIO_PIN" > /sys/class/gpio/unexport halt exit 0 fi sleep 0.1 done
自動起動させるためにこの前WiFiに繋いだときに作った/etc/init.d/S99xの中にこのシェルスクリプトのパスを追加した。
2024年12月15日日曜日
給電専用USB Type Cコネクタを使ってみた。
Padavanファームを入れたWT3020が意外と便利で、USBメモリをWiFi経由で使ったり出張先で広告ブロックルータとして使ったりしていたんだけどこれだけのためにMicroUSBケーブルを持ち歩くのも嫌なので改造してみることに。USB Type CからmicroUSBの変換アダプタとかも使ってみたんだけどなんか端子に負荷がかかってそうで嫌だし…
新幹線の中でWiFiを中継したり(セキュリティーソフトでCaptive Portalが開けないPCの場合はこいつを経由してiPhoneからログオンして繋いでた)するときはモバイルバッテリとかからも給電することを考えてPDからも給電できるようにちゃんとCC1とCC2付きの端子にした。
給電専用Type Cコネクタは複数あるようで、2Pinのものは簡単で良さそうだけどUSB A→USB Type Cケーブルじゃないと電源が供給されなかったりするので今回はハンダが簡単そうな6Pタイプにした。
この6Pinタイプは真ん中の2つがCC1 CC2になっていて、外側両側がGND、あと残った2つの端子はVBUSになっている超簡単な端子。これなら基板がなくても簡単に実装できそう。
まずはMicroUSB端子を剥がす。これはスルーホールがついてるタイプだったので少し大変だった。一部パターンが剥がれたけど使わないところなのでOK。
TypeCコネクタは逆さまに取り付けることに。MicroUSBのパターンのところはVBUSとGNDしか来てなかったのでカプトンテープで絶縁しておいた。固定はスルーホールの反対側からハンダを流してハウジング自体にハンダする形にした。一応ハウジングには超薄く予備ハンダをしておいて、裏側からスルーホールに新しいハンダを流し込むと無事固定された。
あとはGNDとVBUSを配線して、CC1とCC2とハウジングのところに1005の5.1kΩ抵抗を取り付けた。写真では超見づらいけど抵抗が2つついてる。
ハウジングを少し削ったら完成。
これでUSB Type Cから給電できるようになって持ち運ぶケーブルが減らせる!PDの充電器でも無事動作した。こうやってmicroUSB給電タイプのデバイスはどんどんType Cにしていきたいな。
2024年12月10日火曜日
iwdでAPモードを使ってみた。
LuckfoxのBuildrootでWiFiに自動で接続できるようにするためにwpa_supplicantをやめてiwdにしていたんだけど、hostapd不要でAPが建てられるらしいのでiwdだけでSoft APを試してみた。
/etc/iwd/main.confの中でEnableNetworkConfigurationがtrueになってるとDHCPでIP割当まで自動でやってくれるらしい。デフォルトでtrueになっていた。
まずはAP用の設定ファイルを作成。
/var/lib/iwdの中にapという名前のフォルダを作って、AP名のコンフィグファイルを作成する。今回はluckfoxというAP名にしたかったのでluckfox.apという名前でファイルを作った。
[General] Channel=1 DisableHT=false [Security] Passphrase=12345678 [IPv4] Address=192.168.4.1 Gateway=192.168.4.1 Netmask=255.255.255.0 DNSList=192.168.4.1
luckfox.apの中身はこんな感じ。
あとはWiFiアダプタをapモードにしてapをスタートするだけ。
iwctl device wlan0 set-property Mode ap iwctl ap wlan0 start-profile luckfox
これでSoft APが立ち上がる。
5GhzにするにはChannelを36以上に設定すればいいらしいけど"Argument type is wrong"って出て設定できなかった。ちなみに/etc/iwd/main.confにはCountry=JPを追加してある。LuckfoxのSDKでインストールされるバージョンは2.3だった。
PCから接続してみるとLuckfox側のWiFiドングルがRTL8821CUでもRT3070でもおなじ11Mbpsで繋がるのでなにか設定があるのかな?と思って試しにAndroidのNet Analyzerで確認してみると、b11/n150で40Mhz,WPSで立ち上がっていた。
そんでもってAndroidで接続するとWiFi4で150Mbpsで接続される。ということはPC側のRZ608との相性かもしれない?試しにPCにWLI-UC-GNを繋いで接続すると150Mbpsとして確認できた。g54がないことによるかもしれない?
通常のStationモードに戻す場合は
iwctl device wlan0 set-property Mode station
でもとに戻すことができる。
手軽にAPモードを使えるのは便利。
2024年12月9日月曜日
Luckfox Pico Mini BでUSB LANを使ってみた。
USB WiFiドングルをホットプラグ対応にして自動でWiFiにつなげるようにしたのでLANケーブルを取り外してしまったんだけど、たまーに有線LANが欲しくなるのでUSBで接続できるようにしてみた。
ピンヘッダを付けてもいいんだけど端面スルーホールに端子をつけるのは折れそうで怖いし…
USBドングルはだいぶ前に購入したUSB208B NO.:8150ってやつがあったのでとりあえずこれを動かせるようにしてみようかなと。
見るからに怪しいし、8150って書いてあるのにVID PIDは0bda:8050で中身のチップはRTL8152Bという。とりあえずチップに合わせてrtl8152のカーネルモジュールをビルドしてみる。
Ubuntu上のLuckfoxのSDKで
cd $HOME/luckfox-pico/sysdrv/source/kernel cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config make ARCH=arm menuconfig
RTL8152/RTL8153を選択してSave
make ARCH=arm savedefconfig cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig cd $HOME/luckfox-pico ./build.sh driver
そんでもって、ドライバだけをビルドする。
cd $HOME/luckfox-pico/sysdrv/out/kernel_drv_ko
の中にカーネルモジュールが出来上がるのでこの中のrtl8150.koを保存しておく。
これでUbuntu上の作業は終了。
次にLuckfox Pico Mini Bを起動して今回はWinSCPでファイルを転送することにした。
/oem/usr/ko
の中に先ほど保存したrtl8150.koを転送する。
次に
/lib/udev/rules.d
の中にある61-usbdevice.rulesを開いて下の2行を追加。
ACTION=="add", ATTR{idVendor}=="0bda", ATTR{idProduct}=="8050", RUN+="/sbin/insmod /oem/usr/ko/r8152.ko" SUBSYSTEM=="net", ACTION=="add", ENV{INTERFACE}=="eth*", RUN+="/sbin/udhcpc -i %E{INTERFACE}"
あとは
udevadm control --reload-rules
すれば完了。
自動でeth1が上がってくるためにこうしたけどなにか間違ってるかもしれない?
たまに繋がらないことがあるのはアダプタが悪いのか設定が悪いのか…
これでWiFi関連をいじくるときにしくじってログオンできないことが無くなりそうなのでとりあえずいいかな。
2024年12月8日日曜日
Buildrootでiwdを使ってWiFiに自動で接続する。
Luckfox Pico Mini BでRalink RT3070やRealtek RTL8821CUを使ってWiFiに接続できたのは良いんだけど、起動時や途中で抜き差ししても自動で接続させたい。
カーネルモジュールの読み込みはudevでうまく動いたんだけど、ifupdown-scriptsのほうが組み込まれているためか、interfacesでallow-hotplugが使えなかったので他の手法を試してみることに。
wpa_supplicantの代替ということで、iwd (iNet Wireless Daemon)を試してみた。これはWiFiが切れたりしても自動で再接続してくれるし、hostapdいらずでAPモードも使えて便利そう。
Luckfox Pico Mini Bはフラッシュメモリが128MBなんだけど、色々入れすぎて容量がいっぱいになってしまったのでこの前入れたwpa_supplicant、iw、wireless toolsは削除して、iwdだけにしてみた。iwdはカーネルのCrypto APIの関係でカーネル側も変更が必要だった。
Ubuntu上のluckfoxのSDKで
cd $HOME/luckfox-pico/sysdrv/source/kernel cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config make ARCH=arm menuconfig
メニューから選択してくのは面倒なので一旦Saveして閉じて
このディレクトリにある.configを開いて下記を全部yにする。
CONFIG_CRYPTO_USER CONFIG_CRYPTO_USER_API_HASH CONFIG_CRYPTO_USER_API_SKCIPHER CONFIG_KEY_DH_OPERATIONS CONFIG_CRYPTO_ECB CONFIG_CRYPTO_MD5 CONFIG_CRYPTO_CBC CONFIG_CRYPTO_SHA256 CONFIG_CRYPTO_AES CONFIG_CRYPTO_DES CONFIG_CRYPTO_CMAC CONFIG_CRYPTO_HMAC CONFIG_CRYPTO_SHA512 CONFIG_CRYPTO_SHA1 CONFIG_RFKILL
WiFi関連のためにmにしてあとから読み込んでいたのもあるんだけどinsmodしても認識されなかったのでyにして組み込んでしまった。
make ARCH=arm savedefconfig cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig
savedefconfigして次はアプリケーションの設定。
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
ここからwpa_supplicant、iw、wireless toolsのチェックを外して、iwdのチェックをいれる。
make savedefconfig make clean make
make cleanをしてしまったのでここで25分ぐらいかかった。make cleanしないとアプリケーションが消えないから容量が…
cd $HOME/luckfox-pico ./build.sh lunch ./build.sh
あとはビルドして書き込み。
luckfoxを起動したらluckfox側での作業。
udevでWiFiドングルが自動で読み込まれるようにまずはシェルスクリプトを編集する。
/oem/usr/koの中にinsmod_wifi.shがあったのでこれを書き換えた。ない場合は作ればいいかも。実行権限つけるの忘れずに。
#!/bin/sh cmd=$(realpath $0) _DIR=$(dirname $cmd) cd $_DIR export PATH=$PATH:/oem/usr/ko/ #RTL8821CU if [ $1 = "8821cu" ]; then insmod cfg80211.ko insmod libarc4.ko insmod mac80211.ko insmod rtw88_core.ko insmod rtw88_usb.ko insmod rtw88_8821c.ko insmod rtw88_8821cu.ko insmod ctr.ko insmod ccm.ko fi if [ $1 = "r-8821cu" ]; then rmmod rtw88_8821cu.ko rmmod rtw88_8821c.ko rmmod rtw88_usb.ko rmmod rtw88_core.ko fi #RT2800USB if [ $1 = "rt2800usb" ]; then insmod cfg80211.ko insmod libarc4.ko insmod mac80211.ko insmod rt2x00lib.ko insmod rt2x00usb.ko insmod crc-ccitt.ko insmod rt2800lib.ko insmod rt2800usb.ko insmod ctr.ko insmod ccm.ko fi if [ $1 = "r-rt2800usb" ]; then rmmod rt2800usb.ko rmmod rt2800lib.ko rmmod crc-ccitt.ko rmmod rt2x00usb.ko rmmod rt2x00lib.ko fi #No Wifi /sbin/lsmod | grep -e "8821cu" -e "rt2800" if [ $? -eq 1 ]; then rmmod ccm.ko rmmod ctr.ko rmmod mac80211.ko rmmod libarc4.ko rmmod cfg80211.ko fi
この前組み込んだRTL8821CUとRT2800USBだけにして起動オプションで選べるようにしておいた。
お次はudevのruleを作成。/lib/udev/rules.dの中に99-usb-wifi.rulesを作成して
# Realtek 8211CU Wifi AC USB ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p 1a2b" ATTR{idVendor}=="0bda", ATTR{idProduct}=="c811", RUN+="/oem/usr/ko/insmod_wifi.sh 8821cu" ATTR{idVendor}=="0bda", ATTR{idProduct}=="c820", RUN+="/oem/usr/ko/insmod_wifi.sh 8821cu" #SUBSYSTEM=="net", ACTION=="remove", ENV{ID_USB_DRIVER}=="rtw_8821cu", RUN+="/oem/usr/ko/insmod_wifi.sh r-8821cu" # RT2800USB Wifi ATTR{idVendor}=="0411", ATTR{idProduct}=="01ee", RUN+="/oem/usr/ko/insmod_wifi.sh rt2800usb" ATTR{idVendor}=="0411", ATTR{idProduct}=="015d", RUN+="/oem/usr/ko/insmod_wifi.sh rt2800usb" ATTR{idVendor}=="0411", ATTR{idProduct}=="0148", RUN+="/oem/usr/ko/insmod_wifi.sh rt2800usb" #SUBSYSTEM=="net", ACTION=="remove", ENV{ID_USB_DRIVER}=="rt2800usb", RUN+="/oem/usr/ko/insmod_wifi.sh r-rt2800usb" #SUBSYSTEM=="net", ACTION=="add", ENV{DEVTYPE}=="wlan", RUN+="/etc/init.d/S40iwd stop", RUN+="/etc/init.d/S40iwd start" SUBSYSTEM=="net", ACTION=="add", ENV{DEVTYPE}=="wlan", RUN+="/etc/init.d/S40iwd start"
rt2800usbのドングルはVID PIDが色々あるのでとりあえず持っているWLI-UC-GNとWLI-UC-GNM2TとWLI-UC-G300HPのを追加しておいた。
コメントアウトしてるところはカーネルモジュールをrmmodしようとしたんだけどrt2800usbのほうがiwdでrfkillを入れたからなのか、指したときにremoveもされるのでうまく行かなくなってしまった(wlanの番号がどんどん増えてくし)
とりあえず動くのでいいか…
udevadm control --reload-rules
をやってruleを読み込んだらWiFiドングルを指してみるとip link showするとwlanが増えてるはず。
次にiwdの動作確認。/usr/libexec/iwdを実行してみてカーネルに組み込まれている暗号化モジュールが足りないって言われなければOK。
再起動してみたら今度はudevの起動順番が早すぎてusb_modeswitchは動いてるんだけどカーネルモジュールが読み込まれていない。USB WiFiを抜き差ししてみるとちゃんと繋がるんだけどね。
ということで起動時にもう一回udevadm triggerしてみる
/etc/init.d/S99xを作って
#!/bin/sh sleep 1 /bin/udevadm trigger
としてchmod 755 /etc/init.d/S99xしておく。
これで起動時にWiFiが認識されるようになった。
最後にWiFiに接続してみる。
iwctlを実行して
wsc list station wlan0 get-networks station wifiカード名 connect アクセスポイント名
みたいな感じで簡単にアクセスポイントに接続できる。途中でWiFiアダプタを抜き差ししても自動で復帰してくれた。wpa_supplicantより断然楽かも。
WiFiが使えるようになったのでようやくLANケーブルを外してハンドリングが良くなった。
モバイルバッテリーに繋いでメカナムラジコンの上に乗せてustreamerでFPVもどきをやってみたけど広角レンズとか魚眼レンズ付けないと操作難しいかも。
2024年12月7日土曜日
Luckfox Picoで11ac無線LAN子機を使ってみた。
先日購入した11acなWiFiドングル、WD-4510ACをLuckfoxのbuildrootで使えるようにカーネルモジュールを組み込んでみた。最初はTOKAIZ TWA-001を使おうと思ったけどusb_modeswitchがLuckfoxのbuildrootで簡単に有効にできそうだったので、Driver FreeタイプのWiFiドングルでも大丈夫そう。どっちも同じカーネルモジュールで行けるのでWD-4510ACができればTWA-001も簡単に動きそうだし。
RTL8821CUのカーネルモジュールは何種類かあったんだけど、ラズパイ3Bに組み込んでみたやつは途中まではビルドできるんだけど、cfg80211関連のエラーが出て進まなかったのでrtw88を使ってみた。
実はrtw88はLuckfox用のカーネルの中に組み込まれているんだけどrtl8821cuが含まれていないバージョンだった。なので新しいバージョンに置き換えてビルドしてみることに。
Ubuntu上でLuckfoxのSDKの中のファイルを差し替える。
$HOME/luckfox-pico/sysdrv/source/kernel/drivers/net/wireless/realtek/
の中のrtl88を適当な名前にリネームして、最新のrtw88を持ってくる。
そんでもってKconfigとMakefileを最新のLinuxカーネルのものに差し替える。
https://github.com/torvalds/linux/raw/refs/heads/master/drivers/net/wireless/realtek/rtw88/Makefile https://github.com/torvalds/linux/raw/refs/heads/master/drivers/net/wireless/realtek/rtw88/Kconfig
からダウンロードした。
cd $HOME/luckfox-pico/sysdrv/source/kernel cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config make ARCH=arm menuconfig
menuconfigでrtw88を有効にしてrtl8821cuを有効にする。
このバージョンなら8821CUが選べる。表記は8821CUだけど8811CUも使えるようになる。あとはWirelessのEnable LED triggersを入れておくとmac80211からステータスLEDを制御してくれる。rtw88はこれを有効にしないとLEDが点灯しないので有効にした。make ARCH=arm savedefconfig cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
ここからusb_modeswitchを有効にする。
wpa_supplicantとiwとwireless toolsは前回有効にしているのでそのままでOK。usb_modeswitch_dataもいれると自動でudevを設定してくれるらしいけど今回は入れずに手動でRealtekのDriver Freeだけ設定してみることに。
make savedefconfig make
ビルド
cd $HOME/luckfox-pico ./build.sh lunch ./build.sh
Luckfoxに書き込み。
Luckfoxを起動してUSBをhostモードにしてOTGアダプタを繋いで再起動してlsusbすると
[root@luckfox ko]# lsusb Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 015: ID 0bda:1a2b Bus 002 Device 001: ID 1d6b:0003
となる。これはCDROMデバイスとして認識するID。
usb_modeswitch -KW -v 0bda -p 1a2b
すると
Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 016: ID 0bda:c820 Bus 002 Device 001: ID 1d6b:0003
となってRTL8821CUとして認識する。
cd /oem/usr/ko insmod cfg80211.ko insmod libarc4.ko insmod mac80211.ko insmod rtw88_core.ko insmod rtw88_usb.ko insmod rtw88_8821c.ko insmod rtw88_8821cu.ko insmod ctr.ko insmod ccm.ko insmod libaes.ko insmod aes_generic.ko
として先程組み込んだカーネルモジュールを読み込む。
dmesgすると
[ 450.921679] rtw_8821cu 1-1:1.2: Direct firmware load for rtw88/rtw8821c_fw.bin failed with error -2 [ 450.921716] rtw_8821cu 1-1:1.2: failed to request firmware [ 450.929119] rtw_8821cu 1-1:1.2: failed to load firmware [ 450.929143] rtw_8821cu 1-1:1.2: failed to setup chip efuse info [ 450.929153] rtw_8821cu 1-1:1.2: failed to setup chip information [ 450.929434] rtw_8821cu: probe of 1-1:1.2 failed with error -22 [ 450.929561] usbcore: registered new interface driver rtw_8821cu
ファームウェアいれるの忘れてた。
luckfoxの/lib/firmwareの中にrtw88というディレクトリを作成してrtw8821c_fw.binを入れる。firmwareはrtw88のfirmwareフォルダの中に入っている。
WiFiドングルを指し直してusb_modeswitchをやり直してやると
[ 552.795533] rtw_8821cu 1-1:1.2: Firmware version 24.5.0, H2C version 12
[ 552.936411] usbcore: registered new interface driver rtw_8821cu
ip link showしてみるとwlan0が増えてる。
認識した!
あとはrt3070のときと同様wpa_supplicantの設定をやればWiFiにつながった。
ちなみにLuckfox Pico Miniと合わせて全体の消費電流は80~100mAぐらいだった。
これでrtw88の最新版を有効にすることができたので今回はRTL8821CUを使えるようにできた。流石にRT3070のUSB WiFiアダプタは今どき売ってないだろうし。RTL8812BUを有効にしてビルドすればRTL8812BUなWI-U2-866DM/Nが使えたりするかもしれない。
Bluetoothを使わないのであればTWA-001(RTL8811CU)で十分かも。ちなみにTWA-001もちゃんと使えました。usb_modeswitchがいらないので便利。
次は8821CUのBluetoothを使えるようにしてみたい。
2024年12月6日金曜日
Luckfox PicoでµStreamerを使ってみた。
LuckfoxのbuildrootでUVCなWebカメラを接続してustreamerが動くのか試してみた。Webカメラ側でハードウェアでMJPEGに変換したのをそのままブラウザで表示させるぐらいならメモリ64MBでも行けそう。改造したメカナムラジコンもESP32からLuckfoxにすればカメラを見ながら操作できたりするかも?
WiFiにつながるようにしたときにUSB hostは動いていたので、OTGアダプタにUSBハブを繋いでWiFiとLogicool C270を接続してみた。まさかのUSB3.0+USB2.0ハブとして売られていたハブがUSB1.1なMW7211Aが使われていたので今回はBuffaloのUSB2.0ハブに交換した。mkdir $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/ustreamer cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/ustreamer wget https://git.busybox.net/buildroot/plain/package/ustreamer/Config.in wget https://git.busybox.net/buildroot/plain/package/ustreamer/ustreamer.hash wget https://git.busybox.net/buildroot/plain/package/ustreamer/ustreamer.mkとしてustreamer用のパッケージ情報をダウンロード。
$HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/package/の中のConfig.inをテキストエディタで開いて
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
make savedefconfig make cd $HOME/luckfox-pico ./build.sh lunch
でLuckfox Pico Mini Bの内蔵フラッシュを選択したいので、2-1-0の順番で選ぶ。
./build.sh
でビルドする。
これでluckfoxに書き込みして
ustreamerって実行すれば動くはずだったんだけど
Segmentation fault (core dumped)が出てしまって起動しない。
仕方ないのでgdbで調べてみると
us_build_short_options()
で落ちてることがわかった。どうやら起動オプションのショートオプションの方の処理で落ちてるっぽい。ということでここをコメントアウトしてビルドしてみることに。
$HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/output/build/ustreamer-6.16/src/ustreamer
// us_build_short_options(_LONG_OPTS, short_opts, 128);
しかしショートオプション(-hみたいなやつ)が使えなくなったのでロングネームオプションで起動してみる。
ustreamer --device=/dev/video0 --host=0.0.0.0 --port=80 --format MJPEG --resolution 1280x720 --desired-fps 15
2024年12月2日月曜日
10Gtek WD-4510ACをラズパイで使ってみた。
ラズパイ3BでTOKAIZ TWA-001を使って100Base-TなLANよりも2倍ぐらいのスピードでデータ転送できていたので、Luckfox用にも買おうかなと思っていたらBluetooth付きのアダプタがあったのでポチってみた。10Gtek WD-4510ACってやつ。技適にも対応しているらしい。(214-118694)
本体には品番の刻印が入っているだけっぽい。技適番号が書かれたシールがパッケージに貼られていたのでラズパイPicoみたいにパッケージも取っておかないといけないかも。ドライバーフリーらしい?
BT+AC600って書いてあるけど、詳しくはBluetooth 4.2 + 11ac 433Mbps(5Ghz) or 11n 150Mbps(2.4GHz)っぽい。おそらくWiFi部分はRTL8811CUと同じなのでWiFiで2.4GHzと5GHzは同時に使えないんだろうな…
このドライバーフリー、届いてから気がついたけどLinuxで使うには結構曲者らしい。接続するとCDROMデバイスとして認識してドライバをインストールさせるタイプのデバイス…
ちなみにチップはRTL8821CUらしいので、無線LANデバイスとしてはRTL8811CUなTWA-001と同じカーネルモジュールが使用できる。RTL8811CUにBluetoothがついただけ?
USBで接続するとCD-ROMデバイスとして認識するのでEjectするとRTL8821CUになるので、
usb_modeswitchとかで自動的に切り替えたりしないといけないかなぁと思いつつTWA-001用にカーネルモジュールを組み込んだラズパイ3Bに刺してみたら自動でRTL8821CUとして認識した。[509911.795098] usb 1-1.3: new high-speed USB device number 7 using dwc_otg [509911.925938] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=1a2b, bcdDevice= 2.00 [509911.925963] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [509911.925971] usb 1-1.3: Product: DISK [509911.925977] usb 1-1.3: Manufacturer: Realtek [509911.926999] usb-storage 1-1.3:1.0: USB Mass Storage device detected [509911.928186] scsi host0: usb-storage 1-1.3:1.0 [509913.007488] scsi 0:0:0:0: CD-ROM Realtek Driver Storage 1.00 PQ: 0 ANSI: 0 CCS [509939.401813] usb 1-1.3: USB disconnect, device number 7 [509939.498534] usbcore: registered new interface driver uas [509939.794817] usb 1-1.3: new high-speed USB device number 8 using dwc_otg [509939.927602] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=c820, bcdDevice= 2.00 [509939.927627] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [509939.927635] usb 1-1.3: Product: 802.11ac NIC [509939.927641] usb 1-1.3: Manufacturer: Realtek [509939.927647] usb 1-1.3: SerialNumber: 123456 [509943.674673] Bluetooth: hci1: RTL: examining hci_ver=08 hci_rev=000c lmp_ver=08 lmp_subver=8821 [509943.674933] usbcore: registered new interface driver btusb [509943.676880] Bluetooth: hci1: RTL: rom_version status=0 version=1 [509943.676946] Bluetooth: hci1: RTL: loading rtl_bt/rtl8821c_fw.bin [509944.208529] Bluetooth: hci1: RTL: loading rtl_bt/rtl8821c_config.bin [509944.344123] Bluetooth: hci1: RTL: cfg_sz 10, total sz 34926 [509946.052897] Bluetooth: hci1: RTL: fw version 0x75b8f098 [509949.472147] IPv6: ADDRCONF(NETDEV_CHANGE): wlan2: link becomes ready [509949.644846] Bluetooth: hci1: Opcode 0x c23 failed: -110 [509949.644865] Bluetooth: hci1: command 0x0c23 tx timeout [509951.241321] Bluetooth: hci1: unexpected event for opcode 0x0c23 [509951.270304] Bluetooth: hci1: RTL: examining hci_ver=08 hci_rev=75b8 lmp_ver=08 lmp_subver=f098 [509952.342776] Bluetooth: hci1: RTL: examining hci_ver=08 hci_rev=000c lmp_ver=08 lmp_subver=8821 [509952.511430] Bluetooth: hci1: RTL: rom_version status=0 version=1 [509952.511457] Bluetooth: hci1: RTL: loading rtl_bt/rtl8821c_fw.bin [509952.511682] Bluetooth: hci1: RTL: loading rtl_bt/rtl8821c_config.bin [509952.511862] Bluetooth: hci1: RTL: cfg_sz 10, total sz 34926
mesgすると一回CD-ROMデバイスとして認識されているのでカーネルモジュールの方で対策されてるのかな?とりあえずTWA-001のときのようにカーネルモジュールをインストールしておけばラズパイでも普通に使えることがわかった。
接続されると青色LEDがアクティビティーインジケーターになってるようだ。
ちなみに8821cu自体はConcurrent Modeに対応しているのでカーネルモジュールが対応していればSTAとAPモードを同時に使えたりするらしい。しかしデフォルトで組み込まれてるカーネルモジュールだと"valid interface combinations"が出てこなかったので無効になってるっぽい。
luckfoxに差し込んだ状態だとCDROMデバイスのカーネルモジュールすら組み込まれていないので0bda:1a2bなデバイスとしてしか認識できなかった。ラズパイと同じカーネルモジュールを組み込めば勝手にやってくれるのかなぁ?
とりあえずラズパイ用に使用してluckfoxのbuildrootでTWA-001を動かせないか頑張ってみようかな。
追記:動きました。
2024年12月1日日曜日
Luckfox Pico Mini B用にOTGアダプタを買ってみた。
LuckfoxでUSB host機能を使うために給電対応のOTGアダプタを買ってみた。さすがにICテストクリップで給電するのも危ないような気がしたし…
ついでにUSBハブも購入してみた。
USBハブとOTGアダプタでLuckfox Pico Miniより大きくなってしまうけど。
装着すると明らかにハブ+OTGアダプタの方がでかいけど、給電はテストプローブから比べるとすごく安心感がある。書き込みのときは差し替えすればいいだけだし。ケーブルタイプと一体型で迷ったけど意外と一体型もありかもしれない。
取り合えずこれでUSB Type CケーブルでUSBデバイスもLuckfox本体も同時に給電できているのでUSBハブにいろいろUSBデバイスを繋いでお試しできそう。
カーネルモジュールでEnableにできるデバイスはWiFiみたいに簡単に追加できるので色々試してみたいな。今までテストプローブ外してUSBで書き込みが面倒だったのでこれで少しはSDKでいじるのが楽になりそう。
ちなみにUSBハブの方はラズパイZero W用に買って改造したやつと同じ形状をしているけど、USB3.0が1ポートついていたり、VIDとPIDが違うし(0a05:7211)別物っぽい?
開けてみるとICにはMW7211Aって書いてあるので調べてみるとUSB1.1じゃん…だめじゃん…
2024年11月30日土曜日
Luckfox Pico Mini BでmDNSを使ってみた。
LuckfoxでWiFiを使えるようにしたのはいいんだけど、いちいちIPアドレスをルーターの設定画面で調べるのが面倒なのでmDNSを使えるようにしてみた。WiFiだとUSBドングル側のMACアドレスなのでIPアドレスは毎回同じのが割り振られているんだけど、LANとNDISはビルドするたびにMACアドレスが変変わるのでIPアドレスも変わるんだよね…
mDNSはavahi-daemonというパッケージを追加すれば使えそうだったので追加してみる。
前回同様Ubuntu上のSDKでの作業になる。
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
Target packageのNetworking applicationsでavahiを有効にする。
avahiを有効にしたらIPv4LLとmDNSを有効にする。IPv4LLはWindowsで言う自動プライベートアドレスを使えるようにできる(DHCPでアドレス割り振られないとき)のでついでに有効にしておいた。
あとはいつもどおりSaveして、
make savedefconfig make cd $HOME/luckfox-pico ./build.sh lunch
でLuckfox Pico Mini Bの内蔵フラッシュを選択したいので、2-1-0の順番で選ぶ。
./build.sh
でビルドする。
あとはWinSCPでWindows側にファームウェアを転送して書き込むだけ。
このままLANに接続するとデフォルトでhostnameがluckfoxになっているのでluckfox.localで接続することができる。
ためしにコマンドプロンプトからssh root@luckfox.localするとログオンすることができた。
しかしビルドするたびにssh-keygen -R luckfox.localしないといけないけど…
とりあえずこれでWiFiで接続しても、LANで接続してもいちいちルーターの設定画面でIPアドレスを探さなくても良くなったので便利。
2024年11月23日土曜日
Luckfox Pico Mini BをWiFiに繋いでみる。
前回Luckfox PicoにLANケーブルを直結してとりあえずLANで接続できるようになったので、USBホスト機能でUSBデバイスを使ってみることに。
電源はLuckfox Pico MiniのVBUSとGNDのピンヘッダを使って5Vを入力した。USBはダイソーのType C OTGアダプタを使用。ピンヘッダのVBUSに5Vを入れるとUSB側にも5Vが流れるのでデバイスにもそのまま電源を供給できる。USBの切り替えはbuildrootを起動してluckfox-configコマンドから設定できる。
LAN経由でLuckfoxにSSH接続してluckfox-configと実行。USBでのNDISが使えなくなるので、シリアルコンソールかLANから設定を変更したほうが良い。USBの設定をhostに変更して再起動すればUSBのモードがホストに変更される。
ちなみにPWMとかのデバイスもこのluckfox-configから有効化できるっぽい。デフォルトではGPIO以外無効になっているので使うデバイスは有効にするといいかも。デバイスファイルが結構消えたなとか思ったら自分でビルドしたbuildrootでは全部オフになってた。
早速USBデバイスを指してみる。USB WiFiが使えないかな?ということでrt3070なUSBドングル(Buffalo WLI-UC-GNM2T)があったので早速指してみた。
lsusbしてみる
[root@luckfox ko]# lsusb Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 007: ID 0411:01ee Bus 002 Device 001: ID 1d6b:0003
一応0411:01eeとして認識しているけどdmesgではWiFiモジュールがロードされてない感じ。
ということでカーネルモジュールを追加してみることに。ここからは前回同様にVM上のUbuntuマシンでの作業になる。
カーネルの設定は公式ページを参考にしてカーネルのmenuconfigからrt2800usbを有効にしてカーネルをビルドし直す。
cd $HOME/luckfox-pico/sysdrv/source/kernel cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config make ARCH=arm menuconfig
Device Drivers > Network device support > Wireless LANのRalink devicesでスペースキーを押して有効に。そして下のRalink driver supportもスペースキーを押してMに。
Rockchip Wireless LAN supportもデフォルトでMになっていた。これでCFG80211とMAC80211が有効になってるっぽい。
あとはsaveでファイル名そのままで保存する。
make ARCH=arm savedefconfig cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig
これでカーネルのビルドの設定が終わったのでお次はWiFi関連のツールとRalink rt3070用のfirmwareを有効にする。
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
でTarget packagesのNetworking applicationsからwpa_supplicantとiwとwireless toolsを有効にする。
さらにTarget packages→ Hardware handling→ Firmware→ WiFi firmwareでRalink rt27xx/rt28xx/rt30xxを有効にする。そしたらSaveして画面を閉じる。
make savedefconfig make
でアプリケーションをクロスコンパイル。
あとは
cd $HOME/luckfox-pico ./build.sh lunch
でLuckfox Pico Mini Bの内蔵フラッシュを選択したいので、2-1-0の順番で選ぶ。
./build.sh
でビルドする。ビルドが終わったら前回同様にluckfoxに書き込む。これでUbuntu側での作業は終了。
LuckfoxにLANからSSHに接続して、USBの設定がデフォルトに戻っているのでhostに設定して再起動。
またLuckfoxにSSHで接続して、下記のコマンドをLuckfox側で実行。
cd /oem/usr/ko insmod cfg80211.ko insmod libarc4.ko insmod mac80211.ko insmod rt2x00lib.ko insmod rt2x00usb.ko insmod crc-ccitt.ko insmod rt2800lib.ko insmod rt2800usb.ko insmod ctr.ko insmod ccm.ko insmod libaes.ko insmod aes_generic.ko
このようにWiFiに必要なモジュールとrt2800usbモジュールを読み込んでおく。カーネルモジュールによっては必要なモジュールを最初に読み込んでおかないといけないので順番に注意。順番バラバラに読み込んでいたら"unknown symbol in module, or unknown parameter"っていうエラーが出て困った…
更に下の4つはWiFiのセキュリティー認証とかで必要なモジュールで、これがないとAPに繋がっても一瞬でdeauthenticatingされてしまって(Reason: 1=UNSPECIFIED)ってなんだよ!ってなる。
これでdmesgをすると
[ 20.604498] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 20.633333] cfg80211: Problem loading in-kernel X.509 certificate (-22) [ 20.637840] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2 [ 20.637873] cfg80211: failed to load regulatory.db [ 45.084413] usb 1-1: reset high-speed USB device number 2 using xhci-hcd [ 45.273651] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected [ 45.289515] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected [ 45.289882] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' [ 45.292707] usbcore: registered new interface driver rt2800usb
rt3070チップセットを認識して、rt2800usbがロードされてる!
WiFiのネットワークデバイス名を知るために
ip link show
をしてみたらwlan0が増えていた。
次にwpa_supplicantの設定。
nano /etc/wpa_supplicant.conf
で設定ファイルを開いて、network=のところを修正。
network={ ssid="WiFiのSSID名" psk="WiFiのパスワード" key_mgmt=WPA-PSK }
SSIDとパスワードはルーターの設定に合わせる。pskを直打ちが気になるようならwpa_supplicantのビルド設定をしたときに、wpa_passphraseも選んでおいて変換するといいかも。
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf udhcpc -i wlan0
dmesgしてもちゃんとファームウェア(rt2870.bin)がロードされてそう。
これでifconfigをしてみると…
WiFiにつながってる!
とりあえず今回はrt2800usbを使って昔Xlink Kai向けに500円で投げ売りされていたrt3070なWifiドングルでWifiに繋いでみた。今購入するならrtlwifiが使えるっぽいのでrtl8192cuが搭載されているWDC-300SU2SBKとかなら行けるかも?
追記:WD-4510ACが動きました。
ちなみにLuckfox Pico MiniとWLI-UC-GNM2T(RT chipset 3070, rev 0200)の組み合わせでWiFiに繋いだ状態での消費電力は200mAぐらい。WLI-UC-GN(RT chipset 3070, rev 0201)とだと130mA。WLI-UC-G300HP(RT chipset 2872, rev 0202)だと300Mbpsでハイパワーということもあり260mAぐらいだった。
あとは自動でカーネルモジュールを読み込めるようにしないとな。
2024年11月17日日曜日
Luckfox Pico Mini BをLANに繋いでみた。
昨日、Luckfox Pico Mini Bの動作確認ができたので今回は早速内蔵のEthernetを使用してLANに繋いでみた。本当は純正のオプションのようにパルスコイル内蔵のRJ45コネクタを使わないといけないんだけどそのまま繋いでもとりあえずつながるらしいので試してみた。純正オプションだとHR911105Aを使ってるっぽい。保護用のダイオードとかも入ってそう。
前にRaspberry Pi Zeroで監視カメラを作ったときにカットしたLANケーブルが残っていたのでこれを使ってみることに。rv1103に内蔵されてるEthernet PHYは100BASE-Tなので使用するのは4本。
TXP、TXN、RXP、RXNにそれぞれケーブルをつなぐんだけど、TXがオレンジの対、RXが緑色の対になってて、PがPositiveで白線が入ってるほう、NがNegativeでそれぞれの色のほうを接続する。2024年11月16日土曜日
Luckfox Pico Mini Bを買ってみた。
AliexpressのセールでLuckfox Picoが安くなっていたのでポチってみた。rv1103搭載で128MB FLASHがついてるLuckfox Pico Mini Bで1075円だった。Choiceを使って他にも部品を購入して1500円ぐらいに調整したので送料は無料だったのに5日で届くとは…速い!
Rockchip rv1103側にはmicroSDカードスロットが搭載されている。こちらの面には128MBのFlashと書き込みボタンとカメラ用のCFIインターフェースがついてる。このサイズでLinuxが動くとはすごいな…
今回はとりあえず動作確認。一応イーサーネットポートも付いていて、オプションでLAN用パルストランス内蔵のRJ45ポートのアダプタも売っているよう。ということはパルストランス内蔵のRJ45ポートさえ買ってきて繋げばLANに繋げられる?
そしてLuckfoxのチュートリアルは結構充実していて公式ページを見ると一通りは使えそうな感じ。buildrootのビルドとかもやってみたいな。
2024年11月1日金曜日
DualSenseをホールエフェクトセンサ化してみた。
友人のPS5のコントローラにドリフト現象が出てきたらしく、とりあえず掃除して接点復活剤を塗って使っていたらしいんだけど実はホールエフェクトセンサを入手していたらしいので交換してみた。
本当はホットエアとかあるといいんだけど、今回はハンダゴテとハンダ吸い取り器だけでやってみた。はんだごてはFX600にC2の先端をつけてある。吸い取り器は手動タイプだけど大容量タイプのやつを使っている。
まずは分解。黒いカバーとR1、L1ボタンを外すとネジが出てくるので4箇所取り外す。手前側に爪がある。トリガーに引っかかり気味だけど結構簡単にカバーが空いた。ハンダゴテだけでスティックを取り外すためのジグも売っているらしい。
ちゃんとハンダを吸い取っておかないとスティックがぴったりなので入りにくくなるので注意かも。吸い取ったあとはパーツクリーナーを綿棒につけて掃除しておいた。
スティックもついてて純正より少し長め。摺動部がメタルになっているのでスムーズに動きそう。先ほどスティックを外した基板に搭載してはんだ付けする。温度設定は420℃がちょうどよかった。