USB命令(请求)及标准描述符等相关归纳介绍
USB协议详解
![USB协议详解](https://img.taocdn.com/s3/m/e1d2cc3559fb770bf78a6529647d27284b7337fc.png)
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枚举过程详解及抓包分析)](https://img.taocdn.com/s3/m/042ba30632687e21af45b307e87101f69e31fbf7.png)
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设备请求命令
![标准的USB设备请求命令](https://img.taocdn.com/s3/m/0c1f13f8fab069dc50220176.png)
• 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术语详解](https://img.taocdn.com/s3/m/b30c0a9aa1116c175f0e7cd184254b35eefd1abc.png)
如果您刚开始接触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 设备类协议入门](https://img.taocdn.com/s3/m/2138e6e40975f46527d3e1b3.png)
一、应用场合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标准请求命令](https://img.taocdn.com/s3/m/7704b63030b765ce0508763231126edb6f1a760f.png)
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 HID报告及报告描述符简介](https://img.taocdn.com/s3/m/e7ad629851e79b89680226d8.png)
在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 描述符
![USB 开发基础--USB 命令(请求)和USB 描述符](https://img.taocdn.com/s3/m/3136377927284b73f2425026.png)
无
(高字
节为 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报告描述符详细解析](https://img.taocdn.com/s3/m/016264287f21af45b307e87101f69e314332fa37.png)
USB报告描述符详细解析
USB报告描述符是对USB设备上的功能指定的一系列键值对,它们描
述了USB设备提供的服务,以及它如何使用USB总线。
USB报告描述符可
以让计算机可以正确地识别USB设备,并且可以正确地处理它们发送的数据。
报告描述符由一个全局报告描述符和一个或多个功能报告描述符组成。
全局报告描述符描述了整个USB设备,包括设备的厂商ID,产品ID,序
列号,版本号等全局信息。
一个功能报告描述符描述一些功能,或者一组
相关功能。
功能报告描述符向计算机提供有关每个功能的信息,包括功能
类型,最大报告大小,功能字节级访问信息,功能特征集,报文信息等。
USB设备可以在接口上提供多种功能,因此,可以有一个或多个功能
报告,每个功能报告描述符都将描述特定的功能。
例如,触摸板USB设备
可能提供多个功能报告描述符,每个描述符描述一个功能,如触摸屏,键盘,鼠标,笔,滚轮等。
USB报告描述符需要遵守USB协议,确保报告描述符中包含的信息传
输正确。
USB报告描述符除了包括数据传输信息外,还会描述USB设备的
更多信息,如设备功能,设备参数,配置参数,接口位置,电源参数,安
全功能等。
USB的描述符详解总结
![USB的描述符详解总结](https://img.taocdn.com/s3/m/e4f3385afe00bed5b9f3f90f76c66137ee064f39.png)
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设备配置的描述文件,主要包括配置属性、总线电源类型、接口数。
USB协议基本知识
![USB协议基本知识](https://img.taocdn.com/s3/m/9811eb28effdc8d376eeaeaad1f34693daef1000.png)
USB协议基本知识USB 基本知识USB的重要关键概念:1、端点,位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)2、帧,时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个USB的传输动作。
3、上行、下行:设备到主机为上行,主机到设备为下行一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS 的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500MA(可以在编程中设置的,至于硬件的实现机制,就不要管它了)。
数据在USB线里传送是由低位到高位发送的。
USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。
下面简单介绍一下域、包、事务、传输,请注意他们之间的关系。
一、域是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式。
3、地址域(ADDR):七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址。
4、端点域(ENDP),四位,由此可知一个USB设备有的端点数量最大为16个。
5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800。
6、数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度7、校验域(CRC):对令牌包和数据包中非PID域进行校验的一种方法。
USB协议规范
![USB协议规范](https://img.taocdn.com/s3/m/219bb1c9c1c708a1294a4419.png)
USB协议规范1 USB的基本特征1.1 USB系统结构1.2 机械特性、电气特性1.3 USB电源1.4 USB信号2 USB通信协议2.1 USB事务处理2.2 USB数据传输类型2.3 USB描述符2.4 USB设备请求2.5 USB设备枚举USB系统的设计必须遵循USB的协议规范,因此对其进行一定的介绍,只有理解了USB的协议规范内容,才能正确的进行USB系统的设计。
1 USB的基本特征1.1 USB系统结构在终端用户看来,USB系统就是外设通过一根USB电缆和PC机连接起来。
USB在外设和PC机之间提供通信服务,通常外设称为USB设备,把其所连接的PC机称为主机,并且把指向USB主机的数据传输称为上行通信,把指向USB设备的数据传输称为下行通信。
USB主机及主控制器/根集线器(host controller/root hub)是整个USB 系统的大脑,负责完成主机和设备间的数据传输。
USB根集线器提供USB连接端口给USB设备或USB集线器使用。
USB设备(USB device)指各种类型的USB外设。
它们可以与USB主机交互数据信息,并为主机提供额外的功能,但在使用前主机必须对其进行配置。
USB 设备按功能不同,可以分为集线器和功能设备两大类。
其中,集线器为USB系统提供额外的连接点,它使得一个USB端口可以连接多个设备;功能设备为主机提供额外的功能,如USB鼠标,USB键盘等等。
USB的链接从逻辑上看每个USB设备都是直接和主机相连进行数据传输的,但从物理结构来看。
USB链接采用的是呈阶梯式的星状排列(Tiered Star Topology),如图1所示。
图中整个USB总线拓扑体系由三个元素组成:主机(host)、集线器(Hub)和功能设备(Function)。
Hub是每个星型结构的中心,用于连接主机和设备。
在目前的PC应用中,PC就是主机(Host)和根集线器(Root Hub),用户可以将外设或附加的Hub与之连接,一台含有一个USB主控制器的PC机最多可以连接126个外设。
USB描述符的分类与介绍讲解
![USB描述符的分类与介绍讲解](https://img.taocdn.com/s3/m/49458d36647d27284b7351ea.png)
USB描述符的分类详解所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。
描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。
描述符分为三大类:标准描述符、设备类描述符、厂商描述符。
标准描述符:除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符设备类描述符可划分为:集线器类描述符、人机接口类描述符每个USB设备都有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符;而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符;在接口描述符里面又定义了该接口有多少个端点,每个端点对应一个端点描述符;端点描述符定义了端点的大小,类型等等。
由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。
在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。
其中可能还会有获取设备序列号,厂商字符串,产品字符串等1 标准描述符标准描述符是指一组描述符,包括设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符和其他速率配置描述符。
这七种描述符具有类似的格式,比如说它们的第一个字段都是bLength,第二个字段都是bDescriptorType。
七种描述符在使用时以第二字段(bDescriptorType)来区分,描述符类型与对应的bDescriptorType字段值对应关系为:1.1 设备描述符设备描述符描述的是设备的整体信息,与设备本身一一对应,一个设备只能有一个设备描述符。
在主机对USB设备枚举的过程中,首先要做的就是获取设备描述符,以对设备有一个整体的了解。
USB命令及标志符解释
![USB命令及标志符解释](https://img.taocdn.com/s3/m/d9751b1f59eef8c75fbfb31c.png)
Brequest GET_STATUS CLEAR_FEATURE
为将来保留 SET_FEATURE
为将来保留 SET_ADDRESS GET_DESCRIPTOR SET_DESCRIPTOR GET_CONFIGURATION SET_CONFIGURATION GET INTERFACE SET_INTERFACE SYNCH_FRAME
一个 GetStatus ( )的接口请求返回如图 8-5 的信息。
D7
D6
D5
D4
D3
D2
D1
D0
保留(为零)
D15
D14
D13
D12
D11
D10
D9
D8
保留(为零)
图 8-5 GetStatus()发向接口时返回信息
一个 Get Statue( )的端节点请求返回如图 8-6 所示信息。
D7
D6
接受者
值
设备
1
端点
0
表 8-6 标准特性选择符
9.4.1 清除特性(ClearFeature()) 这个请求是被用来清除一个指定的特性。 wValue 中的特性选择符的值必须根据接收者来设定适当的值。接收者是设
备要用设备特性选择符,是接口就必须用接口特性选择符,是端结点就要用端节 点特性描述符。
参照表 8-6 来看选择符与接收者的对应关系。 一个 ClearFeature( )请求所指的特性如果不能被清除,不存在或指的是不 存在的接口或结点号,会产生 RequestError 错误。 如果 wLength 不为 0,设备响应无定义。 缺省状态:当设备处于缺省状态时,对此请求的反应无定义。 地址状态:在设备处于地址状态时这个请求是合法的,但如果该请求指的是 接口或是非零号端结点,会引起请求错误。 配置状态:在此状态下,该请求合法。 9.4.2 取得配置(GetConfiguration()) 此请求返回当前设备配置值。 如果返回 0 值表明设备未配置。 如果 wValue, wIndex, wLength 的值与上面表中不同,设备响应无定义。 缺省状态:该请求响应无定义 地址状态:返回 0 值 配置状态:非 0 的 bConfigurationValue 值被返回 9.4.3 取得描述符
通俗易懂的USB协议详解
![通俗易懂的USB协议详解](https://img.taocdn.com/s3/m/17ef303fa36925c52cc58bd63186bceb19e8edc2.png)
通俗易懂的USB协议详解USB(Universal Serial Bus)是一种用于计算机外部设备的通信接口标准。
它是一种快速、易用和多功能的连接标准,广泛应用于各种设备,如键盘、鼠标、打印机、存储设备等。
本文将详细解释USB协议的工作原理和通信过程。
USB的工作原理:USB协议使用主从架构,其中主机(Host)是发起数据传输的设备,而从机(Peripheral)是被动等待命令的设备。
通信过程包括主机发送命令和从机返回响应。
USB分为各个版本,每个版本都有自己的规范和特性。
USB1.0和1.1的数据传输速率为1.5Mbps和12Mbps,USB2.0提高到了480Mbps,USB3.0达到了5Gbps,USB3.1则有10Gbps的速率。
USB Type-C是一种新的接口规范,支持更高的传输速率和更多的功能。
USB传输类型:USB传输类型主要有三种:控制传输(Control Transfer)、批量传输(Bulk Transfer)和中断传输(Interrupt Transfer)。
控制传输是主机和从机之间交换控制命令的过程,用于配置从机和获取状态信息。
这种传输类型速度较慢,但可靠性高。
常见的示例是设备初始化和配置。
批量传输用于大容量数据的传输,速度较快,但可靠性较低。
常用于大容量存储设备和打印机等。
中断传输用于低延迟和实时数据传输。
它在通信过程中不需要确定发送/接受数据的时间间隔,但传输速率较低。
示例包括鼠标和键盘输入。
USB通信过程:握手阶段是主机向从机发送命令,并等待从机的响应。
主机发送一个命令包含特定的命名和数据,从机接收并处理命令,然后发送响应给主机。
握手阶段用于确保主机和从机都能够正常通信。
命令阶段是主机和从机之间的数据传输,用于配置设备和请求数据。
命令由特定的标识符和参数组成,从机根据命令执行相应的操作,并返回主机所需的数据。
数据传输阶段是指在命令阶段之后,如果需要传输大量数据时的过程。
USB基础知识
![USB基础知识](https://img.taocdn.com/s3/m/c9e0da4c336c1eb91a375da4.png)
1.拓扑结构USB是我们经常用的,只是看到USB线一头接着主机,一头接着USB设备。
但是设备是如何通信的呢?电气上的连接是怎么样的还不是很清楚?USB的可见的拓扑结构很好理解,就是一个USB host 接若干个Hub, hub下面接若干个USB Device。
2.枚举步骤USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态(Attached)和挂起状态(Suspend))。
Attached和Powered状态不难理解:当一个设备被正确插入到主机的USB接口时,就处于Attached(连接)的状态。
设备连接好了,USB主机识别了设备,同时没有对设备进行请求,USB设备就处于Suspended(挂起)状态。
下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。
设备必须在任何时候都能正确处理所有的主机请求。
1. 用户把USB设备插入USB端口或给系统启动时设备上电这里指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。
Hub给端口供电,连接着的设备处于上电状态。
2. Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu。
当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。
hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口(全速、高速设备的区分在后面的章节中描述)。
检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。
USB设备请求和描述符整理
![USB设备请求和描述符整理](https://img.taocdn.com/s3/m/8b426a14ff00bed5b9f31da2.png)
设备处于缺省状态时,GetConfiguration 请求无效。
8. SetConfiguration 请求
bmRequestType bRequest
wValue
wIndex
wLength
数据阶段
00H
09H
配置值
0
0
无
bRequest 指明请求号,SetConfiguration 的请求号为 09H。
描述符的 bEndpointAddress 字段值。
wLength 指明返回数据包的长度。
数据阶段:
对于设备状态,返回两个字节中只有 D0 和 D1 位有效。D0 指明 USB 设备当前是否为自供电,0 表
示总线供电,1 表示自供电。D1 指明 USB 设备当前是否支持远程唤醒功能,0 表示该功能被禁止,1 表
1. GetStatus 请求
bmRequestType bRequest
wValue
wIndex
wLength
数据阶段
80H
0000H
设备状态
81H
00H
0000H
接口号
0002H
接口状态
82H
端点号
端点状态
bmRequestType 为请求属性,每位定义如下(以下每个请求不再重复说明):
D7:传输方向
所以设备限定描述符用以指出另一传输速率下该设备的总体信息。
地址偏移量
字段名
长度(字节)
说明
0
bLength
1
描述符长度(字节):0AH
1
bDescriptorType
1
描述符类型:设备限定=06H
2
bcdUSB
USB描述符的分类与介绍讲解
![USB描述符的分类与介绍讲解](https://img.taocdn.com/s3/m/c74ef31176232f60ddccda38376baf1ffc4fe339.png)
USB描述符的分类与介绍讲解
USB描述符是用于计算机与外围设备之间进行沟通的一种机制,它的
作用是将计算机的设备,例如USB鼠标、USB打印机等,定义为外围设备,以便于计算机可以理解外围设备的特性,并能够与它们进行交互。
计算机
访问设备的方式就是通过USB描述符,因此USB描述符对于实现USB设备
的连接外部设备至关重要。
此外,USB描述符中还定义了不同设备的特性,以便于计算机可以更
好地识别外围设备,从而便于系统更好地工作。
USB描述符可以分为三类:第一类是基本描述符,主要用于描述USB设备的基本信息,如设备的
类别、版本号等,其主要目的是支持系统驱动程序的正确加载,这样就可
以使外接设备与系统进行沟通。
第二类是特性描述符,其主要用于对USB设备的特性进行描述,例如
电压、电流、数据传输速率等,这样就可以保证USB设备在使用时能得到
最佳的性能。
第三类是配置描述符,它是用于描述USB设备配置的,通常用于说明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,用它可以方便地生成我们所需要的报告描述符。