[問題] USB mass storage driver

看板LinuxDev作者 (地板別打我!>"<)時間13年前 (2011/01/07 17:21), 編輯推噓5(5018)
留言23則, 4人參與, 最新討論串1/2 (看更多)
各位好, 小弟我最近在弄 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

01/07 23:38, , 1F
對bulk only不是很懂,但是收到CBW後,你有回CSW回去嗎?
01/07 23:38, 1F

01/07 23:45, , 2F
如果第一個CBW都沒收到,要不要先檢查你的中斷ISR,列舉是用
01/07 23:45, 2F

01/07 23:46, , 3F
control pipe發的,CBW是用bulk 發的,先確定中斷真的有來吧
01/07 23:46, 3F

01/08 00:16, , 4F
android不是已經有公版的usb gadget的driver了嗎?
01/08 00:16, 4F

01/08 00:16, , 5F
裏頭就支援usb mass storage了... 幹嘛自己寫?
01/08 00:16, 5F

01/08 19:12, , 6F
to askacis,我現在就是卡在第一個CBW device這邊一直等
01/08 19:12, 6F

01/08 19:13, , 7F
不到,但是用snoopypro在XP那邊看又有送。這樣看起來像是
01/08 19:13, 7F

01/08 19:14, , 8F
我device這邊ep沒設好,可是adb那邊的運作又正常…
01/08 19:14, 8F

01/08 19:15, , 9F
現在就是device這邊一直等不到中斷訊號~
01/08 19:15, 9F

01/08 19:16, , 10F
to WPC001,那個我沒有自己改寫,只是現在使用上有問題~
01/08 19:16, 10F

01/08 19:16, , 11F
所以正在debug,可是卡住了~~xD
01/08 19:16, 11F

01/08 21:09, , 12F
有更新到sp3嗎?
01/08 21:09, 12F

01/09 08:19, , 13F
對andorid還是不熟,但是如果裝置列舉的時候是複合裝置,
01/09 08:19, 13F

01/09 08:21, , 14F
則adb用的bulk ep跟mass storage的bulk ep會是分開的
01/09 08:21, 14F

01/09 08:23, , 15F
原po可以利用usbview(on windows)等工具查看一下,
01/09 08:23, 15F

01/09 08:26, , 16F
不同的bulk ep,實際上綁定到硬體的ep以及FIFO等設定也不
01/09 08:26, 16F

01/09 08:29, , 17F
一樣,另外,請問一下原po,你的硬體本身可以支援多少ep?
01/09 08:29, 17F

01/10 08:01, , 18F
我的device可以支援到15個,然後我會提到adb運作正常的原
01/10 08:01, 18F

01/10 08:01, , 19F
因是因為兩邊ep初始化的邏輯是同一套的…但一邊可以work
01/10 08:01, 19F

01/10 08:04, , 20F
一邊卻不行,所以一直搞不清楚原因。
01/10 08:04, 20F

01/10 08:06, , 21F
to jokker,有的,我的xp已經是sp3了~~
01/10 08:06, 21F
※ 編輯: bombilla 來自: 60.251.136.127 (01/10 08:18)

01/10 08:18, , 22F
我在文章的最後附上我從usbview抓到的資訊,看起來和程式
01/10 08:18, 22F

01/10 08:19, , 23F
裡設定的值是一致的~
01/10 08:19, 23F
文章代碼(AID): #1D9jiAak (LinuxDev)
文章代碼(AID): #1D9jiAak (LinuxDev)