2011/05/28

musb_debugを有効にしてみる

musb_core.cに、musb_debugという変数がある。
これを0以外にするとログが出るようだ。
やってみよう。
途中で気づいたのだが、デバッグレベルはいくつかある。
今回は3でやったけど、4が最大のようだ。


<7>musb_stage2_irq 812: SUSPEND (b_idle) devctl 99 power e0
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0x4
<7>musb_stage0_irq 647: BUS RESET as b_idle
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_read_setup 560: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 808: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 914: queue to ep0 (OUT/RX), length=18
<7>musb_stage2_irq 812: SUSPEND (b_peripheral) devctl 99 power f0
<7>musb_g_suspend 1903: devctl 99
<7>android_usb gadget: suspend composite
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_g_disconnect 1939: devctl 99
<7>musb_read_setup 560: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 808: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 914: queue to ep0 (OUT/RX), length=18
<7>musb_stage2_irq 812: SUSPEND (b_peripheral) devctl 99 power f0
<7>musb_g_suspend 1903: devctl 99
<7>android_usb gadget: suspend composite
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
(以下、略)

今まで「susupend composite」だけだったのが、ばらばらっと出るようになった。
ep0は、エンドポイント0だろう。
b_peripheralとあるし、irqってのもあるから、セットアップステージをやろうとしているところか。


<7>musb_read_setup 560: SETUP req80.06 v0100 i0000 l64
ここはSETUPパケットを読むところだ。
デバイスリクエストはこうなっている。
 ・bmRequestType : 0x80(Dir:device=>host, Type:standard, RX:device)
 ・bRequest : 0x06(GET_DESCRIPTOR)
 ・wValue : 0x0100(DescType:DEVICE, DescIndex:0x00)
 ・wIndex : 0x0000(Language:none)
 ・wLength : 64


ディスクリプタタイプ"DEVICE"は「標準デバイスディスクリプタ」と呼ばれるもので、これにベンダIDやプロダクトIDなどを入れてHostに返すそうだ。
って、これはPCが返してるってことかい?
でも、方向はdevice=>hostとなっている。
データはエンドポイント0のFIFOから読み出しているようなので、少なくともBeagleBoardから出そうとしているデータではない。

ああ、「デバイスリクエスト」だから、HostがDeviceに対して要求しているのだな。

方向がdevice=>hostなのは、要求したデータをdeviceからhostへ返しなさい、ということか。
RXがdeviceなのも、「この要求はdeviceが受け取りなさい」ということか。

ということはこのログは、セットアップステージのうちのデータパケットを表しているということか。
最初のSETUPトークンはログに出すほどでもないということでいいのかな。


<7>musb_g_ep0_irq 808: handled 0, csr 0001, ep0stage in
これはエンドポイント0割り込みのログ。
色付けしたところがパラメータだ。
CSRはなんだかわからないけど、CSR0というレジスタがあるらしい。
"in"はエンドポイント0の状態らしい。受信ということか。
USBのシーケンスとしては、セットアップステージの次はデータステージになっていて、その始まりがINパケットらしい。
その"IN"かもしれん。


<7>musb_g_ep0_queue 914: queue to ep0 (OUT/RX), length=18
キューってことは、データをキューに詰めているところか?
こっちは"OUT/RX"か"IN/TX"のどちらかしか表示されない。
が・・・なんだろう。OUTとIN。
これは、host=>deviceがOUT、device=>hostがINだそうだ。
Host中心なのだな。


<7>musb_stage2_irq 812: SUSPEND (b_peripheral) devctl 99 power f0
ここはUSBの汎用割り込みらしい。
SUSPEND割り込みが入った、と思われているのか。
そして状態がOTG_STATE_B_PERIPHERALなので、分岐して・・・

あれ、HNPのログが出てない。
ソースからすると、ここでHNPに処理が進みそうなのだが、そのログが出てない。
ログを埋め込んだところ、musb->xceiv->gadget->b_hnp_enableが0だった。
つまり、HNPが使えないってことか。
そこら辺が問題なのか。。。実は関係ないのか。。。

0 件のコメント:

コメントを投稿

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

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