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 码)
USB报告描述符详细解析
USB报告描述符详细解析
USB报告描述符是对USB设备上的功能指定的一系列键值对,它们描
述了USB设备提供的服务,以及它如何使用USB总线。
USB报告描述符可
以让计算机可以正确地识别USB设备,并且可以正确地处理它们发送的数据。
报告描述符由一个全局报告描述符和一个或多个功能报告描述符组成。
全局报告描述符描述了整个USB设备,包括设备的厂商ID,产品ID,序
列号,版本号等全局信息。
一个功能报告描述符描述一些功能,或者一组
相关功能。
功能报告描述符向计算机提供有关每个功能的信息,包括功能
类型,最大报告大小,功能字节级访问信息,功能特征集,报文信息等。
USB设备可以在接口上提供多种功能,因此,可以有一个或多个功能
报告,每个功能报告描述符都将描述特定的功能。
例如,触摸板USB设备
可能提供多个功能报告描述符,每个描述符描述一个功能,如触摸屏,键盘,鼠标,笔,滚轮等。
USB报告描述符需要遵守USB协议,确保报告描述符中包含的信息传
输正确。
USB报告描述符除了包括数据传输信息外,还会描述USB设备的
更多信息,如设备功能,设备参数,配置参数,接口位置,电源参数,安
全功能等。
USB的描述符详解总结
USB的描述符详解总结
USB是一种通用串行总线,全称Universal Serial Bus,通常被称为USB。
它是由Intel公司于1996年推出的,由7组信号和4根线组成,支持高速数据传输。
使用USB接口,各个计算机硬件设备可以连接在一起,实现数据的传输和共享。
USB描述符是一类标准文件,是用来描述USB设备的硬件特性,如设备的功能、总线的速率等。
它由USB设备厂商设计,是由设备驱动程序识别和使用USB设备的关键文件。
据统计,USB描述符已经在全球范围内普及,可以应用于任何USB设备。
USB描述符通常由Device Descriptor(设备描述符)、Configuration Descriptor(配置描述符)、Interface Descriptor(接口描述符)、Endpoint Descriptor(端点描述符)和Class Descriptor (类描述符)组成。
这5种描述符是USB设备描述文件的基本类型,它们描述了USB设备的功能、规格、总线协议等信息。
Device Descriptor(设备描述符)是USB设备的基本描述文件,主要包括设备的VID(vendor ID,厂商编号)、PID(产品编号)、Class、Subclass、Protocol(协议版本)、MaxPower(最大功耗)等。
设备描述符是其他描述符的基础,可以用来识别和枚举设备。
Configuration Descriptor(配置描述符)是描述USB设备配置的描述文件,主要包括配置属性、总线电源类型、接口数。
- 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,用它可以方便地生成我们所需要的报告描述符。