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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。