USB学习笔记(2)USB协议

USB学习笔记(2)USB协议

本文对前面提到的USB枚举过程中的标准请求以及各种描述符做出大致解释,方便后面的实操。

1. USB标准请求

USB协议定义了一个8字节的标准设备请求,主要用在设备的枚举过程。这8字节的数据是在控制传输的建立过程通过默认控制端点0发出的。在这8字节的数据中,包含了数据过程所需要传输数据的传输方向,长度以及数据类型。

USB标准设备请求的数据结构:

偏移量/字节 大小/字节 取值 说明
0 bmRequestType 1 位图 请求特性:【D7:数据的传输方向;0-主机到设备;1-设备到主机】【D6-5:请求的类型;0-标准请求;1-类;2-厂商;3-保留】【D4-0:请求的接收者;0-设备;1-接口;2-端点;3-其他;4~保留】
1 bRequest 1 数值 请求代码
2 wValue 2 数值 该域的意义由具体的请求决定
4 wIndex 2 索引或偏移量 该域的意义由具体的请求决定
6 wLength 2 字节数 数据过程所需要传输的字节数

针对标准请求(bmRequestType[6:5]=00),USB协议定义了11个 标准请求代码(bRequest)

bmRequestType bRequest wValue wIndex wLength 数据过程
0x00/0x01/0x02 1(CLEAR_FEATURE) 特性选择 0/接口号/端点号 0
0x80 8(GET_CONFIGURATION) 0 0 1 配置值
0x80 6(GET_DESCRIPTOR) 描述符类型(高字节)或索引(低字节) 0或者语言ID 描述符长度 描述符
0x81 10(GET_INTERFACE) 0 接口号 1 备用接口号
0x80/0x81/0x82 0(GET_STATUS) 0 0/接口号/端点号 2 设备,接口或者端点状态
0x00 5(SET_ADDRESS) 设备地址 0 0
0x00 9(SET_CONFIGURATION) 配置值 0 0
0x00 7(SET_DESCRIPTOR) 描述符类型和索引 0或语言ID 描述符长度 描述符
0x00/0x01/0x02 3(SET_FEATURE) 特性选择 0/接口号/端点号 0 没有
0x01 11(SET_INTERFACE) 备用接口号 接口号 0
0x82 12(SYNCH_FRAME) 0 端点号 2 帧号

2. USB描述符

2.1. 设备描述符(Device Descriptor)

设备描述符主要记录的信息有:设备所使用的USB协议版本号,设备类型,端点0的最大包大小,厂商ID(VID)和产品ID(PID),设备版本号,厂商字符串索引,产品字符串索引,设备序列号索引,可能的配置数等。

设备描述符结构 :

偏移量/字节 大小/字节 说明
0 bLength 1 该描述符的长度(18字节)
1 bDescriptorType 1 描述符类型(设备描述符为0x01),见表
2 bcdUSB 2 本设备所使用的USB协议版本(USB2.0 0x00 0x02),小端模式
4 bDeviceClass 1 设备所使用的类代码,由USB协会规定,见表;对于大多数标准的USB设备类,该字段通常设置为0;当bDeviceClass为0的时候,下面的bDeviceSubClass和bDeviceProtocol也必须为0;如果bDevice为0xff,表示厂商自定义设备类
5 bDeviceSubClass 1 设备所使用的子类代码,当bDeviceClass不为0或者0xff的时候,由USB协会规定,见表
6 bDeviceProtocol 1 设备所使用的协议,由USB协会规定,见表;为0的时候表示不适用类所定义的协议,为0xff的时候表示厂商自定义协议;bDeviceProtocl与bDeviceClass和bDeviceSubClass结合起来用才有具体意义
7 bMaxPackeSize0 1 端点0的最大包长度,取值可以为8,16,32,64
8 idVender 2 厂商ID(VID),一般不能随意使用,小端模式
10 idProduct 2 产品ID(PID),小端模式
12 bcdDevice 2 产品版本号,自定义,,小端模式
14 iManufacturer 1 描述厂商字符串的索引值,为0表示没有厂商字符串
15 iProduct 1 描述产品字符串的索引值,为0表示没有产品字符串
16 iSerialNumber 1 设备的序列号字符串的索引值,如果产品VID和PID一样,可以通过这个来区别
17 bNumConfigurations
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值