Arduinoと接続して使うのに安価なUSB-HUBを探していると、3ポートUSB-HUB+SDカードリーダ付きの製品を発見しました。先人のレビューを見ている限りは動くようですが、世の中にはUSB-HUBと称してUSBの配線をそのまま分配しただけのものもあるようです。もしかして1ポートしか認識しなかったりするかもしれません。動けば儲けもの、ということで購入してみました。
レビュー製品(USB-HUB + SDカードリーダ)
モノはUSBポートx3にSDカードリーダ機能が付いているものです。お値段はAliexpressで送料込み約300円でした(私はセール中に235円で購入)。元々は100均ショップで安いUSB-HUBを探したものの発見出来ず、その代替として購入する運びとなりました。
ちなみに製品の到着はAliexpressで注文してから約2週間でした。
- 2 in1 Combo Super Speed USB 2.0 3 Port Splitter HUB+TF SD Card Reader LED Display Simple Type Up To 480Mbps For Windows For Mac
(https://ja.aliexpress.com/item/2-in1-Combo-Super-Speed-USB-2-0-3-Port-Splitter-HUB-TF-SD-Card-Reader/32633717246.html?isOrigTitle=true)
動作確認
PC環境(Windows10 64bit)
まずはPCに接続してみました。どうやら正常に認識しているようです。次に手元にあるマウスやらキーボードやらのUSB機器を接続していきました。ついでにデジカメから引き抜いたSDカードも挿入してみます。
確認してみると、おお、問題なく動いているようです。正直なところまともに動くかどうか五分五分で考えていたので嬉しいです。
ただ、USB機器全般に言えることですが電源が弱いと動作不安定になります。この製品もセルフパワーのUSB-HUBにこの製品を接続したときは問題なく動作しますが、PCに直接接続すると電源が弱いのか動きが不安定になることがありました。
Arduino+USB-Host-Sheild環境
次に本来の目的であるArduino環境に接続してみました。構成は以下の通りです。
- ハードウェア:Arduino Uno互換ボード(Atmega328p搭載) + USB-Host-Shield互換ボード
- ファームウェア:USB Host Library 2.0 + USB-HUBデモスケッチ
動作確認にはUSB Host Library付属のサンプルスケッチを使用しました。USB-HUBを接続してリセットしてやると問題なくディスクリプターテーブルを取得出来ました。内容を見るとUSB-HUBとマスストレージの2つが検出されているのが分かります。
41 -- String Descriptors: Product: USB2.0 Hub Device descriptor: Descriptor Length: 12 Descriptor type: 01 USB version: 0200 Device class: 09 Device Subclass: 00 Device Protocol: 00 Max.packet size: 40 Vendor ID: 05E3 Product ID: 0618 Revision ID: 8753 Mfg.string index: 00 Prod.string index: 01 Serial number index: 00 Number of conf.: 01 Configuration descriptor: Total length: 0019 Num.intf: 01 Conf.value: 01 Conf.string: 00 Attr.: E0 Max.pwr: 32 Interface descriptor: Intf.number: 00 Alt.: 00 Endpoints: 01 Intf. Class: 09 Intf. Subclass: 00 Intf. Protocol: 00 Intf.string: 00 Endpoint descriptor: Endpoint address: 81 Attr.: 03 Max.pkt size: 0001 Polling interval: FF 09 -- String Descriptors: Manufacturer: Generic Product: USB Storage Device descriptor: Descriptor Length: 12 Descriptor type: 01 USB version: 0200 Device class: 00 Device Subclass: 00 Device Protocol: 00 Max.packet size: 40 Vendor ID: 05E3 Product ID: 0752 Revision ID: 0233 Mfg.string index: 03 Prod.string index: 04 Serial number index: 00 Number of conf.: 01 Configuration descriptor: Total length: 0020 Num.intf: 01 Conf.value: 01 Conf.string: 00 Attr.: 80 Max.pwr: 31 Interface descriptor: Intf.number: 00 Alt.: 00 Endpoints: 02 Intf. Class: 08 Intf. Subclass: 06 Intf. Protocol: 50 Intf.string: 00 Endpoint descriptor: Endpoint address: 81 Attr.: 02 Max.pkt size: 0040 Polling interval: 00 Endpoint descriptor: Endpoint address: 02 Attr.: 02 Max.pkt size: 0040 Polling interval: 00 Addr:41(1.0.1) Addr:9(0.1.1)
これを見て、もしかしてSDカードリーダはデータ保存に使えるのでは、と考えたのですが、Arduino Uno/nano(ATmega328)では内蔵メモリ容量の制約からマスストレージは使用不可のようです。残念。Arduino Mega(ATmega1280/2560)やSTM32ボードなど内蔵メモリが多い環境であれば可能かと思います。
USB-HUBの分解
さて、製品そのものはきちんと動いてくれそうで一安心です。ここで個人的に中身も気になるので分解してみました。製品のケースはプラスチックのぽっちが嵌っているだけなのでマイナスドライバーでこじってやれば簡単に分解出来ます。
USBケーブルのVBUS配線は相変わらず細いですね。そこそこ電流が流れるようなUSB機器を繋ぐと電圧降下して不安定になるかも。
基板に載っていたのは"GL857L"というチップで台湾のGenesysというメーカのICのようです。データシートは見つけることが出来ませんでしたが、機能概要らしきものが以下サイトに記載されています(USB2.0-HUB+SD/MMCカードリーダ機能搭載、SDXCも対応?)。ちなみにUSBコネクタは青色ですがUSB2.0対応です。
- www.dzsc.com - GL857L-HHY10(SSOP28)读卡器HUB2.0创惟GENESYS,GL全系列量大面议
http://product.dzsc.com/product/8919-2015811202257132.html

所感
300円という価格ですがしっかりと動いてくれました。この製品から出ているUSBケーブルは短いので持ち運びするノートパソコンに繋ぐような用途では邪魔にならず便利です。USB-HUBとSDカードリーダが欲しいという方は購入するのもありでしょう。
個人的には外部電源から5V供給出来るように改造して、USB給電対応のArduinoを鈴なりに繋ぐような使い方を考えています(電源+通信がUSBケーブル一本で出来る)。AmazonでUSB-HUBを探しているともう少しお値段がするものばかりでどうしようかなぁと悩んでいましたが、これなら気軽に組み込み機器に繋いで遊べそうです。