2011/05/28

USBのEnumeration (2)

USBのSUSPENDについて検索すると、Renesasのページが見つかった。
よくわからんが、Hi-SpeedモードではSUSPENDとRESETの区別はつかないらしい(どちらもD+, D-をLに落とすため)。
こっちのページには、USBを接続してからの流れが書いてあった。
ふむふむ。

ここで「Enumeration」という言葉が出てくる。
kernelのログにもよく出てくるのだ。「Enumerationできなかった」という形で。
どうやら、セットアップステージからはじまる一連の流れらしい。

ついでなので検索してみると、興味深いページが出てきた。
こちらによると、SETUPでGET_DESCRIPTORのあと、Hostからリセット要求が来ている、とある。
Renesasのページでは、SUSPENDとRESETの区別はつかないとある(状況次第だが)。
そう考えると、同じ状況のように見える。


この方は、RESETに対して特に何もしていないとのことであった。
MUSBでは、musb_g_suspend()を呼び出している。
<7>musb_g_suspend 1903: devctl 99
このdevctlは、MUSBのレジスタらしく、0x99だ。
 MUSB_DEVCTL_BDEVICE     0x80
 MUSB_DEVCTL_VBUS           0x18
 MUSB_DEVCTL_SESSION      0x01
この3つをORすると、0x99になる。
推測だが、「USB-B側で動作していて、VBUS供給されていて、通信中」というところか。
USB-B側になっている場合、ドライバにSUSPEND要求を出している。
それが、
<7>android_usb gadget: suspend composite
ということか。


なんとなく、話がつながったように思える。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。