作者bombilla (地板別打我!>"<)
看板LinuxDev
標題[問題] USB mass storage driver
時間Fri Jan 7 17:21:11 2011
各位好,
小弟我最近在弄 android 的 mass storage driver,遇到點問題想請教一下。
狀況就是當我的 device 透過 usb 接上 PC 後(windows xp),
裝置管理員那邊雖然有認到我的 device 是 usb mass storage。
但總是伴隨著一個討人厭的黃色驚嘆號,點兩下進去看一下"裝置狀態"會顯示
這個裝置無法啟動。(代碼10)
請按【疑難排解】啟動疑難排解功能。
我看 driver 狀態都是卡在等待 CBW,就是 get_next_command 函式裡的
while(bh->state != BUF_STATE_FULL) {
rc = sleep_thread(fsg);
...略
}
到這邊我以為是 PC 這邊沒先發 CBW 給 Device 所以才卡住,
接著我到網路上抓了一套叫 snoopypro-0.22 的 usb sniffer 裝在 PC 這邊
目的是看 PC 端 usb packets 的狀況。
結果我都只聽得到26個 packets,前20個都很正常,就是在抓 configuration 還有
設定 interface 之類的,但在第21個開始有問題,我接到的是這樣的:
URB Header (length: 72)
SequnceNumber: 11
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000000
TransferBuffer: 0x0000001f (31) length
0000: 55 53 42 43 38 21 aa 84 24 00 00 00 80 00 06 12
0010: 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00
第22個長這樣:
URB Header (length: 72)
SequenceNumber: 11
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000000
No TransferBuffer
接下來的第23,25個封包和第21個一樣,24,26和22一樣。然後就沒反應了。
在 snoopypro 裡的 Result 欄位裡,第22,24,26個封包都顯示0xc0000011。
看起來應該是顯示傳輸錯誤,是嗎?
最後我請問各位對於這個狀況有什麼想法可以建議的嗎?
就是看起來 Host 有送 CBW,但 device 這邊又遲遲等不到…
另外在 snoopypro 裡有 out up 和 out down…up 和 down 是什麼意思?
21,23,25 的 Dir 欄位顯示的是 out down。
22,24,26 的 Dir 欄位顯示的是 out up。
================================================================
另外我要補充的是我的 adb function 是 work 的。
可以透過 usb 使用 adb 下指令,push 或是 pull 檔案。
================================================================
任何資訊都好~或是有什麼幫助我 debug 的資訊都行~
感謝各位~~
================================================================
以下是我用 USB View 抓到的資訊:
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x18D1
idProduct: 0x0001
bcdDevice: 0x0226
iManufacturer: 0x01
0x0409: "MyDevice"
iProduct: 0x02
0x0409: "UMS"
iSerialNumber: 0x03
0x0409: "0123456789ABCDEF"
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 2
Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0200 (512)
bInterval: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0200 (512)
bInterval: 0x01
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0xE0 (Bus Powered Self Powered Remote Wakeup)
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x08
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
iInterface: 0x00
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.136.127
推 askacis:對bulk only不是很懂,但是收到CBW後,你有回CSW回去嗎? 01/07 23:38
推 askacis:如果第一個CBW都沒收到,要不要先檢查你的中斷ISR,列舉是用 01/07 23:45
→ askacis:control pipe發的,CBW是用bulk 發的,先確定中斷真的有來吧 01/07 23:46
→ WPC001:android不是已經有公版的usb gadget的driver了嗎? 01/08 00:16
→ WPC001:裏頭就支援usb mass storage了... 幹嘛自己寫? 01/08 00:16
→ bombilla:to askacis,我現在就是卡在第一個CBW device這邊一直等 01/08 19:12
→ bombilla:不到,但是用snoopypro在XP那邊看又有送。這樣看起來像是 01/08 19:13
→ bombilla:我device這邊ep沒設好,可是adb那邊的運作又正常… 01/08 19:14
→ bombilla:現在就是device這邊一直等不到中斷訊號~ 01/08 19:15
→ bombilla:to WPC001,那個我沒有自己改寫,只是現在使用上有問題~ 01/08 19:16
→ bombilla:所以正在debug,可是卡住了~~xD 01/08 19:16
推 jokker:有更新到sp3嗎? 01/08 21:09
推 askacis:對andorid還是不熟,但是如果裝置列舉的時候是複合裝置, 01/09 08:19
→ askacis:則adb用的bulk ep跟mass storage的bulk ep會是分開的 01/09 08:21
→ askacis:原po可以利用usbview(on windows)等工具查看一下, 01/09 08:23
推 askacis:不同的bulk ep,實際上綁定到硬體的ep以及FIFO等設定也不 01/09 08:26
→ askacis:一樣,另外,請問一下原po,你的硬體本身可以支援多少ep? 01/09 08:29
→ bombilla:我的device可以支援到15個,然後我會提到adb運作正常的原 01/10 08:01
→ bombilla:因是因為兩邊ep初始化的邏輯是同一套的…但一邊可以work 01/10 08:01
→ bombilla:一邊卻不行,所以一直搞不清楚原因。 01/10 08:04
→ bombilla:to jokker,有的,我的xp已經是sp3了~~ 01/10 08:06
※ 編輯: bombilla 來自: 60.251.136.127 (01/10 08:18)
→ bombilla:我在文章的最後附上我從usbview抓到的資訊,看起來和程式 01/10 08:18
→ bombilla:裡設定的值是一致的~ 01/10 08:19