Re: [問題] USB mass storage driver

看板LinuxDev作者 (ASKA)時間13年前 (2011/01/10 22:44), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串2/2 (看更多)
沒有android的code或板子,但剛拿我手上的Aria手機試了 一下,看起來adb與mass stoarge 走的bulk ep number的確是不一樣的,我想原po可以順著adb 對應ep的設法檢查一次,搞不好是ep的中斷沒有enable, 下面提供給你參考(有錯的話別怪我啊XD): 如果我手機連線模式切成debug的話,此時列舉的參數 重點摘錄如下: Configuration Descriptor: bNumInterfaces: 0x02 //we have two interface. bConfigurationValue: 0x01 注意到,這邊的bNumInterfaces為2,顯然此時為一個複合性裝置; (偷偷說,其實敝公司也有類似的需求,但是因為硬體FIFO數不夠, 所以不能弄成複合裝置) 再來是各個interface的列舉值,摘列重點如下: //For mass storage Interface Descriptor: bInterfaceNumber: 0x00 bNumEndpoints: 0x02 bInterfaceClass: 0x08 //this class is for mass storage Endpoint Descriptor: bEndpointAddress: 0x83 IN Endpoint Descriptor: bEndpointAddress: 0x02 OUT //0x2 is bulk out for CBW and 0x83 is bulk in for CSW. //For ADB Interface Descriptor: bInterfaceNumber: 0x01 bNumEndpoints: 0x02 iInterface: 0x07 0x0409: "ADB" Endpoint Descriptor: bEndpointAddress: 0x84 IN Transfer Type: Bulk Endpoint Descriptor: bEndpointAddress: 0x03 OUT Transfer Type: Bulk //0x3 is bulk out for adb and 0x84 is for bulk in. 由此可見,當我們開啟debug模式的時候ADB跟mass storage走的ep address是不同的 再來是利用usb tracer之類的軟體來看一下(如果你手邊有CATC的話就請出來用吧): 假設我利用adb shell 下了一個ls的指令,此時有關ls這兩個字串的封包如下: EndpointAddress: 0x3 Data: 6C 73 0A //ls 然後你會在bus上錄到一堆ep address 為0x2 and 0x83 的封包應該是 mass stoagre用來保持連線or詢問狀態之類的 最後,如果我手機連線模式切成磁碟機,就只會看到一個interface ep address與複合式裝置的mass storage一樣: Configuration Descriptor: wTotalLength: 0x0020 bNumInterfaces: 0x01 //only one for mass storage Interface Descriptor: bInterfaceNumber: 0x00 bNumEndpoints: 0x02 bInterfaceClass: 0x08 Endpoint Descriptor: bEndpointAddress: 0x83 IN wMaxPacketSize: 0x0200 (512) Endpoint Descriptor: bEndpointAddress: 0x02 OUT wMaxPacketSize: 0x0200 (512) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.243.70 ※ 編輯: askacis 來自: 175.180.243.70 (01/10 22:45) ※ 編輯: askacis 來自: 175.180.243.70 (01/10 22:48) ※ 編輯: askacis 來自: 175.180.243.70 (01/10 23:07)

01/11 01:18, , 1F
或原PO可以附上使用adb功能時usbview所錄到的列舉資訊嗎?
01/11 01:18, 1F

01/11 09:35, , 2F
多謝askacis!我照你的建議去借了台CATC來看packet了。
01/11 09:35, 2F

01/11 09:36, , 3F
我現在懷疑是chip driver的問題…因為這是bsp那邊來的
01/11 09:36, 3F

01/11 09:36, , 4F
code,所以一直沒仔細debug,現在用CATC看了一下,發現它
01/11 09:36, 4F

01/11 09:37, , 5F
會拼命的get descriptor和set configuration…然後在一堆
01/11 09:37, 5F

01/11 09:38, , 6F
的這兩種packet中的確有發現從host來的CBW…所以我現在
01/11 09:38, 6F

01/11 09:39, , 7F
打算來修chip driver…看看弄好後會不會就正常了~多謝~
01/11 09:39, 7F
文章代碼(AID): #1DAnirCo (LinuxDev)
文章代碼(AID): #1DAnirCo (LinuxDev)