USB命令(请求)及标准描述符等相关归纳介绍
USB协议详解

USB协议详解⼀个transfer(传输)由⼀个或多个transaction(事务)构成,⼀个transaction(事务)由⼀个或多个packet(包)构成,⼀个packet(包)由⼀个或多个sync(域)构成。
1.传输数据通信USB的数据通讯⾸先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。
2.事务数据通讯⼀次传输由⼀个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。
3.包数据通讯⼀个事务由⼀个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握⼿包(ack)、特殊包。
4.域数据通讯⼀个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。
USB传输传输分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。
1、批量(⼤容量数据)传输(Bulk Transfers): ⾮周期性,突发⼤容量数据的通信,数据可以占⽤任意带宽,并容忍延迟。
如USB打印机、扫描仪、⼤容量储存设备等。
批量输出事务:(1)主机先发出⼀个OUT令牌包(包含设备地址,端点号)。
(2)然后再发送⼀个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握⼿包。
(3)设备解码令牌包,数据包都准确⽆误,并且有⾜够的缓冲区来保存数据后就会使⽤ACK/NYET握⼿包来应答主机(只有⾼速模式才有NYET握⼿包,他表⽰本次数据成功接收,但是没有能⼒接收下⼀次传输),如果没有⾜够的缓冲区来保存数据,就返回NAC,告诉主机⽬前没有缓冲区可⽤,主机会在稍后时间重新该批量传输事务。
如果设备检查到数据正确,但端点处于挂起状态,返回STALL。
如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。
USB协议详解第30讲(USB枚举过程详解及抓包分析)

USB协议详解第30讲(USB枚举过程详解及抓包分析)USB(Universal Serial Bus)是一种用于连接计算机和外部设备的通信协议和接口标准。
USB枚举过程是指在设备连接到计算机上时,计算机通过与设备之间的通信来识别设备并建立通信。
USB枚举过程分为设备插入、USB设备识别和USB配置三个阶段:1.设备插入:当设备被插入计算机的USB接口时,计算机会感知到设备的插入,并触发枚举过程。
2. USB设备识别:计算机会发送一个特殊的reset信号给设备,以重置设备的状态。
然后计算机会发送一个设备描述符请求给设备,以获取设备的基本信息,如设备的供应商、产品ID等。
设备会回复一个设备描述符给计算机。
B配置:计算机会发送配置描述符请求给设备,以获取设备的详细配置信息。
设备会回复一个或多个配置描述符,以及相关的接口和端点信息。
然后计算机会选择一个合适的配置,并将其发送给设备。
设备收到配置信息后,会根据配置信息进行相应的初始化操作。
之后计算机会发送一些设备请求给设备,如获取设备状态、设置设备参数等。
在USB枚举过程中,计算机和设备之间的通信是基于USB传输层协议进行的。
USB传输层协议定义了几种不同类型的传输方式,如控制传输、批量传输、中断传输和等时传输。
在USB枚举过程中,主要使用控制传输。
USB枚举过程的抓包分析可以通过使用USB抓包工具,如Wireshark来进行。
通过抓包可以查看计算机和设备之间的通信过程,以及传输的数据包内容。
抓包可以帮助我们分析USB设备的插入和识别过程,以及在配置阶段的通信和数据传输。
抓包分析可以实现以下目的:1.查看设备的设备描述符和配置描述符,了解设备的供应商信息、产品信息和接口信息等。
2.分析计算机和设备之间的控制传输,了解计算机和设备之间的通信流程。
3.分析数据传输,查看数据包内容,了解数据的格式和结构。
4.分析设备和计算机之间的异常情况,如错误响应、超时等,帮助排除故障。
标准的USB设备请求命令

• wIndex:
– 值为端点号,即端点描述符中的bEndPointAddress的值
• wLength:
– 2,表示接下来端点返回的数据大小为2个字节。
字段说明
• bmRequestType:
– 仅用于主机输出给设备,而命令的接收者可以是设备、接口或端点。
• wValue:
– 该字段的内容是特性选择器,代表了一些特定的需要被清楚或禁用的特 性代码:
• wIndex:
– 参见GET_STATUS的字段说明。
• wLength:
– 值为0,因无需返回数据。
• 请求命令类型,共1个字节,每个位都有一定的意义。D7—选 择数据传输方向
– D7=0:从主机到设备;D7=1:从设备到主机。
• D7—选择数据传输方向
– D7=0:从主机到设备;D7=1:从设备到主机。
• D6D5—命令类型
– D6D5=00:标准请求命令; D6D5=01:类请求命令; D6D5=10: 用户定义命令; D6D5=11:保留。 – 本节讲述标准请求命令,故D6D5=00。
• wLength:
– 值为0,因无需返回数据。
设置地址请求SET_ADDRESS
• 该命令用于主机给设备分配地址:
字段说明
• bmRequestTy节,内容是主机分配给设备的地址。
• wIndex:
– 由于请求命令的接收者只能为设备,故此值为0。
• wLength:
– 值为1,表示设备返回的数据大小为1个字节。
设置接口请求SET_INTERFACE
字段说明
• bmRequestType:
– 固定为00000001,因此数据方向是输入OUT,即主机发送给设备, 而命令接收者为接口。
实用USB术语详解

