现在的位置: 首页 > 综合 > 正文

USB枚举以及描述符发送顺序解析

2013年08月13日 ⁄ 综合 ⁄ 共 9587字 ⁄ 字号 评论关闭

一、MCB1700的USB库文件详细分析:

MCB1700的USB文件较多,但只要弄清楚一下几个即可:

1. mscuser.c  大容量存储设备相关的文件,比如设计到存储设备的读写,以及使用的协议。例如,SD卡,BOT协议(CBW,CSW解析,SCSI命令解析)。

2. usbdesc.c   USB的设备描述符,配置描述符,接口描述符,端点描述符(Bulk-In 端点 和  Bulk-Out 端点)

3. usbhw.c    USB的一些硬件寄存器等获取信息。
主要函数void USB_IRQHandler (void) {},在USB中断中查看USB的状态并负责调用各个端点处理函数,来处理相应的数据包。

4. usbcore.c   USB的软件核心部分,包括USB的状态,请求获得各个描述符等函数。主要参看函数void USB_EndPoint0 (U32 event){},在枚举阶段使用默认端点0通信,因此一般USB设备必备。

5. usbuser.c  USB开发人员定义的函数,主要是除了端点0函数外的其它端点函数,以供3中的中断函数调用。

二、SETUP包数据分析(打印数据见后文)
其中:
1)sup: 80  6  0  1  0  0 40  0  表示第一个Setup包中收到的数据。40表示返回的数据最大长度为40H字节。将总共发送16个字节的设备描述符(8+8)。
2)sup:  0  5  1  0  0  0  0  0  表示第二个Setup包中收到的数据
3)sup: 80  6  0  1  0  0 12  0   第三个
4)sup: 80  6  0  2  0  0  9  0
5)sup: 80  6  0  3  0  0 ff  0
......
n)sup:  0  9  1  0  0  0  0  0

详细解释:
1)表示第一个Setup包中收到的数据。40表示返回的数据最大长度为40H字节。将总共发送16个字节的设备描述符(8+8)。
2)表示第二个Setup包中收到的数据。1表示主机为设备分配的地址为0x02
3)第三个。12H表示要求得到全部18字节的设备描述符。
4)要求得到设备的配置描述符,9个字节。
5)得到设备的配置描述符、接口描述符、端点描述符的集合。
......
n)调用Set_Configuration函数

三、其它说明
1. 0.1  端点0的USB_EVT_SETUP包
2. 0.2  端点0的USB_EVT_OUT包
3. 0.3  端点0的USB_EVT_IN包
4. w  n: 表示即将向某一端口写数据n个
5. 0.1.1.1  特殊信息,USB_MSC设置请求完成
6. 2 3  端点2的USB_EVT_OUT包
7. 2 2  端点2的USB_EVT_IN包

四、注意事项

我觉得USB中断里面的数据不能打印太多,否则USB识别的过程可能会出现问题。
调试的时候只要发现USB->USBDevIntSt寄存器的值为0x5即可。
通常的打印顺序如下:
19  39  239  239  239  239  9  39  5 (大多数情况下)

一定要等到这个5出现为止。

五、数据
 
USB识别的全过程打印如下:

1)仅SETUP,以及描述
sup: 80  6  0  1  0  0 40  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR  0.3  0.2
sup:  0  5  1  0  0  0  0  0  0.1  SET_ADDRESS:  0.3
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR  0.3  0.3  0.3
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR  0.3  0.3  0.2
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.2
sup: 80  6  3  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.3  0.3  0.3
sup: 80  6  0  2  0  0 ff  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR  0.3  0.3  0.3  0.3  0.3
sup: 80  6  0  6  0  0  a  0  0.1  GET_DESCRIPTOR:
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.2
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.3  0.3  0.3  0.3  0.3  0.2
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.3  0.3  0.3  0.3  0.3  0.2
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR  0.3  0.3  0.3
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR  0.3  0.3  0.2
sup: 80  6  0  2  0  0 20  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR  0.3  0.3  0.3  0.3  0.2
sup: 80  6  0  3  0  0  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.2
sup: 80  6  0  3  0  0  4  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.2
sup: 80  6  3  3  9  4  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.2
sup: 80  6  3  3  9  4 1a  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR  0.3  0.3  0.3  0.3
sup:  0  9  1  0  0  0  0  0  0.1  SET_CONFIGURATION:  0.3
sup: a1 fe  0  0  0  0  1  0  0.1
0.1.1.1 0.2  0.3
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE:  0.3
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE:  0.3
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE:  0.3
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE:  0.3
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE:  0.3

2)1的基础上加写标志

