2011/05/29

OTGじゃなくてPeripheralでよいのでは?

BeagleBoardのDisgnostic Kernelを入れると、PCはBeagleBoardをEtherカードとして認識してくれる。
そのソースがgitoriousにあるので、自分でビルドして確かめようとした。

しかし・・・ビルドが通らない・・・。
初出の変数があるのだが、それがどっからどうすべきものかがわからず。。。
それはあきらめ、defconfigを見ることにした。

そうするとですな、OTGはOFFになっているのだ。
Gadgetは有効になってて、MUSBも有効にしてある。
ああ、こういう方法もあるんだ。。。。。

最近、EHCIポートが使えることに気づいたので、OTGポートはPeripheral専用にしてしまって問題ないのだ。
ではやってみよう、と設定をいじっていたが、なかなかうまくいかん。
kernelのバージョンによって、設定が少しずつ違っているのだ。
それに、BeagleBoardは基板の版によってハードウェア構成が異なるため、ある設定では動いてもある設定では動かない、ということがあるように思うのだ(私はC4版)。
特にUSB周りは変更がいろいろとあったようなので、混乱している。

今さっき、ようやくPCが認識してくれた。

Bus 001 Device 043: ID 0525:a4a2 Netchip Technology, Inc. Linux-USB Ethernet/RNDIS Gadget

いきなりAndroidのではわからないので、Diagnostic Kernelでも動いていたネットワークのGadgetにしてみたのだ。
おとなしく書いているが、非常にうれしい。

さて、BeagleBoard側のログだ。
まず、挿してから認識後のRESETまで。
そうなのだ、やはりRESETはしているのだ。

<7>twl4030_usb twl4030_usb: HW_CONDITIONS 0xd0/208; link 2
<7>musb_interrupt 1536: ** IRQ peripheral usb0001 tx0000 rx0000
<7>musb_stage2_irq 816: SUSPEND (b_idle) devctl 99 power e0
<7>musb_stage2_irq 820: state (1) active (0)
<7>musb_interrupt 1536: ** IRQ peripheral usb0004 tx0000 rx0000
<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 'g_ether'
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l64
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage idle
<7>musb_interrupt 1536: ** IRQ peripheral usb000c tx0000 rx0000
<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 'g_ether'
<7>musb_g_disconnect 1939: devctl 99

最初にRESETしてるのはいいとして、今回も接続後にRESETしているのだ。
ep0stageで、setupステージ後のout/statusステージで何も送信していなさそうなのも、同じ。
前回と違うのは、ここからリトライにならず、次に進んだこと。
次のログを載せよう。

<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 0, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req00.05 v002b i0000 l0
<7>service_zero_data_request 237: bRequest (05)
<7>musb_g_ep0_irq 811: handled 1, csr 0001, ep0stage in/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 0, ep0stage in/status


またSETUPから始まるのか、と思わせたが、in/statusステージになっている。
前はreq80.06なので、GET_DESCRIPTOR。
ここはreq00.05なので、SET_ADDRESS。
そう、ようやくアドレスが取得できたのだ。

もう2つ先まで載せよう。

<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 43, ep0stage idle
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cfa95f0c
<7>musb_read_setup 562: SETUP req80.06 v0100 i0000 l18
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=18
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 18 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  18/18
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage idle



<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0001, count 8, myaddr 43, ep0stage setup
<7>musb_read_fifo 202: RX ep0 fifo fa0ab020 count 8 buf cf82bd34
<7>musb_read_setup 562: SETUP req80.06 v0200 i0000 l9
<7>musb_g_ep0_irq 811: handled 0, csr 0001, ep0stage in
<7>musb_g_ep0_queue 917: queue to ep0 (OUT/RX), length=9
<7>musb_write_fifo 164: TX ep0 fifo fa0ab020 count 9 buf cf8aec00
<7>musb_g_giveback 144: ep0 done request cf8be6c0,  9/9
<7>musb_interrupt 1536: ** IRQ peripheral usb0008 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage out/status
<7>musb_interrupt 1536: ** IRQ peripheral usb0000 tx0001 rx0000
<7>musb_g_ep0_irq 628: csr 0000, count 0, myaddr 43, ep0stage idle

まだ続くけど、ここまで。


.configで目立った変更は、こんなところか。

CONFIG_USB_MUSB_PERIPHERAL
CONFIG_USB_GADGET_MUSB_HDRC
CONFIG_USB_ETH
CONFIG_USB_ETH_RNDIS

Peripheralにしているので、OTG関係の設定が出てこなかった。
他にも関係あるのかもしれないが、これで続けてみよう。

0 件のコメント:

コメントを投稿

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