USB字符串描述符

合集下载

USB的描述符详解总结

USB的描述符详解总结

USB的描述符与命令请求详解一、描述符1.什么是描述符所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。

2.描述符的作用描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。

3.描述符的分类描述符分为三大类:标准描述符、设备类描述符、厂商描述符。

除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。

在USB1.0中规定了5种标准的描述符:设备描述符配置描述符接口描述符端点描述符字符串描述符规定的设备类描述符有:集线器类描述符、人机接口类描述符。

下表是三种描述符的类型值:4.使用的几种类设备类DeviceClass下表是设备类值的含义。

接口类InterfaceClass下表是接口类值的含义。

类的交叉与独享在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。

而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义)【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有:02h ------------- 通信及CDC控制类;DCh ------------ 诊断设备类;EFh ------------- 混杂设备类;FFh ------------- 厂商定义的设备类。

5.标准描述符设备描述符【说明1:】当设备类型bDeviceClass = 0时,说明类型将由接口描述符中定义的为准。

【说明2:】从设备描述符表格中可知,有3个索引值:厂商信息索引、产品信息索引、设备序列号索引,这意味着,将有3个字符串描述符为其准备。

在USB中_USB_HOST是通过各种描述符来识别设备的

在USB中_USB_HOST是通过各种描述符来识别设备的

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来生成,这个工具可以到下载,为了方便大家,我顺便上传了一份。

下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。