USB test!
sup: 80  6  0  1  0  0 40  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  0.3 w  8:  0.2
sup:  0  5  1  0  0  0  0  0  0.1  SET_ADDRESS: w  0:  0.3
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  2:  0.3 w  0:
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:  0.3 w  1:  0.3 w  0:  0.2
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  0.3 w  0:  0.2
sup: 80  6  3  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  2:  0.3 w  0:  0.2
sup: 80  6  0  2  0  0 ff  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  0:  0.3 w  0:
sup: 80  6  0  6  0  0  a  0  0.1  GET_DESCRIPTOR:
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  0.3 w  0:
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  0:  0.3 w  0:
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  0.3 w  0:
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  0:  0.3 w  0:  0.2
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  2:  0.3 w  0:  0.2
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:  0.3 w  1:  0.3 w  0:
sup: 80  6  0  2  0  0 20  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  8:  0.3 w  0:
sup: 80  6  0  3  0  0  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  2:  0.3 w  0:
sup: 80  6  0  3  0  0  4  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  0.3 w  0:
sup: 80  6  3  3  9  4  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  2:  0.3 w  0:
sup: 80  6  3  3  9  4 1a  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:  0.3 w  8:  0.3 w  8:  0.3 w  2:  0.3 w  0:
sup:  0  9  1  0  0  0  0  0  0.1  SET_CONFIGURATION: w  0:  0.3
sup: a1 fe  0  0  0  0  1  0  0.1 w  1:
0.1.1.1 0.2  0.3 w  0: 2 2  w 36: 2 3  w 13: 2 3  2 2  w 12: 2 3  w 13:
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE: w 13: w  0:  0.3 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w  4: 2 3  w 13:
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE: w 13: w  0:  0.3 2 3  2 2  w  4: 2 3  w 13:
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE: w 13: w  0:  0.3 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w  4: 2 3  w 13:
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE: w 13: w  0:  0.3 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w 18: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w  8: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 64: 2 3  w 13: 2 3  2 2  w  4: 2 3  w 13:
sup:  2  1  0  0 82  0  0  0  0.1  CLEAR_FEATURE: w 13: w  0:  0.3 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3  2 2  w 13: 2 3

3)2基础上加打印写的数据

sup: 80  6  0  1  0  0 40  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  2000112  8000000  0.3 w  8: 2203c251  2010100
sup:  0  5  1  0  0  0  0  0  0.1  SET_ADDRESS: w  0:  0.3
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  2000112  8000000  0.3 w  8: 2203c251  2010100  0.3 w  2:      103  0.3 w  0:
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:   200209 80000101  0.3 w  1:    40932  0.3 w  0:
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  4090304  0.3 w  0:
sup: 80  6  3  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:   30031a   300030  0.3 w  8:   410031   300030  0.3 w  8:   300030   300030  0.3 w  2:  30e0030  0.3 w  0:
sup: 80  6  0  2  0  0 ff  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:   200209 80000101  0.3 w  8:    40932  6080200  0.3 w  8:  5070450   400282  0.3 w  8:  2050700     4002  0.3 w  0:  0.3 w  0:
sup: 80  6  0  6  0  0  a  0  0.1  GET_DESCRIPTOR:
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  4090304  0.3 w  0:
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:   4b0328   690065  0.3 w  8:   20006c   43004d  0.3 w  8:   310042   300037  0.3 w  8:   200030   65004d  0.3 w  8:   6f006d   790072  0.3 w  0:  0.3 w  0:  0.2
sup: 80  6  0  3  0  0 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  4090304  0.3 w  0:
sup: 80  6  2  3  9  4 ff  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:   4b0328   690065  0.3 w  8:   20006c   43004d  0.3 w  8:   310042   300037  0.3 w  8:   200030   65004d  0.3 w  8:   6f006d   790072  0.3 w  0:  0.3 w  0:  0.2
sup: 80  6  0  1  0  0 12  0  0.1  GET_DESCRIPTOR:  DEVICE_DESCRIPTOR w  8:  2000112  8000000  0.3 w  8: 2203c251  2010100  0.3 w  2:      103  0.3 w  0:
sup: 80  6  0  2  0  0  9  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:   200209 80000101  0.3 w  1:    40932  0.3 w  0:
sup: 80  6  0  2  0  0 20  0  0.1  GET_DESCRIPTOR:  CONFIGURATION_DESCRIPTOR w  8:   200209 80000101  0.3 w  8:    40932  6080200  0.3 w  8:  5070450   400282  0.3 w  8:  2050700     4002  0.3 w  0:
sup: 80  6  0  3  0  0  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  2:  4090304  0.3 w  0:
sup: 80  6  0  3  0  0  4  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  4:  4090304  0.3 w  0:  0.2
sup: 80  6  3  3  9  4  2  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  2:   30031a  0.3 w  0:
sup: 80  6  3  3  9  4 1a  0  0.1  GET_DESCRIPTOR:  STRING_DESCRIPTOR w  8:   30031a   300030  0.3 w  8:   410031   300030  0.3 w  8:   300030   300030  0.3 w  2:  30e0030  0.3 w  0:
sup:  0  9  1  0  0  0  0  0  0.1  SET_CONFIGURATION: w  0:  0.3
sup: a1 fe  0  0  0  0  1  0  0.1 w  1:  3030600
0.1.1.1 0.2  0.3 w  0: 2 2  w 36:  1008000 ......  

说明:
1)为方便浏览起见,以上文档请以UltraEdit工具打开。
2)如果有问题,可电邮mary0515#gmail.com,共同探讨。

抱歉!评论已关闭.