2024年12月30日月曜日

USBツインチャージャーをUSBハブに改造してみた

 100円ショップのセリアに行ったらUSBツインチャージャーがまだ売っていたので買ってきた。USBのメス端子取り用に前に買った記憶が…

パッケージは昔と変わって袋になっていた。
パソコン専用らしい。2ポートUSB充電器とかも売っているのに未だに使う人いるのかね…
充電遅いだろうし。
基板が紙基板じゃなくなくなっていて、しかも両面になってる。蓋は接着されてないのでカッターみたいなものを隙間に入れて少しずつ開ければ簡単に開けることができる。
メス側はデータ線の部分に分圧抵抗が入っていて、充電専用になっていた。

こんな形状でUSB2.0ハブも出ていたり、更にはOTG対応のやつも売っていたりするのでこの前購入したSL2.1Aのあまりを利用してUSBハブ化してみることに。

まずは分圧抵抗8個全部取っ払う。
そんでもってSL2.1Aにクリスタルを直結して、さらには10uFコンデンサを3つ直接つけてしまった。
あとは各端子に前回の回路図同様にポリウレタン銅線で配線した。
空中配線なんだけど各USBの配線はD+とD-を近づけて配線するようにした。逆にポートごとには離したほうがいいかも?

とりあえずこれで更に小さなUSBハブが作れたのでLuckfox用に使おうと思う。TypeC対応にしてOTGもつければもっとLuckfoxをスマートに使えるようになりそう。

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と同じなんだけど、右側が結構違うのでパターンカットとかジャンパーしないといけないのが面倒かな。

クロックはそのままICに直接ハンダしてしまった。
使わないピンはカプトンテープを基板側に貼り付けて対応。USBの入力のパターンは一個ずらさないといけなかったので適当な導線の1本だけ取り出してハンダした。

一応10uFは秋月の2012 6.3V 10uFが残っていたので全部乗せ換えておいた。電源の保護用と思われる抵抗(4.7Ω)もそのまま活用できた。

USBで繋いでみると無事認識。VID_1A40&PID_0101ってなってるので前回購入したUSB2.0バージョンといっしょになった。これでHigh-Speedが使えるようになったのでようやくLuckfoxで使うことができる!(WiFiもUSBドングルを使っているのでさすがにUSB1.1は…

ついでにUSBポートのシールド部分も全部ハンダされてなかったので追加でハンダして完成。これで多少は頑丈になったかな。

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ケーブルの配色で作りたい人は前回の写真を参考にするか、付属のケーブル通りに配線すれば良い。

とりあえずWindowsで動作確認。デバイスドライバはZadigでインストールした。BonDriver_FSUSB2Nで無事うごいた。あとはラズパイの録画環境に追加してBonDriver_Mirakurunで動かそうかな。

消費電力を測定してみたらUSBで指した瞬間は40mA、テレビ視聴中は170mA、TvTestを終了すると10mAまで下がった。一回起動してから終了するとスタンバイモードにでもなるのかな?この価格帯ではやはりCATVパススルー環境ではかなり感度が良いのでMX板一択だなぁ。

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
こんな感じでGPIOを有効にして、出力に変更して、HIGHを出力するとLEDが点灯した。一旦出力に消灯する場合は
echo 0 > /sys/class/gpio/gpio34/value
とすればLEDが消灯する。
シェルスクリプト内に入れて実行すれば動作確認用LEDとして使用できるので、とりあえず起動時にudevadm triggerをするスクリプトが動いてるかどうか確認するために使用してみた。やっぱりLEDが点灯するとわかりやすいので便利。
他のピンもluckfox-configでペリフェラルに設定していなければこんな感じで普通のGPIOとして使用できる。

次は入力を試してみる。
Luckfox Pico MiniにはUSBで書き込みするためのBOOTボタンが一つ付いてるのでそれを使えないかどうか試してみた。起動時にボタンを押すと書き込みモードで起動するけど、起動したあとは何も使われていないのでもったいないし。
回路図がダウンロードできるのでLuckfox Pico Miniの回路図を確認するとBootボタンはRecoveryとして表記されていて、GPIO4_C0_z(SARADC_IN0)につながってるっぽい。先程の計算式だとGPIO4_C0は"バンク4 x 32 + (グループ2 x 8 + 0)"でGPIO144としてBuildroot上で使用できるはず…
echo 144 > /sys/class/gpio/export
cat /sys/class/gpio/gpio144/value
としてみると1が帰ってきた。確かに回路図上1.8Vにプルアップされているのでボタンを押していない状態は1になるはず。デフォルトでinだったのでdirectionは変更していない。
ボタンを押したまま、もう一度
cat /sys/class/gpio/gpio144/value
してみると0が帰ってきた。ちゃんとボタンが使えてる!

BOOTボタンをシャットダウンボタンとして使ってみた。

#!/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

これをpower.shとして保存して"chmod 755 power.sh"して実行可能にする。とりあえず動作することを確認。自動起動させてからミスると永遠にシャットダウンするスクリプトになりかねないので注意。

自動起動させるためにこの前WiFiに繋いだときに作った/etc/init.d/S99xの中にこのシェルスクリプトのパスを追加した。
これで常時ボタンの状態をポーリングして押されたらhaltしてくれる。

とりあえずBootボタンをシャットダウンボタンとして使えるようにできた。

Pythonのほうでもperiphery使ってGPIOをポーリングでは使えたんだけど、メモリ使用量がシェルスクリプトの3倍ぐらいだったので今回はシェルスクリプトにしてみた。Eventが使えるとまた違うのかもしれないけどpollしか使えなかったので…

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にしていきたいな。