code char KeyBoardReportDescriptor[63] = {5A5A5A7f1.1.0CTL a3 00 00 00 01 00 04 00 GET STATUS 17usDI 01 01 01 00 .... 27u sCTL 23 01 10 00 01 00 00 00 CLEAR FEATUR E 110usCTL a3 00 00 00 01 00 04 00 GET STATUS 56usDI 01 01 00 00 .... 14u sCTL 23 03 04 00 01 00 00 00 SET FEATURE 109msDI 02 . 90ms CTL a3 00 00 00 01 00 04 00 GET STATUS 23usDI 03 01 10 00 .... 22u sCTL 23 01 14 00 01 00 00 00 CLEAR FEATUR E 8usCTL a3 00 00 00 01 00 04 00 GET STATUS 19msDI 03 01 00 00 .... 34us ......!.... 67msCTL a3 00 00 00 01 00 04 00 GET STATUS 49usDI 03 01 00 00 .... 27us CTL 23 03 04 00 01 00 00 00 SET FEATURE 24usDI 02 . 112ms CTL a3 00 00 00 01 00 04 00 GET STATUS 21usDI 03 01 10 00 .... 25us CTL 23 01 14 00 01 00 00 00 CLEAR FEATUR E 8us......!.... 75ms02 01 .. ...... 50msCTL a3 00 00 00 02 00 04 00 GET STATUS 214msDI 00 01 00 00 .... 34us ......!.... 67ms02 01 .. ...... 50ms............. 83ms50 00 07 05 82 02 40 00 00 07 05 02 02 40 00 00 P..... @......@..45ms.. 53ms46ms70ms32 00 2.53ms.......00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 ... $...........以下是我在做USB键盘时,通过串口发回的调试信息,从这也可以看到枚举的过程。

usb描述符含义

usb描述符含义

usb描述符含义USB描述符是一种定义了USB设备能力和特征的数据结构。

它通过描述设备的不同方面,例如设备的配置、接口和端点规范,为计算机系统提供了与USB设备进行通信的方法。

每个USB设备都包含一个或多个描述符,这些描述符以二进制形式存储在设备的固件中。

USB描述符的含义可以从以下几个方面来解释。

首先,设备描述符是USB设备的一个重要组成部分。

它包含了设备的厂商和产品ID、USB规范版本号、设备类别、设备能力以及设备的供电要求等信息。

通过读取设备描述符,计算机系统可以识别并与USB设备进行通信。

其次,配置描述符描述了设备的配置信息。

它包含了配置的唯一标识符、供电要求、接口数目以及所需的带宽等信息。

计算机系统在与USB设备进行通信时,会根据配置描述符来分配资源并设置设备的工作模式。

接口描述符提供了关于设备接口的详细信息。

它包含了接口类别、子类别、协议以及与接口关联的端点数目等信息。

通过读取接口描述符,计算机系统可以了解设备接口的功能和特性。

最后,端点描述符描述了设备端点的特性。

端点是USB设备和计算机系统之间进行数据传输的通道。

端点描述符包含了端点的类型、方向、最大数据包长度以及传输速率等信息。

计算机系统通过读取端点描述符,了解设备端点的能力和规范,以便进行数据的传输和控制。

总之,USB描述符作为USB设备的重要组成部分,提供了与计算机系统进行通信和操作的必要信息。

通过解读这些描述符,计算机系统可以有效地管理和控制USB设备,实现数据传输和设备控制的功能。

USB设备的基本概念

USB设备的基本概念

USB设备的基本概念在终端⽤户看来,USB设备为主机提供了多种多样的附加功能,如⽂件传输,声⾳播放等,但对USB主机来说,它与所有USB设备的接⼝都是⼀致的。

⼀个USB设备由3个功能模块组成:USB总线接⼝、USB逻辑设备和功能单元。

这⾥的USB总线接⼝指的是USB设备中的串⾏接⼝引擎(SIE);USB逻辑设备被USB系统软件看作是⼀个端点的集合;功能单元被客户软件看作是⼀个接⼝的集合。

SIE、端点和接⼝都是USB设备的组成单元。

为了更好地描述USB设备的特征,USB提出了设备架构的概念。

从这个⾓度来看,可以认为USB设备是由⼀些配置、接⼝和端点组成,即⼀个USB设备可以含有⼀个或多个配置,在每个配置中可含有⼀个或多个接⼝,在每个接⼝中可含有若⼲个端点。

其中,配置和接⼝是对USB设备功能的抽象,实际的数据传输由端点来完成。

在使⽤USB设备前,必须指明其采⽤的配置和接⼝。

这个步骤⼀般是在设备接⼊主机时设备进⾏枚举时完成的。

USB设备使⽤各种描述符来说明其设备架构,包括设备描述符、配置描述符、接⼝描述符、端点描述符和字符串描述符,他们通常被保存在USB设备的固件程序中。

设备描述符设备代表⼀个USB设备,它由⼀个或多个配置组成。

设备描述符⽤于说明设备的总体信息,并指明其所含的配置的个数。

⼀个USB设备只能有⼀个设备描述符。

配置描述符⼀个USB设备可以包含⼀个或多个配置,如USB设备的低功耗模式和⾼功耗模式可分别对应⼀个配置。

在使⽤USB设备前,必须为其选择⼀个合适的配置。

配置描述符⽤于说明USB设备中各个配置的特性,如配置所含接⼝的个数等。

USB设备的每⼀个配置都必须有⼀个配置描述符。

接⼝描述符⼀个配置可以包含⼀个或多个接⼝,例如对⼀个光驱来说,当⽤于⽂件传输时,使⽤其⼤容量存储接⼝;⽽当⽤于播放CD时,使⽤其⾳频接⼝。

接⼝是端点的集合,可以包含⼀个或多个可替换设置,⽤户能够在USB处于配置状态时改变当前接⼝所含的个数和特性。

usb描述符含义

usb描述符含义

usb描述符含义
USB(Universal Serial Bus)描述符是在USB设备和主机之间进行通信时使用的数据结构。

USB 描述符包含有关USB设备或设备的某个接口的信息,例如设备的厂商ID、产品ID、设备类别、端点信息等。

USB描述符通常由设备在被连接到主机时发送给主机。

以下是常见的USB描述符及其含义:
1. 设备描述符(Device Descriptor):
-包含设备的基本信息,如USB规范版本、设备类别、厂商ID、产品ID、设备版本号等。

2. 配置描述符(Configuration Descriptor):
-描述设备的一个或多个配置,每个配置可能包含一个或多个接口。

3. 接口描述符(Interface Descriptor):
-描述一个配置中的一个接口,包括接口的数量、接口的类别、子类别和协议。

4. 端点描述符(Endpoint Descriptor):
-描述接口上的每个端点(endpoint),包括端点的地址、传输类型(控制、批量、等等)、最大数据包大小等信息。

5. 字符串描述符(String Descriptor):
-包含设备的可读字符串信息,例如制造商名称、产品名称等。

这些描述符是通过设备的控制端点(Control Endpoint)进行交互的,控制端点使用标准的USB控制请求(Control Requests)来获取有关设备和接口的信息。

USB描述符是为了让主机能够正确地配置和与USB设备进行通信而设计的,它们提供了有关设备和接口的重要信息,以确保设备与主机之间的兼容性。

USB设备请求和描述符整理

USB设备请求和描述符整理

USB 设备请求和描述符整理一.标准USB 设备请求请求名 请求号 功能GetStatus 00H 读取设备、接口或端点的状态 ClearFeature 01H 清除或禁止设备、接口或端点的某些特性 SetFeature 03H 设置或使能设备、接口或端点的某些特性SetAddress 05H 分配设备地址 GetDescriptor 06H 读取指定描述符SetDescriptor 07H 更新已有的描述符或添加新的描述符GetConfiguration 08H 读取USB 设备当前的配置值 SetConfiguration 09H 为USB 设备选择一个合适的配置 GetInterface 0AH 读取指定接口的当前可替换设置值 SetInterface 0BH 为指定接口选择一个合适的可替换设置SynchFrame0CH读取同步端点所指定的帧序号1. GetStatus 请求 bmRequestTypebRequest wValue wIndex wLength 数据阶段 80H 0000H 设备状态 81H 接口号 接口状态 82H00H0000H端点号0002H端点状态bmRequestType 为请求属性,每位定义如下(以下每个请求不再重复说明):D7:传输方向0=主机至设备;1=设备至主机 D6..5:种类 0=标准;1=类; 2=厂商;3=保留 D4..0:接受者 0=设备;1=接口 ; 2=端点;3=其他 4..31 保留bRequest 指明请求号,GetStatus 的请求号为00H 。

wValue 定义为0。

wIndex 字段的“接口”和“端点”取值分别对应USB 接口描述符的bInterfaceNumber 字段值和端点描述符的bEndpointAddress 字段值。

wLength 指明返回数据包的长度。

数据阶段:对于设备状态,返回两个字节中只有D0和D1位有效。

USB学习

USB学习
bmAttributes
1
位图
供电模式的选择
8
MaxPower
1
mA
设备从总线提取的最大电流
字段名称
说明
bLength
0x09
bDescriptorType
0x02
wTotalLength
返回的所有描述符(配置、接口和端点)的数据大小总和
bNumInterfaces
bConfigurationValue
数码相机控制器
影像设备类
USB Camera Controller
扫描仪控制器
影像设备类
视频控制器
影像设备类
USBVedio Controller
调制解调器
USB通信设备
USB Modern
USB-USB桥
通过USB实现PC互连
USB to USB bridge
字段名称
说明
bLength
0x12
bDescriptorType
U盘
Usb flash controller
ICSI, ALI,ALCOR
IDE控制器
移动硬盘
并口桥
USB转并口芯片
Usb to parallel bridge
串口桥
USB转串口芯片
Usb to serial bridge
读卡器
智能卡设备类
Usb smart card
ALI,ALCOR
音频控制器
音频设备类
设置(SETUP)
1101
启动一个方向为通过控制传输管道进行的数据传输,并且包含了设备地址和端点信号
数据包
数据0(DATA0)
0011
偶数据包

图解USB协议之三 USB标准描述符

图解USB协议之三 USB标准描述符
(图 4)(本数据由 HD-USB12 USB 协议分析仪采集) 3、随后为配置描述符、接口描述符及端点描述符见图 5
欢迎访问avatar的电子博客:EET站点:/BLOG_zhou36_301.HTM EDN站点:/avatar/
1 协议 协议码:bInterfaceClass 和
bInterfaceSubClass 域的值而定.如果一个
接口支持设备类相关的请求此域的值指出了设备
类说明中所定义的协议.
8 iInterface
1 索引 描述此接口的字串描述符的索引值。
4、标准端点描述符
偏移量

0
bLength
1
bDescriptorType
欢迎访问avatar的电子博客:EET站点:/BLOG_zhou36_301.HTM EDN站点:/avatar/
Avatar 的邮箱:avatar_1210@
图解 USB 协议之三 USB 标准描述符
下面对 USB 标准描述符进行说明。
一、USB 标准描述符
1、标准设备描述符
偏移量

0 bLength
大小 1
值 数字
描述 描述符的大小=12H
1 bDecriptorType 2 bcdUSB
4 bDeviceClass
1 常量 设备描述符类型=01H
2 BCD 码 此设备与描述符兼容的 USB 设备说明版本号(BCD 码)
2 … 2
值 N+2 常量
数字 … 数字
描述 描述符的大小 字串描述符类型=03H
语言标识(LANGID)码 0
… 语言标识(LANGID)码 X
6、UNICODE 字串描述符
欢迎访问avatar的电子博客:EET站点:/BLOG_zhou36_301.HTM EDN站点:/avatar/

STM32USB设备描述符、配置描述符、端点描述符含义

STM32USB设备描述符、配置描述符、端点描述符含义

STM32USB设备描述符、配置描述符、端点描述符含义查了⼀整天的资料,⾃⼰把不懂的全部试了⼀遍⼀下是程序以及注释/* USB设备描述符*/const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] ={0x12, /*bLength 描述符的长度*/USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的类型(设备描述符为0x01)*/0x00, /*bcdUSB USB协议的版本*/0x02,0x00, /*bDeviceClass 类代码*/0x00, /*bDeviceSubClass ⼦类代码*/0x00, /*bDeviceProtocol 设备所使⽤的协议*/0x40, /*bMaxPacketSize 端点0的最⼤包长*//*idVendor ⼚商ID*/LOBYTE(USB_VID),HIBYTE(USB_VID),/*idProduct 设备ID*/LOBYTE(USB_PID),HIBYTE(USB_PID),0x00, /*bcdDevice rel 设备版本号*/0x02,1, /*描述⽣产⼚家的字符串描述符的索引*/2, /*描述产品的字符串描述符的索引*/3, /*产品序列号的字符串描述符的索引*/0x01/*bNumConfigurations 可能的配置数*/}; /* CustomHID_DeviceDescriptor *//* USB配置描述符 *//* All Descriptor s (Configuration, Interface, Endpoint, Class, Vendor */const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] ={//以下为配置描述符0x09, /* bLength: 端点描述符长度*/USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型(配置描述符为0x02) */LOBYTE(CUSTOMHID_SIZ_CONFIG_DESC),/* wTotalLength: 配置描述符集合总长度 */HIBYTE(CUSTOMHID_SIZ_CONFIG_DESC),0x01, /* bNumInterfaces: 该配置所⽀持的接⼝数*/0x01, /* bConfigurationValue: 该配置的值*/0x00, /* iConfiguration: 描述配置的字符串描述符的索引*/0xA0, /* bmAttributes:该设备的属性(总线供电,⽀持远程唤醒)bit 4 ... 0: 保留(必须为0)bit 5: 1表⽰⽀持远程唤醒bit 6: 1表⽰设备是⾃供电 0表⽰是总线供电bit 7: 保留(必须为1) */0xC8, /* MaxPower 设备所需要的电流(单位为2mA)400 mA*///以下为接⼝描述符0x09, /* bLength: 接⼝描述符长度*/USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: 描述符类型(接⼝描述符为0x04)*/0x00, /* bInterfaceNumber: 该接⼝编号(从0开始) */0x00, /* bAlternateSetting: 该接⼝的备⽤编号 */0x02, /* bNumEndpoints 该接⼝所使⽤的端点数*/0x03, /* bInterfaceClass: 该接⼝所使⽤的类*/0x00, /* bInterfaceSubClass : 该接⼝所使⽤的⼦类 */0x00, /* nInterfaceProtocol : 该接⼝所使⽤的协议 0 =⽆,1 =键盘,2 =⿏标*/0, /* iInterface: 描述该接⼝的字符串描述符的索引 *///以下为HID描述符0x09, /* bLength: HID描述符长度 */HID_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型(接⼝描述符为0x21) */0x10, /* bcdHID: HID 协议版本号 */0x01,0x00, /* bCountryCode: 国家代码 (美式键盘代码为0x21)*/0x01, /* bNumDescriptors:下级描述符的数量*/0x22, /* bDescriptorType 下级描述符的类型*/LOBYTE(CUSTOMHID_SIZ_REPORT_DESC),/* wItemLength: 下级描述符的长度*/HIBYTE(CUSTOMHID_SIZ_REPORT_DESC),//以下为端点描述符/******************** Descriptor of Custom HID endpoints ******************/0x07, /* bLength:端点描述符长度 */USB_ENDPOINT_DESCRIPTOR_TYPE, /* 描述符类型(端点描述符为0x05)*/0x81, /* bEndpointAddress:端点地址bit 3 ... 0:端点号bit 6 ... 4:保留(设置为0)bit 7:0(OUT),1(IN)*/0x03, /* bmAttributes: 端点属性bit 1 ... 0:表⽰该端点的传输类型0 控制传输1 等时传输2 批量传输3 中断传输bit 7 ... 2:如果该端点是⾮等时传输则bit 7 ~ 2 保留(设置为0)如果该端点是等时传输bit 3 ... 2:表⽰同步类型0 ⽆同步1 异步2 适配3 同步bit 5 ... 4:表⽰⽤途0 数据端点1 反馈端点2 暗含反馈的数据端点3 保留bit 7 ... 6:保留*/0x40, /* wMaxPacketSize: 该端点⽀持的最⼤包长度 */0x00,0x0A, /* bInterval:端⼝的查询时间*///以下为输出端点1描述符0x07, /*bLength:端点描述符⼤⼩ */USB_ENDPOINT_DESCRIPTOR_TYPE, /* 端点描述符类型*/0x01, /* bEndpointAddress:端点地址bit 3 ... 0:端点号bit 6 ... 4:保留bit 7:0(OUT),1(IN)*/0x03, /* bmAttributes: 中断端点 */0x40, /* wMaxPacketSize: 最多64个字节 */0x00,0x0A, /* bInterval: 轮询间隔(20毫秒)*/};。

USB报告描述符详细解析

USB报告描述符详细解析

USB报告描述符详细解析
USB报告描述符是对USB设备上的功能指定的一系列键值对,它们描
述了USB设备提供的服务,以及它如何使用USB总线。

USB报告描述符可
以让计算机可以正确地识别USB设备,并且可以正确地处理它们发送的数据。

报告描述符由一个全局报告描述符和一个或多个功能报告描述符组成。

全局报告描述符描述了整个USB设备,包括设备的厂商ID,产品ID,序
列号,版本号等全局信息。

一个功能报告描述符描述一些功能,或者一组
相关功能。

功能报告描述符向计算机提供有关每个功能的信息,包括功能
类型,最大报告大小,功能字节级访问信息,功能特征集,报文信息等。

USB设备可以在接口上提供多种功能,因此,可以有一个或多个功能
报告,每个功能报告描述符都将描述特定的功能。

例如,触摸板USB设备
可能提供多个功能报告描述符,每个描述符描述一个功能,如触摸屏,键盘,鼠标,笔,滚轮等。

USB报告描述符需要遵守USB协议,确保报告描述符中包含的信息传
输正确。

USB报告描述符除了包括数据传输信息外,还会描述USB设备的
更多信息,如设备功能,设备参数,配置参数,接口位置,电源参数,安
全功能等。

USB设备键值表描述符说明

USB设备键值表描述符说明

3.1 USB鼠标发送的数据结构USB鼠标发送的数据为4字节,在第1字节中,bit0为左键(1为按下,0为未按下),bit1为右键(1为按下,0为未按下),bit3为中键(1为按下,0为未按下),剩余五位为0,这是为了凑够1字节而填充一些数据。

第2字节表示鼠标移动的X轴,是有符号的,正值表示鼠标向正半轴移动的相对距离,负值表示鼠标向负半轴移动的相对距离。

第3字节表示鼠标移动的Y轴,是有符号的,正值表示鼠标向正半轴移动的相对距离,负值表示鼠标向负半轴移动的相对距离。

第4字节表示滚轮移动的位移,是有符号的,正值表示滚轮向上移动的相对距离,负值表示滚轮向下移动的相对距离。

3.2 USB键盘发送和接收的数据结构USB键盘发送的数据为8字节,第1字节中的8位分别代表8个特殊按键:左Shift、左Ctrl、左Windows、左Alt、右Shift、右Ctrl、右Windows、右Alt;第2字节为0,该字节为保留字节,留给OEM使用;最后6个字节表示剩余的普通按键(键值表见下一节),也就是说标准USB键盘一次最多按下6个按键。

USB键盘接收的数据为1字节,是用来点亮键盘上的LED灯的控制信号,该字节的前5位依次表示数字键盘灯、大写锁定灯、滚动锁定灯以及日语、韩语的语种切换灯。

该字节的后3位为保留字节,和前面5位凑成1字节。

3.2 USB键盘的键值#define KEY_NULL 0x00#define KEY_A 0x04 //A#define KEY_B 0x05 //B#define KEY_C 0x06 //C#define KEY_D 0x07 //D#define KEY_E 0x08 //E#define KEY_F 0x09 //F#define KEY_G 0x0A //G#define KEY_H 0x0B //H#define KEY_I 0x0C //I#define KEY_J 0x0D //J#define KEY_K 0x0E //K#define KEY_L 0x0F //L#define KEY_M 0x10 //M#define KEY_N 0x11 //N#define KEY_O 0x12 //O#define KEY_P 0x13 //P#define KEY_Q 0x14 //Q#define KEY_R 0x15 //R#define KEY_S 0x16 //S#define KEY_T 0x17 //T#define KEY_U 0x18 //U#define KEY_V 0x19 //V#define KEY_W 0x1A //W#define KEY_X 0x1B //X#define KEY_Y 0x1C //Y#define KEY_Z 0x1D //Z#define KEY_1 0x1E //1 !#define KEY_2 0x1F //2 @#define KEY_3 0x20 //3 ##define KEY_4 0x21 //4#define KEY_5 0x22 //5#define KEY_6 0x23 //6#define KEY_7 0x24 //7#define KEY_8 0x25 //8#define KEY_9 0x26 //9#define KEY_0 0x27 //0#define KEY_ENTER 0x28#define KEY_ESC 0x29#define KEY_BACKSPACE 0x2A#define KEY_TAB 0x2B#define KEY_SPACE 0x2C#define KEY_SUB 0x2D // - and _ #define KEY_EQUAL 0x2E // = and + #define KEY_LEFT_BRACKET 0x2F // [ and { #define KEY_RIGHT_BRACKET 0x30 // ] and } #define KEY_VERTICAL_LINE 0x31 // "\" and | #define KEY_WAVE 0x32 // ` and ~#define KEY_SEMICOLON 0x33 // ; and : #define KEY_QUOTE 0x34 // ' and " #define KEY_THROW 0x35 // ~ and ` #define KEY_COMMA 0x36 // , and < #define KEY_DOT 0x37 // . and > #define KEY_QUESTION 0x38 // / and ? #define KEY_CAPS_LOCK 0x39#define KEY_F1 0x3A#define KEY_F2 0x3B#define KEY_F3 0x3C#define KEY_F4 0x3D#define KEY_F5 0x3E#define KEY_F6 0x3F#define KEY_F7 0x40#define KEY_F8 0x41#define KEY_F9 0x42#define KEY_F10 0x43#define KEY_F11 0x44#define KEY_F12 0x45#define KEY_PRT_SCR 0x46#define KEY_SCOLL_LOCK 0x47#define KEY_PAUSE 0x48#define KEY_INS 0x49#define KEY_HOME 0x4A#define KEY_PAGEUP 0x4B#define KEY_DEL 0x4C#define KEY_END 0x4D#define KEY_PAGEDOWN 0x4E#define KEY_RIGHT_ARROW 0x4F#define KEY_LEFT_ARROW 0x50#define KEY_DOWN_ARROW 0x51#define KEY_UP_ARROW 0x52#define KEY_PAD_NUMLOCK 0x53#define KEY_LCTRL0xE0//左ctrl0x01#define KEY_LALT0xE2//左Alt0x04#define KEY_LSHFIT0xE1//左Shift0x02#define KEY_LWIN0xE3//左windows0x08#define KEY_RWIN0xE7//右windows0x80#define KEY_RSHIFT0xE5//右Shift0x20。

USB字符串描述符

USB字符串描述符

USB字符串描述符
USB字符串描述符
在USB中,字符串描述符是可选的,也就是属于可有可无的角色,USB并没有强制规定必须有,但是一般产品是有的,至少能说明生产厂家、产品信息等等,要不然这个产品看谁还敢用。

如果设备没有字符串描述符,那么在设备描述符、配置描述符、接口描述符等处的字符串索引值必须为0,要不然在枚举过程中,USB 主机会尝试去获取字符串描述符,而刚好你又没有,那么枚举就会失败,所以必须指定为0。

字符串描述符使用UNICODE编码,可以支持多种语言,所以字符串描述符首先要指定语言ID,语言ID代码可以参考这个网站:,例如:简体中文的ID值为0x0804,美式英语ID值为0x0409。

语言ID字符串描述符结构定义如下:
在枚举过程中,USB主机会向USB设备发送GET_DESCRIPTOR 请求,同时wValue字段高字节为描述符类型,字符串描述符的类型为0x03,低字节为字符串描述符索引值,对于语言ID的索引为0,其它字符串描述符索引由设备描述符指定,wIndex字段为语言ID。

字符串描述符结构定义如下:
bLength为描述符长度,bDescriptorType为描述符类型,字符编码统一采用UNICODE编码,UNICODE采用两个字节字节表示一个字符,如果是英语字符的话,那就很简单了,直接在ASCII码前面补上一个为0x00的字节数据就组成UNICODE编码了,如果是其它语言的话,网上有很多的UNICODE编码转换工具,可以直接拿来使用就行了。

最后补上我的USB鼠标字符串描述符信息。

语言ID信息:
厂商字符串描述符如下:
我在Virtual Box中捕获的信息,所以厂商字符串为VirtualBox。

产品字符串描述符信息如下:。

USB HID Introduction

USB HID  Introduction

▸ USB及HID简介 ▸ USB及HID描述符 ▸ USB标准请求 ▸ HID特定请求 ▸ 报告描述符项目
▸ 报告描述符解析
▸ 报告描述符创建
USB及HID描述符
描述符(descriptor)是一个数据结构,是一个格式化 的信息。透过描述符,主机可以了解设备的功能、属性以及 类别。 描述符固化在设备内部,主机可以通过Get_Descriptor 请求获取描述符。 在设备检测(Enumeration,或称列举)期间,主机使用 标准请求获得设备的描述符。在此过程中,请求的描述符首 先是设备描述符,然后是每个配置描述符,每个配置下的接 口描述符,最后是每个接口的端点描述符。如果是HID类设备, 还会请求HID类描述符和报告描述符。
支持的子类描述符的数目
6
7 9 10
Hale Waihona Puke bDescriptorType
wDescriptorLength
1
2 1 2
常量
数字 常量 数字
子类描述符的类型码
子类描述符的大小 子类描述符的类型码(可选) 子类描述符的大小(可选)
[bDescriptorType]
[wDescriptorLength]
USB及HID描述符
USB及HID描述符
设备描述符
偏移量 域 大小 值 描述
0
1 2 4 5 6 7 8 10
bLength
bDecriptorType bcdUSB bDeviceClass bDeviceSubClass bDeviceProtocol bMaxPacketSize0 idVendor idProduct
USB及HID描述符
端点描述符(Endpoint Descriptor)

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设备配置的描述文件,主要包括配置属性、总线电源类型、接口数。

USBHID设备报告描述符详解

USBHID设备报告描述符详解

USB/HID设备报告描述符详解概述:报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。

USB通讯协议的规范是以1ms产生一个USB帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。

交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。

在这里,传输和报告的意思相类似。

传输方式有四种,初始学一般只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。

控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。

中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限周期内(bounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(stream-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。

报告有三种:input、output和Feature。

后面将作进一步介绍。

中断型输入管线(interrupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input、output和feature报告。

端点描述符有声明所使用的端点为何种管线。

数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。

为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。

USB2.0描述符小结

USB2.0描述符小结

描述符(descriptor)是一个数据结构,使主机了解设备的格式化信息。

每一个描述符可能包含整个设备的信息,或是设备中的一个组件。

所有的USB外围设备,都必须对标准的USB 描述符作出响应。

在检测设备的期间,主机使用控制传输来要求设备传回描述符。

表1列出了描述符的类型。

在检测设备的过程中,要求的描述符首先是整个设备,然后是每一个设置配置,每一个设置配置的接口,最后是每一个接口的断点。

表1 标准描述符类型在读取设备描述符后,主机可以读取该设备的配置、接口以及端点描述符。

每一个设备都至少有一个配置描述符,用来描述该设备的特性与能力。

通常一个设置配置就已经足够,不过多用途或模式的设备可以支持多个设置配置,在同一时间只能有一个作用。

每一个设置配置都需要一个描述符,此描述符包含设备中的电源使用以及支持的接口数目。

每一个配置描述符都有附属的描述符,包含一个或多个接口描述符,以及选择性的端点描述符。

配置描述符有8个字段,如表5所示,在许多设置配置中,有些字段并不使用。

表5 配置描述符同时支持全速与高速的设备,必须有一个Other_speed_configuration描述符。

此描述符的结构与配置描述符相同,唯一的差别是other_speed_configuration描述符描述的是当设备是在非作用中速度时的配置,Other_speed_configuration描述符与设备配置描述符相同。

表6 other_speed_configuration描述符synchronization),01是异步(asynchronous),10是adaptive,11是同步的。

位5和位4指定使用类型:00是数据端点(data endpoint),01是反馈端点(feedback endpoint),10是隐含反馈数据端点(implicit feedback data endpoint),11保留。

如果是非实时端点,位2-位5必须是0。

usb描述符举例

usb描述符举例

1 设备描述符bLength : 描述符长度,固定为0x12。

bDescriptorType : 设备描述符类型,固定为0x01。

bcdUSB : USB 规范发布号。

表示了本设备能适用于那种协议,如2.0=0200bDeviceClass : 类型代码。

bDeviceSubClass : 子类型代码。

bDeviceProtocol : 协议代码。

bMaxPacketSize0 : 端点0最大分组大小。

idVendor : 供应商ID。

idProduct : 产品ID(由厂商分配)。

bcdDevice : 设备出产编码,由厂家自行设置。

iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符。

iProduct : :产品描述符字符串索引。

iSerialNumber : 设备序列号字符串索引。

bNumConfigurations : 可能的配置数。

2 配置描述符bLength : 描述符长度,固定为0x09。

bDescriptorType : 配置描述符类型,固定为0x02。

wTotalLength : 返回整个数据的长度,指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小。

bNumInterfaces : 配置所支持的接口数,指该配置配备的接口数量,也表示该配置下接口描述符数量。

bConfigurationValue : 作为Set Configuration的一个参数选择配置值。

iConfiguration : 用于描述该配置字符串描述符的索引。

bmAttributes : 供电模式选择。

Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.MaxPower : 总线供电的USB设备的最大消耗电流,以2mA为单位。

3 接口描述符bLength : 描述符长度,固定为0x09。

bDescriptorType : 接口描述符类型,固定为0x04。

bInterfaceNumber: 该接口的编号。

USB基础知识

USB基础知识

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传输。

【STM32F429】第5章ThreadXUSBX各种USB描述符简介

【STM32F429】第5章ThreadXUSBX各种USB描述符简介

【STM32F429】第5章ThreadXUSBX各种USB描述符简介第5章 ThreadX USBX各种USB描述符简介本章节为⼤家讲解USB的各种描述符。

5.1初学者重要提⽰5.2 USB描述符概述5.3 USB设备描述符5.4 USB配置描述符5.5 USB接⼝描述符5.6 USB端点描述符5.7 USB字符串描述符5.8 USB设备限定符描述符5.9 总结5.1 初学者重要提⽰1、 USB1.1和USB2.0规格书以及Cypress做的中⽂版USB⽂档,⾮常推荐⼤家学习:2、 USB初学 -- ⼊门篇(USB基础知识速览)3、⽂献参考:5.2 USB描述符概述(USB Descriptors)USB设备使⽤描述符报告其属性,描述符是具有定义格式的数据结构。

每个描述符都以⼀个字节宽的字段开始,该字段包含描述符中字节的总数,然后是⼀个标识描述符类型的字段。

将USB设备连接到USB总线时,主机通过总线枚举来识别和配置设备。

设备加⼊USB⽹络后,USB主机⽴即发送设置请求。

将指⽰该设备选择配置和接⼝,以匹配USB主机上运⾏的应⽤程序需求。

选择配置和接⼝后,设备必须为活动的端点提供服务,以此与USB主机交换数据。

常⽤的描述符主要有:设备描述符(Device Descriptor)配置描述符(Configuration Descriptor)接⼝描述符(Interface Descriptor)⼀个或多个端点描述符(Endpoint Descriptor)字符串描述符(String Descriptor)字符串描述符是另⼀种可选的描述符,它为⽤户提供了有关设备的可读信息。

设备限定符描述符(Device Qualifier Descriptor)它提供了⽀持⾼速性能的设备信息,该信息会根据设备的不同运⾏速度⽽不同。

复杂设备具有多个接⼝。

每个接⼝可以有多个端点。

例如,IP语⾳电话可能具有:A. ⼀个⾳频类接⼝,带有2个同步端点,⽤于在每个⽅向上传输⾳频数据。

USB设备请求和描述符整理

USB设备请求和描述符整理

设备处于缺省状态时,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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

USB字符串描述符
在USB中,字符串描述符是可选的,也就是属于可有可无的角色,USB 并没有强制规定必须有,但是一般产品是有的,至少能说明生产厂家、产品信息等等,要不然这个产品看谁还敢用。

如果设备没有字符串描述符,那么在设备描述符、配置描述符、接口描述符等处的字符串索引值必须为0,要不然在枚举过程中,USB主机会尝试去获取字符串描述符,而刚好你又没有,那么枚举就会失败,所以必须指定为0。

字符串描述符使用UNICODE编码,可以支持多种语言,所以字符串描述符首先要指定语言ID,语言ID代码可以参考这个网站:
usb/developers/docs/USB_LANGIDs.pdf,例如:简体中文的ID值为0x0804,美式英语ID值为0x0409。

语言ID字符串描述符结构定义如下:
在枚举过程中,USB主机会向USB设备发送GET_DESCRIPTOR请求,同时wValue字段高字节为描述符类型,字符串描述符的类型为0x03,低字节为字符串描述符索引值,对于语言ID的索引为0,其它字符串描述符索引由设备描述符指定,wIndex字段为语言ID。

字符串描述符结构定义如下:
bLength为描述符长度,bDescriptorType为描述符类型,字符编码统一采用UNICODE编码,UNICODE采用两个字节字节表示一个字符,如果是英语字
符的话,那就很简单了,直接在ASCII码前面补上一个为0x00的字节数据就
组成UNICODE编码了,如果是其它语言的话,网上有很多的UNICODE编码。

相关文档
最新文档