LoginSignup
2
2

ルーターのUSB

Last updated at Posted at 2019-11-10

Comcerto 1000なモジュール(F社製)のためにEHCIなドライバーを書いてみたのですが、使えなくて調べたことを書き残しです。

Comcerto 100は2系統のUSBがありましたが1000では1系統になっています。また2000はUSB 3.0のサポートが入ってXHCIになったようです。

FreeBSDのEHCIな処理は共通化されていて、GENERICなドライバーもありますが、若干のカスタマイズのために独自のコードを作っているケースもあります。適当なファイルを探して、関数名などを置換して、機種独自のカスタマイズコードを削除してコンパイルしたら2,3度の修正でビルドがとおりました。FDTで作っているのでdtsiにも追加が必要です。

コピーしたコードは結構綺麗に書かれていたのですが、リソースの数の処理が間違っていました。問題はエラーケースなので表面化しないとは思いますが、おそらくdtsの記述を変えた時にソースを不完全に修正したのが原因な気がします。

bootしてみて、ドライバは認識されるのですが、デバイスが認識されません。

USBのコネクタ付近に未実装なパターンがあります。

写真(2019-11-08 7.07).jpg

D6,D7,D11は保護用のダイオードでL8はフィルターのようです。L8のパターンはつながっていて、部品を実装しても効かない様な気もするのですが、他の機種でも同じ様なパターンが見かけられたので、おそらくそういうものなのでしょう。これらはなくても普通は動作するはずです。

コネクタの前のパターンはこんな風になってます。

写真(2019-11-09 12.51).jpg

右からUARTのTX,RXでUSBのPowerの制御用(OUT)と、過電流検出(IN)のためのGPIOの線と、USBのD+,D-です。USB Power制御用のチップ(SOT-23 5Pin "ZN A09"?)は裏面に実装されています。

GPIOを試したところPowerの制御はGPIO_16でできました。

D+,D-のパターンはSOCの右上のUSBのピンの部分に直接つながっています。D+,D-のGNDとの抵抗を調べると8Mくらいなので接続はされている様です。

スクリーンショット 2019-11-11 9.24.22.png

Pin Name Dir
J1 USB_DP B
H1 USB_DM B
H3 USB_REF B
G1 USB_VBUS_STAT I

いろいろ調べてみると、この機種の後継のモジュールはUSBが二口になっていて、おそらく同じSOCを使っていてUSB HUBのチップが入っているのではないかと思われます。またこのモージュールにはUSBと表示があります。 後継の機種はComcerto 2000を使っていてUSB2とUSB 3で二口にしていました。

このモジュールは意図的にUSBを使えなくしたのではなく、意図せず機能しなくて、納期が迫っていてデバッグもできなく、またサポートの必要もなかったのでUSBの表示を入れずに出荷したのではないでしょうか。また後継のモジュールはこの問題の対応のためにUSB HUBのチップを入れた可能性が高い気がします。

オリジナルのファームを立ち上げたところ、USBのPowerがOffの状態でした。セルフパワーのHUBをつないだところ、認識されたのでUSBは使えるようです。。。

comcerto-ehci comcerto-ehci.1: comcerto EHCI
comcerto-ehci comcerto-ehci.1: new USB bus registered, assigned bus number 1
comcerto-ehci comcerto-ehci.1: irq 5, io mem 0x0f000000
tdi_reset: set Streaming disable mode
comcerto-ehci comcerto-ehci.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
foxSyslogDispatch() - Entering
foxSyslogDispatch() - Going to loop, gSystemDispatchMsgKey=65538
usb 1-1: new high speed USB device using comcerto-ehci and address 2
ctnetlink v0.93: registering with nfnetlink.
usb 1-1: configuration #1 chosen from 1 choice
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected

PowerのコントロールのGPIOはOffになっているケースが多くUSB自体が使えるかどうかはセルフパワーのデバイスで試すのが良いです。

上記のようにEnableとOver-Currentを接続しているケースもありますが、Enableだけのケースもあります。

下記は左側のSOP8のIT7652MというDC/DC Converterで5Vを作りUSBの電源としていて、EnableだけSOCからコントロールしているようです。

写真(2019-12-01 18.17).jpg

ルーターUSBは使えてもあまりパフォーマンスが良くないケースもあるようです。

NetBSDでehciドライバーを試しても使えません。ログを吐かせてみたところ以下の部分が正常なSHEEVAPLUGと違います。

Comcerto
[   3.5744599] 000003.578262 ehci_open#4@0: called!
[   3.6365204] 000003.644348 ehci_open#4@0: pipe=0xc13acf80, addr=1, endpt=129 (1)
[   3.7109933] 000003.713105 ehci_roothub_ctrl_locked#14@0: called!
[   3.7730541] 000003.780526 ehci_roothub_ctrl_locked#14@0: type=0x23 request=03
[   3.8475277] 000003.849068 ehci_roothub_ctrl_locked#14@0: portsc=0x1c000004
[   3.9095874] 000003.917351 ehci_roothub_ctrl_locked#14@0: set port power 1 (has PPC = 16)
[   3.9840602] 000003.986842 ehci_roothub_ctrl_locked#14@0: returning 0
SHEEVAPLUG
[   4.9699395] 000004.970484 ehci_open#4@0: called!
[   5.0699392] 000005.074945 ehci_open#4@0: pipe=0xc2eb14c0, addr=1, endpt=129 (1)
[   5.1799398] 000005.182159 ehci_roothub_ctrl_locked#14@0: called!
[   5.2799393] 000005.288018 ehci_roothub_ctrl_locked#14@0: type=0x23 request=03
[   5.3899396] 000005.395013 ehci_roothub_ctrl_locked#14@0: portsc=0x0c000800
[   5.4999394] 000005.501745 ehci_roothub_ctrl_locked#14@0: set port power 1 (has PPC = 16)
[   5.5999393] 000005.609699 000005.612075 ehci_intr#1@0: called!
[   5.7099397] 000005.715386 ehci_intr1#1@0: called!
[   5.7099397] 000005.819938 ehci_intr1#1@0: sc=0xc2b20000 intrs=0xc(0xc08c) eintrs=0x4
[   5.7099397] ehci_roothub_ctrl_locked#14@0: returning 0

EHCIからの割り込みがあがらないことが原因のようです。なんでかな。。

ComcertoのUSBはOHCIなどの1.0のインターフェースは持たずTransaction Translator(TT)を入れて2.0のEHCIだけでサポートしているようです。TTとはHUBやHOSTで1.0の通信を2.0に変換する機能です。

OHCIなどが有る場合はcompanion controllerとしてEHCIと連携するようです。companion controllerがあるかどうかはレジスタでわかり、Comcertoは0が返ります。

NetBSDで使えるようになりました。

USBのパワーコントロールのチップでGlobal Mixed-mode Technology Inc.のG528(SOP8) USB High-Side Power Switch Advance Informationというものもあるようです。

同じ会社のG526は二系統の制御が可能なようです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2