如果您刚开始接触USB,那么了解一些USB术语将很有帮助。
本文介绍了基本的USB术语。
主机USB是一种“主-从”式总线,包括一个主机和多个从机。
从机称作外设,在USB术语中也称作功能部件。
主机称作主设备。
所有USB传输都由主机启动;外设总是响应传输,不会启动传输。
最常用的主机是PC机,主机通过USB-A连接器连接到下行设备。
嵌入式主机不包括PC机,而是用一个微控制器作为专用主机,或许只能与一类USB设备通信。
功能部件功能部件是USB设备,也称作USB外设。
USB外设是主机的“下行”设备,使用USB B型连接器连接。
速率USB 2.0标准规定了以下三种传输速率:低速模式传输速率为1.5Mbps,多用于键盘和鼠标。
全速模式传输速率为12Mbps。
高速模式传输速率为480Mbps。
市场上关于“USB 2.0兼容”的概念有一些混乱。
这种混乱源于USB标准版本的升级,首先推出的是USB 1.0,紧接着有了比1.0更理想的USB1.1。
USB1.x支持低速和全速两种USB总线速度。
2.0版本增加了高速模式,完全替代了1.1。
所以,如果使用的是工作在12Mbps速率下的全速器件,则可认为它与USB 2.0兼容,即使许多人仅将USB 2.0用于高速(480Mbps)操作。
入-出方向USB系统以主机为中心。
因此,解释USB术语时假设面向的是主机。
所以,从主机侧看,“入”表示传输方向从外设到主机;同样,“出”表示传输方向从主机到外设。
端点端点位于USB外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO。
每个USB外设有一个唯一的地址,可能包含最多十六个端点。
主机通过发出器件地址和每次数据传输的端点号,向一个具体端点(FIFO)发送数据。
每个端点的地址为0到15,一个端点地址对应一个方向。
所以,端点2-IN与端点2-OUT完全不同。
每个器件有一个默认的双向控制端点0,因此不存在端点0-IN和端点0-OUT。
USB HID 设备类协议入门

一、应用场合USB HID类是比较大的一个类,HID类设备属于人机交互操作的设备。
用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。
另外,使用HID设备的一个好处就是,操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。
所以很多简单的USB设备,喜欢枚举成HID设备,这样就可以不用安装驱动而直接使用。
二、USB HID类可采用的通信管道所有的HID设备通过USB的控制管道(默认管道,即端点0)和中断管道与主机通信。
控制管道主要用于以下3个方面:•接收/响应USB主机的控制请示及相关的类数据•在USB主机查询时传输数据(如响应Get_Report请求等)•接收USB主机的数据中断管道主要用于以下两个方面:•USB主机接收USB设备的异步传输数据•USB主机发送有实时性要求的数据给USB设备从USB主机到USB设备的中断输出数据传输是可选的,当不支持中断输出数据传输时,USB主机通过控制管道将数据传输给USB设备。
三、与USB HID设备有关的描述符HID设备的描述符除了5个USB的标准描述符(设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符,见百合电子工作室的另一篇文章:USB开发基础--USB命令(请求)和USB描述符)外,还包括3个HID设备类特定描述符:HID描述符、报告描述符、实体描述符。
除了HID的三个特定描述符组成对HID设备的解释外,5个标准描述符中与HID设备有关的部分有:•设备描述符中bDeviceClass、bDeviceSubClass和bDeviceProtocol 三个字段的值必须为零。
•接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIOS启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为Boot Device。
usb标准请求命令

