作者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)
1F:→ askacis:或原PO可以附上使用adb功能时usbview所录到的列举资讯吗? 01/11 01:18
2F:推 bombilla:多谢askacis!我照你的建议去借了台CATC来看packet了。 01/11 09:35
3F:→ bombilla:我现在怀疑是chip driver的问题…因为这是bsp那边来的 01/11 09:36
4F:→ bombilla:code,所以一直没仔细debug,现在用CATC看了一下,发现它 01/11 09:36
5F:→ bombilla:会拼命的get descriptor和set configuration…然後在一堆 01/11 09:37
6F:→ bombilla:的这两种packet中的确有发现从host来的CBW…所以我现在 01/11 09:38
7F:→ bombilla:打算来修chip driver…看看弄好後会不会就正常了~多谢~ 01/11 09:39