作者askacis (ASKA)
看板LinuxDev
標題Re: [問題] USB mass storage driver
時間Mon Jan 10 22:44:02 2011
沒有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)
→ askacis:或原PO可以附上使用adb功能時usbview所錄到的列舉資訊嗎? 01/11 01:18
推 bombilla:多謝askacis!我照你的建議去借了台CATC來看packet了。 01/11 09:35
→ bombilla:我現在懷疑是chip driver的問題…因為這是bsp那邊來的 01/11 09:36
→ bombilla:code,所以一直沒仔細debug,現在用CATC看了一下,發現它 01/11 09:36
→ bombilla:會拼命的get descriptor和set configuration…然後在一堆 01/11 09:37
→ bombilla:的這兩種packet中的確有發現從host來的CBW…所以我現在 01/11 09:38
→ bombilla:打算來修chip driver…看看弄好後會不會就正常了~多謝~ 01/11 09:39