usb标准请求命令USB标准请求命令。
USB标准请求命令(Standard Request)是USB设备与主机之间进行通信的重要方式之一。
在USB通信协议中,设备可以通过发送请求命令向主机请求特定的操作,比如获取设备描述信息、设置设备参数等。
本文将对USB标准请求命令进行详细介绍,包括其格式、常见的请求类型以及具体的应用场景。
USB标准请求命令的格式。
USB标准请求命令由8个字节组成,其中包括以下几个字段:1. bmRequestType:请求类型字段,占据1个字节。
该字段包括以下几个部分:D7,数据传输方向,0表示主机到设备,1表示设备到主机。
D6~D5,请求类型,00表示标准请求,01表示类请求,10表示厂商请求。
D4~D0,接口号,用于指定设备的接口。
2. bRequest,请求码字段,占据1个字节。
该字段用于指定具体的请求操作,比如获取设备描述信息、设置设备地址等。
3. wValue,值字段,占据2个字节。
该字段用于传递请求操作的参数,具体含义由请求码决定。
4. wIndex,索引字段,占据2个字节。
该字段用于指定操作对象的索引,比如接口号、端点号等。
5. wLength,长度字段,占据2个字节。
该字段用于指定数据传输的长度。
常见的请求类型。
USB标准请求命令中,常见的请求类型包括以下几种:1. GET_DESCRIPTOR,获取设备描述信息。
设备可以通过该请求向主机获取设备的描述信息,比如设备的类别、厂商信息、产品信息等。
2. SET_ADDRESS,设置设备地址。
在设备初始化阶段,设备需要通过该请求向主机申请一个地址,以便主机能够识别该设备。
3. SET_CONFIGURATION,设置设备配置。
设备可以通过该请求通知主机其支持的配置,并请求主机进行配置。
4. GET_STATUS,获取设备状态。
设备可以通过该请求向主机获取设备的状态信息,比如连接状态、工作状态等。
5. SET_INTERFACE,设置设备接口。
USB HID报告及报告描述符简介

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。
USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。
USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。
输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。
报告是一个数据包,里面包含的是所要传送的数据。
输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。
而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。
通过它,USB HOST可以分析出报告里面的数据所表示的意思。
它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。
一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。
当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。
更详细的说明请参看USB HID协议,该协议可从下载。
USB报告描述符可以通过使用HID Descriptor tool来生成,这个工具可以到下载,为了方便大家,我顺便上传了一份。
/Upload/Blog/2007/4/2/af7c3443-ad61-4465-ADC7-a74d28bbc322.zip下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。
code char KeyBoardReportDescriptor[63] = {//表示用途页为通用桌面设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表示用途为键盘0x09, 0x06, // USAGE (Keyboard)//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application)//表示用途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//用途最小值,这里为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//用途最大值,这里为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最小值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最大值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为10x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输入用,变量,值,绝对值。
USB 开发基础--USB 命令(请求)和USB 描述符

无
(高字
节为 0,
低字节
表示要
设置的
配置值)
Set_Descriptor 00000000B
SET_DESCRIPTOR
描述表 零或语 种类(高 言标志 字节,见 表 5)和 索引(低 字节)
描述表长 描述 表
Set_Feature
00000000B 00000001B 00000010B
SET_FEATURE
1
bRequest
1
值 命令类型编码值(见表 3)
2
wValue
2
值 根据不同的命令,含义也不同
4
wIndex
索引或偏 根据不同的命令,含义也不同,主要用于传送索引 2
移 或偏 移
6
wLength
2
如有数据传送阶段,此为数据字节数。
下表列出了 USB 的 11 种标准命令
表 2、USB 的 11 种标准命令
偏移量 0 1 2 4 5 6 7
8
表 8、USB 配置描述符的结构
域
大小
值
描述
bLength
1
数字 此描述表的字节数长度。
bDescriptorType
1
常量 配置描述表类型(此处为 0x02)
wTotalLength
2
数字 此配置信息的总长(包括配置,接口,端
点和设备类及厂商定义的描述符)
bNumInterfaces
2
ID 厂商标志(由 USB-IF 组织赋值)
10
idProduct
2
ID 产品标志(由厂商赋值)
12
bcdDevice
2 BCD 码 设备发行号(BCD 码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当USB设备第一次连接到主机上时,要接收主机的枚举和配置,目的就是让主机知道该设备具有什么功能、是哪一类的USB设备、需要占用多少USB的资源、使用了哪些传输方式以及传输的数据量多大等等。
只有主机完全确认了这些信息后,设备才能真正开始工作。
这些信息是通过存储在设备中的USB描述符来体现的。
USB设备的属性包括很多内容,为了便于管理,USB协议1.1将这些信息做了分类,定义了很多种描述符,其中标准的描述符包括:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。
这些描述符之间具有一定的关系,设备描述符是最高级的描述符,而端点描述符是最低级的描述符。
每一个设备只有一个设备描述符,但设备描述符可以包含多个配置描述符;而一个配置描述符又可包含多个接口描述符;一个接口使用了几个端点,就有几个端点描述符。
字符串描述符是可选的。
所有的命令虽然有不同的数据和使用目的,有的USB命令结构是一样的。
控制传输的“初始设置步骤”中包含了1个8字节的DATA0数据包,这8字节的数据包是主机用来发送控制阶段中的请求命令的,而这些请求命令是主机配置USB设备的关键。
这里就来详细分析这8字节请求命令的结构和内容:
上表中bRequest为命令编码值,含意见表3:
4bNumberInterfaces1所支持的接口数
5bConfigurationValue1配置值
6iConfiguration1配置字符串描述符索引值
7bmAttributes1配置特性
8bMaxPower1所需要的最大总线电流(Value*2mA)
报告描述符:HID设备的报告描述符比较复杂也比较难理解。
报告描述符的语法不同于USB标准描述符,它是以项目(Items)方式排列而成,无一定的长度。
HID的报告描述符已经不是简单的描述某个值对应的某个固定的意义了,它已经能组合出多种情况,并且需要PC驱动程序提供parser解释器来对描述的设备情形进行重新解释,进而组合生成本HID硬件设备独特的数据流格式。
有关报告描述符的详细信息可以参考USB HID协议,USB协会提供一个HID描述符编辑工具称作HID Descriptor Tool,用它可以方便地生成我们所需要的报告描述符。