USB描述符完全解析
usb标识码及编码介绍
电子知识标识码(1)编码(1)USB(850)标识码有哪些?如同前面所说的标识码由四位数据组成,因此可以表示十六种标识码,在USB1.1标准里面,只用了十种标识码,USB2.0使用了十六种标识码,标识码的作用是用来说明包的属性的,标识码是和包联络在一起的,首先简单介绍一下数据包的类型,数据包分为令牌包、数据、握手包和特殊包四种,标识码分别有以下十六种:令牌包:0x01 输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号0x09 输入(IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号0x05 帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号0x0d 设置(SETUP)启动一个控制传输,用于主机对设备的初始化数据包:0x03 偶数据包(DATA0),0x0b 奇数据包(DATA1)握手包:0x02 确认接收到无误的数据包(ACK)0x0a 无效,接收(发送)端正在忙而无法接收(发送)信息0x0e 错误,端点被制止或不支持控制管道恳求特殊包0x0C 前导,用于启动下行端口的低速设备的数据传输USB的编码方案?USB采用不归零取反来传输数据,当传输线上的差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进展位插入操作(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。
这个理解就行了,这些是由专门硬件处理的。
IBIS模型是一种基于V/I曲线对I/O BUFFER快速准确建模方法,是反映芯片驱动和接收电气特性一种国际标准,它提供一种标准文件格式来记录如驱动源输出阻抗、上升/下降时间及输入负载等参数,非常适宜做振荡和串扰等高频效应计算与仿真。
IBIS本身只是一种文件格式,它说明在一标准IBIS文件中如何记录一个芯片驱动器和接收器不同参数,但并不说明这些被记录参数如何使用,这些参数需要由使用IBIS模型仿真工具来读取。
实用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的描述符详解总结
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 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描述符是一种定义了USB设备能力和特征的数据结构。
它通过描述设备的不同方面,例如设备的配置、接口和端点规范,为计算机系统提供了与USB设备进行通信的方法。
每个USB设备都包含一个或多个描述符,这些描述符以二进制形式存储在设备的固件中。
USB描述符的含义可以从以下几个方面来解释。
首先,设备描述符是USB设备的一个重要组成部分。
它包含了设备的厂商和产品ID、USB规范版本号、设备类别、设备能力以及设备的供电要求等信息。
通过读取设备描述符,计算机系统可以识别并与USB设备进行通信。
其次,配置描述符描述了设备的配置信息。
它包含了配置的唯一标识符、供电要求、接口数目以及所需的带宽等信息。
计算机系统在与USB设备进行通信时,会根据配置描述符来分配资源并设置设备的工作模式。
接口描述符提供了关于设备接口的详细信息。
它包含了接口类别、子类别、协议以及与接口关联的端点数目等信息。
通过读取接口描述符,计算机系统可以了解设备接口的功能和特性。
最后,端点描述符描述了设备端点的特性。
端点是USB设备和计算机系统之间进行数据传输的通道。
端点描述符包含了端点的类型、方向、最大数据包长度以及传输速率等信息。
计算机系统通过读取端点描述符,了解设备端点的能力和规范,以便进行数据的传输和控制。
总之,USB描述符作为USB设备的重要组成部分,提供了与计算机系统进行通信和操作的必要信息。
通过解读这些描述符,计算机系统可以有效地管理和控制USB设备,实现数据传输和设备控制的功能。
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的VID和PID,以及分类(Class,SubClass,Protocol)
USB的VID和PID,以及分类(Class,SubClass,Protocol)
USB(Universal Serial BUS,通用串行总线)协议规定,所有的USB设备都有VID(Vendor ID,供应商识别码)和PID(Product ID,产品识别码)。
VID由供应商向USB-IF(Implementers Forum,应用者论坛)申请。
每个供应商的VID是唯一的,PID由供应商自行决定。
主机通过VID和PID来识别不同设备,根据它们(以及设备的版本号),可以给设备加载或安装相应的驱动程序。
VID和PID的长度都是两个字节的。
常见的各大供应商的VID和PID,可以在这里查询到:
USB定义了种类代码信息,它被用来识别设备的功能,根据这些功能,以加载设备驱动。
这种信息包含在名为基类,子类和协议的3个字节里(注意:“基类”在本文中,用来标识三个字节的种类代码的的首字节;在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 HID键盘报告描述符
USB HID键盘报告描述符usbhid键盘报告描述符USB HID键盘报告描述符最近弄usb驱动,里面的报告描述符晕了我好几天!找了一些资料希望能对大家有帮助~~~~~~~~~~~~~~理解hidscript脚本语言:globalitem--global item mainitem--main item localitem--local item对于main项,parser解释器,将顺序解释集合中的数据,并且,解释器解释完的数据,根据主要项目的顺序,主要是输入和输出项目,相应的数据位将按顺序拼接,解释器将以关键字collection开始解释并拼接bit位信息,关键字endcollection将在完成Paser解释器的工作后,我调用keyword collection和keyword endcollection\set\,关键字collection和关键字endcollection都是mainitem主项,对应的控制字分别为:101000nn和110000nn。
如果在采集后有一个参数数据,则为10100001=0xa1,例如采集(应用)翻译成控制码后为:0xa1,0x01;0xa1的1表示有1个参数数据,0x01表示application 在hid协议中指定的索引值为0x01。
PC的HID驱动程序将通过解析器中的0x01知道,是对application进行数据流位生成,就是说hid报告描述符(reportdescriptor)所述数据流用于应用程序,包括在两种设备:mouse和keyboard,至于collection(application)里边描述的是mouse或者键盘,这将由用法进一步定义,例如用法(键盘),也就是说,描述是准确的告诉pc的hid驱动程序的paser解释器,接下来的这段信息最后生成出来的bits位数据信息,它将由PC的HID驱动程序中键盘对应的API函数处理。
当然,这只是HID硬件设备开发人员给pc的hid驱动程序的paser解释器提供的一个建议值,比如我们做ddk下的hid驱动二次开发,所以我们可以免费,但是应该遵循HID硬件设备开发者推荐的HID驱动程序API接口,因为hid硬件设备开发者比ddk开发人员更清楚送上来的bit数据流的真正物理意义.输入和输出是用于真正生成比特流数据字段的关键字。
USB协议详解
USB HID介绍HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB 协议的相关内容。
USB设备描述符-概述当插入USB设备后,主机会向设备请求各种描述符来识别设备。
那什么是设备描述符呢?Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB 设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。
描述符的作用就是通过命令操作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作。
USB有那些标准描述符?USB有5种标准描述符:设备描述符、配置描述符、字符描述符、接口描述符、端点描述符。
描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。
由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。
在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。
其中可能还会有获取设备序列号,厂商字符串,产品字符串等。
设备描述符struct _DEVICE_DEscriptOR_STRUCT{BYTE bLength; //设备描述符的字节数大小BYTE bDescriptorType; //描述符类型编号,为0x01WORD bcdUSB; //USB版本号BYTE bDeviceClass; //USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型,0x00不是在设备描述符中定义的,如HIDBYTE bDeviceSubClass; //usb分配的子类代码,同上,值由USB规定和分配的,HID 设备此值为0BYTE bDeviceProtocl; //USB分配的设备协议代码,同上HID设备此值为0BYTE bMaxPacketSize0; //端点0的最大包的大小WORD idVendor; //厂商编号WORD idProduct; //产品编号WORD bcdDevice; //设备出厂编号BYTE iManufacturer; //描述厂商字符串的索引BYTE iProduct; //描述产品字符串的索引BYTE iSerialNumber; //描述设备序列号字符串的索引BYTE bNumConfiguration; //可能的配置数量}配置描述符struct _CONFIGURATION_DEscriptOR_STRUCT{BYTE bLength; //配置描述符的字节数大小BYTE bDescriptorType; //描述符类型编号,为0x02WORD wTotalLength; //配置所返回的所有数量的大小BYTE bNumInterface; //此配置所支持的接口数量BYTE bConfigurationVale; //Set_Configuration命令需要的参数值BYTE iConfiguration; //描述该配置的字符串的索引值BYTE bmAttribute; //供电模式的选择BYTE MaxPower; //设备从总线提取的最大电流}字符描述符struct _STRING_DEscriptOR_STRUCT{BYTE bLength; //字符串描述符的字节数大小BYTE bDescriptorType; //描述符类型编号,为0x03BYTE SomeDescriptor[36]; //UNICODE编码的字符串}接口描述符struct _INTERFACE_DEscriptOR_STRUCT{BYTE bLength; //接口描述符的字节数大小BYTE bDescriptorType; //描述符类型编号,为0x04BYTE bInterfaceNunber; //接口的编号BYTE bAlternateSetting;//备用的接口描述符编号BYTE bNumEndpoints; //该接口使用端点数,不包括端点0BYTE bInterfaceClass; //接口类型 HID设备此值为0x03BYTE bInterfaceSubClass;//接口子类型 HID设备此值为0或者1BYTE bInterfaceProtocol;//接口所遵循的协议BYTE iInterface; //描述该接口的字符串索引值}端点描述符struct _ENDPOIN_DEscriptOR_STRUCT{BYTE bLength; //端点描述符的字节数大小BYTE bDescriptorType; //描述符类型编号,为0x05BYTE bEndpointAddress; //端点地址及输入输出属性BYTE bmAttribute; //端点的传输类型属性WORD wMaxPacketSize; //端点收、发的最大包的大小BYTE bInterval; //主机查询端点的时间间隔}HID设备描述符温习了以上内容,我们再来看看HID协议与这些描述符之间的关系。
图解USB协议之三 USB标准描述符
欢迎访问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设备描述符、配置描述符、端点描述符含义查了⼀整天的资料,⾃⼰把不懂的全部试了⼀遍⼀下是程序以及注释/* 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设备键值表描述符说明
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。
关于USBHID协议以及鼠标键盘描述符的解释【转】
关于USBHID协议以及⿏标键盘描述符的解释【转】转⾃:⼀.HID设备识别前⾯有提到关于SCSI协议的USB设备实现。
现在来谈谈USBHID设备。
HID全称Human Interface Device。
HID协议⾥增加了HID描述符和报告描述符,以及特定的关于HID的类请求。
HID设备的通信是通过报表来进⾏的。
据说,报告描述符是USB设备中最难的描述符了。
关于HID描述符可以参考HID协议。
接下来我们谈谈报告描述符。
⼆.报告描述符每⼀个HID设备都有⾃⼰的报告描述符。
报告描述符有三种类项⽬:Main类项⽬,Global类项⽬,Local类项⽬。
具体看下表Global作⽤域是遇到下⼀个同名Global,Local作⽤域是遇到下⼀个Main(Input,Output,Feature)。
Usage Min-Max表⽰有⼏种功能,Logical Min-Max表⽰有⼏种状态。
每个报告描述符都有报告ID,报告ID是⽤来区别复合设备的。
在报告描述符⾥没有写报告ID,默认报告ID是0。
USB的控制端点可以进⾏Input,Output,Feature项⽬的传输,中断端点可以进⾏Input,Output传输。
三.⿏标和键盘的报告描述符(1)键盘的报告描述符1. 0x05,0x01,// Global Generic Desktop2. 0x09,0x06,// Local KeyBoard3. 0xA1,0x01,// Main app collection4. 0x05,0x07,// Global KeyBoard5. //////////////////////////////////第1字节6. 0x19,0xe0,// Local Usage Min (KeyBoard LeftControl)7. 0x29,0xe7,// Local Usage Max (KeyBoard Right GUI)8. 0x15,0x00,// Global Logical Min9. 0x25,0x01,// Global Logical Max10. 0x95,0x08,// Global ReportCount11. 0x75,0x01,// Global ReportSize12. 0x81,0x02,// Main Input(Data,Var,Abs)13. //////////////////////////////////第2字节14. 0x95,0x01,// Global ReportCount15. 0x75,0x08,// Global ReportSize16. 0x81,0x03,// Main Input(Cnst,Var,Abs)17. //////////////////////////////////第3-8字节18. 0x95,0x06,// Global ReportCount19. 0x75,0x08,// Global ReportSize20. 0x15,0x00,// Global Logical Min21. 0x26,0xff,0x00,//Global Logical Max22. 0x19,0x00,// Local Usage Min23. 0x29,0x65,// Local Usage Max24. 0x81,0x00,// Main Output(Data,Ary,Abs)25. ////////////////////////////////1字节输出报告26. 0x15,0x00,// Global Logical Min27. 0x25,0x01,// Global Logical Max28. 0x95,0x05,// Global ReportCount29. 0x75,0x01,// Global ReportSize30. 0x05,0x08,// Global LED31. 0x19,0x01,// Local Usage Min32. 0x29,0x05,// Local Usage Max33. 0x91,0x02,// Main Output(Data,Var,Abs)34. ////////////////////////////////补⾜上⾯变成1个字节35. 0x95,0x01,// Global ReportCount36. 0x75,0x03,// Global ReportSize37. 0x91,0x03,// Main Output(Cnst,Var,Abs)38. 0xc0 // Main End collection键盘的描述符共有8字节的输⼊报告和1字节的输出报告。
USB鼠标键盘报告描述符介绍
USB鼠标键盘报告描述符介绍
USB鼠标键盘报告描述符是一种采用USB协议的报告描述设备,用来
描述鼠标和键盘报告的格式、报告长度以及如何在USB报告中识别鼠标和
键盘动作。
USB协议的报告描述符定义了鼠标和键盘报告格式、报告长度
以及如何在USB报告中识别操作。
报告描述符还必须描述每个设备的报告长度,比如鼠标报告长度是3
个字节,键盘报告长度是从6到127个字节。
这里的报告长度表示这个设
备发出的报告数据包的大小。
再有就是报告数据的格式,报告数据的格式是在报告描述符中定义的,它一般分为两种:普通报告和特殊报告。
普通报告是以设备状态为中心的,它以设备状态值的变化为基础对报告数据进行格式化,并向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设备配置的描述文件,主要包括配置属性、总线电源类型、接口数。
USB描述符的分类与介绍
USB描述符的分类与介绍USB的符述符分为几类?有人可能会答:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符等。
但这里说的不是这样的。
上面的几类描述符属于USB标准描述符。
另外还有HID描述符和Hub描述符。
所以分类是这样的:1. 标准描述符1) 设备描述符2) 配置描述符3) 字符串描述符4) 接口描述符5) 端点描述符6) 设备限定描述符7) 其他速率配置描述符2. HID描述符3. Hub描述符1 标准描述符标准描述符是指一组设备描述符,包括设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符和其他速率配置描述符。
这七种描述符具有类似的格式,比如说它们的第一个字段都是bLength,第二个字段都是bDescriptorType。
七种描述符在使用时以 bDescriptorType字段来区分。
描述符类型与对应的bDescriptorType字段值对应关系为:1.1 设备描述符设备描述符描述的是设备的整体信息,与设备本身一一对应,一个设备只能有一个设备描述符。
在主机对USB设备枚举的过程中,首先要做的就是获取设备描述符,以对设备有一个整体的了解。
设备描述符由14个字段组成,总长度18字节:这些字段都有一个小写字母表示的前缀,它们所表示的意思如下:b 表一个字节,=8bits;w 表一个字,=16bits;bm 表按位寻址;bcd 用BCD码表示;i 表索引值id 表标识码各字段含义:bLength:表示描述符的长度,对于设备描述符来说,其值为18,即0x12。
bDescriptorType:描述符类型,对应表1中的值,设备描述符为0x01。
bcdUSB:该设备遵循的USB版本号,以BCD码表示,USB1.1为0x0101,USB2.0为0x0200。
bDeviceClass:该设备所属的标准设备类,USB协议中对常见的设备进行了分类。
该字段值为0x01~0xFE时,表示是USB协议中已定义的设备类,常用的HID设备类编号为0x03,其它设备类编号参:/developers/defined_classbDeviceProtocol:用于表示USB设备类所采用的设备类协议,其值和bDeviceClass和bDeviceSubClass有关。
【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个同步端点,⽤于在每个⽅向上传输⾳频数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USB设备描述符完全解析//======================================================= =====================// 文件名: USBDESC.C// 用途: USB描述符// 作者: shenfei5// 时间: 2007.2.3// 版本: V1.10//======================================================= =====================#include <RTL.h>#include "usb.h" // USB模块#include "hid.h" // HID设备#include "usbcfg.h" // 配置USB#include "usbdesc.h" // USB描述符//// HID报文描述符//const U8 HID_ReportDescriptor[] = {HID_UsagePageVendor(0x00), // 报告页版本: 0X06 0X00 0XFFHID_Usage(0x01), // 用途页: 0X05 0X01// 如果是MOUSE,KEY,在这里应该有用法索引HID_Collection(HID_Application), // 用法集合开始: 0XA1 0X01HID_UsagePage(HID_USAGE_PAGE_BUTTON), // BUTTON用法页HID_UsageMin(1), // 用法最小值HID_UsageMax(3), // 用法最小值HID_LogicalMin(0), // 逻辑最小值HID_LogicalMax(1), // 逻辑最大值HID_ReportCount(3), // 报告计数(3)HID_ReportSize(1), // 报告页大小(1)HID_Input(HID_Data | HID_Variable | HID_Absolute), // 输入(2)HID_ReportCount(1), // 报告计数值HID_ReportSize(5), // 报告大小HID_Input(HID_Constant), // 输入1HID_UsagePage(HID_USAGE_PAGE_LED), // LED用法页HID_Usage(HID_USAGE_LED_GENERIC_INDICATOR), // 用法页HID_LogicalMin(0), // 用法最小值HID_LogicalMax(1), // 用法最大值HID_ReportCount(8), // 报告计数值HID_ReportSize(1), // 报告大小(1)HID_Output(HID_Data | HID_Variable | HID_Absolute), // 输出(2)HID_EndCollection, // 报告结束};// HID报告描述符大小const U16 HID_ReportDescSize = sizeof(HID_ReportDescriptor);//// USB 设备描述符//const U8 USB_DeviceDescriptor[] = {USB_DEVICE_DESC_SIZE, // bLength 描述符长度= 12HUSB_DEVICE_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型= 1HWBVAL(0x0110), // 1.10 // bcdUSB 设备版本号= 你发行的版本的号0x00, // bDeviceClass 类型代码= 由USB指定0x00, // bDeviceSubClass 子类型代码= 由USB分配0x00, // bDeviceProtocol 协议代码= 由USB分配USB_MAX_PACKET0, // bMaxPacketSize0 端点0的容量= 64(只能是8,16,32,64) WBVAL(0x1977), // idVendor 供应商ID(同USB协会分配,我就自己分配一份)WBVAL(0X1006), // idProduct 产品ID(由厂商分配)WBVAL(0x0100), // 1.00 // bcdDevice ( 设备出厂编号)0x04, // iManufacturer ( 厂商描述字符串索引, 用来在字符串索引中查找字符串)0x20, // iProduct ( 产品描述字符串索引, 用来在字符串索引中查找字符串)0x42, // iSerialNumber ( 设备序列号描述字符串索引, 用来在字符串索引中查找字符串)0x01 // bNumConfigurations (配置字符串的个数)};//// USB 描述符集// 所有描述符(配置描述符, 接口描述符, 端点描述符, USB类描述符, 设备描述符//const U8 USB_ConfigDescriptor[] = {// 配置描述符USB_CONFIGUARTION_DESC_SIZE, // bLength 描述符长度= 9HUSB_CONFIGURATION_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型= 2H WBVAL( // wTotalLengthUSB_CONFIGUARTION_DESC_SIZE + // 返回描述符串集的长度, 配置描述字符长度USB_INTERFACE_DESC_SIZE + // 接口描述字符长度HID_DESC_SIZE + // HID描述字符长度USB_ENDPOINT_DESC_SIZE // 端点描述字符长度),0x01, // bNumInterfaces// 支持接口数0x01, // bConfigurationValue// 配置值0x00, // iConfiguration// 配置字符串描述索相// 0: 不使用// 如果使用,必须在字符串描述符中添加相应的字符串.USB_CONFIG_BUS_POWERED | // bmAttributes 设置的供电特性USB_CONFIG_REMOTE_WAKEUP, // 总线供电// 有唤醒功能USB_CONFIG_POWER_MA(100), // bMaxPower 设备从供电总线吸取的电流值//// 当前配置为100MA// 接口类描述符// 接口0 ,位置0 , HID类// Interface 0, Alternate Setting 0, HID ClassUSB_INTERFACE_DESC_SIZE, // bLength 描述符长度= 9HUSB_INTERFACE_DESCRIPTOR_TYPE, // bDescriptorType 描述符类型= 4H0x00, // bInterfaceNumber ( 接口编号)0x00, // bAlternateSetting ( 可代替位置)0x01, // bNumEndpoints 使用端点(不含端点0)USB_DEVICE_CLASS_HUMAN_INTERFACE, // bInterfaceClass// USB 类// USB_DEVICE_CLASS_HUMAN_INTERFACE == 3// HID类HID_SUBCLASS_NONE, // bInterfaceSubClass// 子类,没有.HID_PROTOCOL_NONE, // bInterfaceProtocol// 协议代码0x5C, // iInterface// 字符串描述符索引,要使用该字符串必须在字符串描述符里添加相应的字符串// HID类描述符// HID_DESC_OFFSET = 0x0012// HID类描述符的偏移量HID_DESC_SIZE, // bLength 描述符长度=HID_HID_DESCRIPTOR_TYPE, // bDescriptorType HID描述符类型= 21HWBVAL(0x0100), // 1.00 // bcdHID HID版本号0x00, // bCountryCode 国家代码0x01, // bNumDescriptors 支持其它类描述符个数HID_REPORT_DESCRIPTOR_TYPE, // bDescriptorType 从属类描述类型= 报告描述符22H WBVAL(HID_REPORT_DESC_SIZE), // wDescriptorLength 从属类描述的长度// Endpoint, HID Interrupt In// HID 端点描述描,端点1输入USB_ENDPOINT_DESC_SIZE, // bLength 端点描述符长度USB_ENDPOINT_DESCRIPTOR_TYPE, // bDescriptorType 端点描述符类型= 5HUSB_ENDPOINT_IN(1), // bEndpointAddress 逻辑端点号BIT.7 = DIR// BIT.0..3 端点号// 这个值是用来把逻辑端点号换成物理端点号USB_ENDPOINT_TYPE_INTERRUPT, // bmAttributes 端点属性= 中断WBVAL(0x0004), // wMaxPacketSize 端点容量10, // 10ms // bInterval// 传输间隔时间.只对中断端点有效// Terminator0 // bLength// 结果码.};//// USB 字符串描述符(可选)// 字符描述符结构:// {// 字符串描述符1 大小// 描述符类型= 字符串描述符(0X03)// 描述符内容.// ... ...// 字符串描述符n 1 大小// 描述符类型n = 字符串描述符(0X03)// 描述符内容n.// }//const U8 USB_StringDescriptor[] = {// 字符串索引: 0x00:// 字符串用途: 语言代码0x04, // 描述符长度bLengthUSB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)//WBVAL(0x0409), // 使用English 语言// 描述符内容wLANGIDWBVAL(0x0804), // 试一下中文的行不行,改了之后,在硬件属性里看不到,在客户端可以看到,不明原因. // 字符串索引: 0x04:// 字符串用途: 生产产商字符描述符0x1C, // 描述符长度bLengthUSB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符)0xc1,0,0xd6,0,0xca,0,0xb7,0,0xe1,0,' ',0,' ',0,' ',0,' ',0,' ',0,' ',0,' ',0,// 字符串索引: 0x20// 字符串用途: 产品名称0x22, // 描述符长度bLengthUSB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符) 0xc1,0,0xd6,0,0xca,0,0xa4,0,0xb7,0,0xe1,0,' ',0,' ',0,' ',0,' ',0,' ',0,' ',0,' ',0,'H',0,'I',0,'D',0,// 字符串索引: 0x42// 字符串用途: 产品系列号0x1A, // 描述符长度bLengthUSB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符) 'T',0,'E',0,'S',0,'T',0,'0',0,'0',0,'0',0,'0',0,'0',0,'0',0,'0',0,// 字符串索引号0x5C// 接口Interface 0, 位置Alternate Setting 00x08, // 描述符长度bLengthUSB_STRING_DESCRIPTOR_TYPE, // bDescriptorType,描述符类型:3(字符串描述符) 'H',0,'I',0,'D',0,}。