USB描述符介绍
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(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 设备请求请求名 请求号 功能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标准描述符
欢迎访问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/
USB报告描述符详细解析
USB报告描述符详细解析
USB报告描述符是对USB设备上的功能指定的一系列键值对,它们描
述了USB设备提供的服务,以及它如何使用USB总线。
USB报告描述符可
以让计算机可以正确地识别USB设备,并且可以正确地处理它们发送的数据。
报告描述符由一个全局报告描述符和一个或多个功能报告描述符组成。
全局报告描述符描述了整个USB设备,包括设备的厂商ID,产品ID,序
列号,版本号等全局信息。
一个功能报告描述符描述一些功能,或者一组
相关功能。
功能报告描述符向计算机提供有关每个功能的信息,包括功能
类型,最大报告大小,功能字节级访问信息,功能特征集,报文信息等。
USB设备可以在接口上提供多种功能,因此,可以有一个或多个功能
报告,每个功能报告描述符都将描述特定的功能。
例如,触摸板USB设备
可能提供多个功能报告描述符,每个描述符描述一个功能,如触摸屏,键盘,鼠标,笔,滚轮等。
USB报告描述符需要遵守USB协议,确保报告描述符中包含的信息传
输正确。
USB报告描述符除了包括数据传输信息外,还会描述USB设备的
更多信息,如设备功能,设备参数,配置参数,接口位置,电源参数,安
全功能等。
USBHID设备报告描述符详解
USBHID设备报告描述符详解
USBHID设备报告描述符是一种描述USBHID设备报告的结构,用于定义设备报告的输入输出特性,允许设备与控制器的主机通信。
通常,报告描述符是一段二进制数据,其中包含由设备提供的输入和输出报告,以及描述报告的数据结构要求信息。
它是一种混合结构,由多个子块组成,每个子块又由一个或多个报告描述符中的域组成。
报告描述符的结构如下:
报告描述符
-
-bLengt
-bDescriptorTyp
-wDescriptorLengt
-数据
-输入报
-输出/特殊报
-特殊报
头部:报告描述符的头部包括三个字段:报告描述符的字节长度(bLength),报告描述符类型(bDescriptorType)和报告描述符的总长度(wDescriptorLength)。
bLength:报告描述符的字节长度,是报告描述符数据的字节数。
bDescriptorType:报告描述符类型,用于指示报告描述符的类型,必须为0x22
wDescriptorLength:报告描述符的总长度,用于指示报告描述符的总字节数。
数据段:数据段包括输入报告、输出/特殊报告和特殊报告。
输入报告:输入报告用于获取主机发送到设备的数据,一般由设备按定义的格式读取。
输出报告:输出报告用于将设备发送到主机的数据。
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并没有强制规定必须有,但是一般产品是有的,至少能说明生产厂家、产品信息等等,要不然这个产品看谁还敢用。
如果设备没有字符串描述符,那么在设备描述符、配置描述符、接口描述符等处的字符串索引值必须为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的描述符详解总结
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 cdc中的描述符
usb cdc中的描述符USB CDC中的描述符1. USB CDC的概述USB CDC是一种通信设备类,用于在计算机和外部设备之间进行数据传输。
它提供了一种标准的接口和协议,使得不同厂商生产的设备可以与计算机进行通信。
USB CDC描述符是USB设备的一个重要组成部分,它描述了设备的属性、功能和接口。
2. CDC功能描述符CDC功能描述符是USB CDC中的一种描述符,用于描述设备的功能。
它包含了设备支持的通信功能、数据格式和控制命令等信息。
通过CDC功能描述符,计算机可以了解到设备的通信能力和支持的功能,从而根据需要进行配置和控制。
3. CDC接口描述符CDC接口描述符是USB CDC中的另一种描述符,用于描述设备的接口。
它包含了设备的接口数目、接口的属性和端点等信息。
通过CDC接口描述符,计算机可以识别设备的接口类型和功能,从而确定如何与设备进行通信。
4. CDC通道描述符CDC通道描述符是USB CDC中的一种描述符,用于描述设备的通信通道。
它包含了通道的属性、通信速率和数据格式等信息。
通过CDC通道描述符,计算机可以了解到设备支持的通道类型和通信参数,从而进行相应的配置和控制。
5. CDC数据描述符CDC数据描述符是USB CDC中的另一种描述符,用于描述设备的数据传输方式和数据格式。
它包含了数据传输的属性、数据包的大小和数据格式等信息。
通过CDC数据描述符,计算机可以了解到设备的数据传输方式和数据格式,从而进行相应的处理和解析。
6. CDC通信接口CDC通信接口是USB CDC中的一个重要概念,用于定义设备与计算机之间的通信接口。
它包含了设备的通信功能、数据格式和控制命令等信息。
通过CDC通信接口,计算机可以与设备进行通信和控制,实现数据的传输和处理。
7. CDC设备驱动程序CDC设备驱动程序是USB CDC中的一个重要组件,用于实现设备与计算机之间的通信。
它通过解析和处理CDC描述符,与设备进行通信和控制。
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设备配置的描述文件,主要包括配置属性、总线电源类型、接口数。
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描述符小结
描述符(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。
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轴的位移量。
为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。
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.引言1.1 概述在USB(Universal Serial Bus,通用串行总线)接口标准中,同步端点描述符扮演着重要的角色。
USB是一种用于电脑和外部设备之间传输数据的通信协议,为了实现设备之间的高效通信,同步端点描述符被用于定义和配置USB设备的同步端点。
同步端点描述符定义了USB设备的同步传输端点的配置和属性,可以理解为是对同步端点的详细描述。
同步传输端点是USB设备与主机之间进行同步传输的通道,用于实时传输数据,比如音频和视频数据。
同步端点描述符可以告知主机关于端点的特性,比如端点的方向(输入或输出)、传输类型(同步或异步)以及数据传输的带宽需求等。
为了更好地理解同步端点描述符的作用,可以将其类比为一个设备的规范说明书。
它提供了对端点的详细描述,使得主机能够正确地配置和管理设备。
同步端点描述符的配置可以影响USB设备的性能和兼容性,因此,对于开发USB设备的工程师和USB设备的使用者来说,了解和理解同步端点描述符是非常重要的。
本文将对USB同步端点描述符进行深入的探讨,包括其定义和作用,结构和字段的解析。
我们将详细介绍同步端点描述符中包含的字段和其对应的含义,以及如何根据实际需求配置同步端点描述符。
接下来的正文部分将首先介绍USB同步端点描述符的定义和作用,以便读者对其有一个整体的认知。
随后,我们将深入解析同步端点描述符的结构和各个字段的含义,帮助读者更好地理解和使用同步端点描述符。
最后,我们将总结USB同步端点描述符的重要性和应用场景,并展望其未来的发展前景。
通过本文的阅读,读者将能够全面了解USB同步端点描述符的概念、结构和应用,并且能够根据需要使用和配置同步端点描述符,从而实现高效、可靠的数据传输。
1.2 文章结构本文主要讨论USB同步端点描述符。
文章分为引言、正文和结论三个部分。
在引言部分,首先对USB同步端点描述符进行概述,介绍其作用和重要性。
其次,说明文章的整体结构,即引言、正文和结论的分布,以及各部分的内容概要。
USB描述符的分类与介绍讲解
USB描述符的分类与介绍讲解
USB描述符是用于计算机与外围设备之间进行沟通的一种机制,它的
作用是将计算机的设备,例如USB鼠标、USB打印机等,定义为外围设备,以便于计算机可以理解外围设备的特性,并能够与它们进行交互。
计算机
访问设备的方式就是通过USB描述符,因此USB描述符对于实现USB设备
的连接外部设备至关重要。
此外,USB描述符中还定义了不同设备的特性,以便于计算机可以更
好地识别外围设备,从而便于系统更好地工作。
USB描述符可以分为三类:第一类是基本描述符,主要用于描述USB设备的基本信息,如设备的
类别、版本号等,其主要目的是支持系统驱动程序的正确加载,这样就可
以使外接设备与系统进行沟通。
第二类是特性描述符,其主要用于对USB设备的特性进行描述,例如
电压、电流、数据传输速率等,这样就可以保证USB设备在使用时能得到
最佳的性能。
第三类是配置描述符,它是用于描述USB设备配置的,通常用于说明USB设备总线的类型、端口数量等信息,以便于系统能够正确地识别该设
备并能让外围设备安全地连接到外部设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
描述符介绍
标准的USB设备有5种USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符,端点描述符。
下面详解:
1、设备描述符:一个设备只有一个设备描述符
typedef struct _USB_DEVICE_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
WORD bcdUSB,
BYTE bDeviceClass,
BTYE bDeviceSubClass,
BYTE bDeviceProtol,
BYTE bMaxPacketSize0,
WORD idVenderI,
WORD idProduct,
WORD bcdDevice,
BYTE iManufacturer,
BYTE iProduct,
BYTE iSerialNumber,
BYTE iNumConfiguations
}USB_DEVICE_DESCRIPTOR;
bLength : 描述符大小.固定为0x12.
bDescriptorType : 设备描述符类型.固定为0x01.
bcdUSB : USB 规范发布号.表示了本设备能适用于那种协议,如2.0=0200,1.1=0110等.
bDeviceClass : 类型代码(由USB指定)。
当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。
当它的值是1到FEH 时,表示不同的接口关联的。
当它的值是FFH时,它是厂商自己定义的.
bDeviceSubClass : 子类型代码(由USB分配).如果bDeviceClass 值是0,一定要设置为0.其它情况就跟据USB-IF组织定义的编码.bDeviceProtocol : 协议代码(由USB分配).如果使用USB-IF组织定义的协议,就需要设置这里的值,否则直接设置为0。
如果厂商自己
定义的可以设置为FFH.
bMaxPacketSize0 : 端点0最大分组大小(只有8,16,32,64有效).idVendor : 供应商ID(由USB分配).
idProduct : 产品ID(由厂商分配).由供应商ID和产品ID,就可以让操作系统加载不同的驱动程序.
bcdDevice : 设备出产编码.由厂家自行设置.
iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符.为0则表示没有.
iProduct : :产品描述符字符串索引.同上.
iSerialNumber : 设备序列号字符串索引.同上.bNumConfigurations : 可能的配置数.指配置字符串的个数
2、配置描述符:配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
WORD wTotalLength,
BYTE bNumInterfaces,
BYTE bConfigurationValue,
BYTE iConfiguration,
BYTE bmAttributes,
BYTE MaxPower
}USB_CONFIGURATION_DESCRIPTOR;
bLength : 描述符大小.固定为0x09.
bDescriptorType : 配置描述符类型.固定为0x02.
wTotalLength : 返回整个数据的长度.指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小.
bNumInterfaces : 配置所支持的接口数.指该配置配备的接口数量,也表示该配置下接口描述符数量.
bConfigurationValue : 作为Set Configuration的一个参数选择配置值.
iConfiguration : 用于描述该配置字符串描述符的索引.bmAttributes : 供电模式选择.Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.
MaxPower : 总线供电的USB设备的最大消耗电流.以2mA为单位.
3、接口描述符:接口描述符说明了接口所提供的配置,一个配置所拥有的接口数量通过配置描述符的bNumInterfaces决定
typedef struct _USB_INTERFACE_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
BYTE bInterfaceNumber,
BYTE bAlternateSetting,
BYTE bNumEndpoint,
BYTE bInterfaceClass,
BYTE bInterfaceSubClass,
BYTE bInterfaceProtocol,
BYTE iInterface
}USB_INTERFACE_DESCRIPTOR;
bLength : 描述符大小.固定为0x09.
bDescriptorType : 接口描述符类型.固定为0x04.bInterfaceNumber: 该接口的编号.
bAlternateSetting : 用于为上一个字段选择可供替换的位置.即备用的接口描述符标号.
bNumEndpoint : 使用的端点数目.端点0除外.
bInterfaceClass : 类型代码(由USB分配).
bInterfaceSunClass : 子类型代码(由USB分配).bInterfaceProtocol : 协议代码(由USB分配).
iInterface : 字符串描述符的索引
4、端点描述符:USB设备中的每个端点都有自己的端点描述符,由接口描述符中的bNumEndpoint决定其数量
typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
BYTE bEndpointAddress,
BYTE bmAttributes,
WORD wMaxPacketSize,
BYTE bInterval
}USB_ENDPOINT_DESCRIPTOR;
bLength : 描述符大小.固定为0x07.
bDescriptorType : 接口描述符类型.固定为0x05.bEndpointType : USB设备的端点地址.Bit7,方向,对于控制端点可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端点号.bmAttributes : 端点属性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中断.
wMaxPacketSize : 本端点接收或发送的最大信息包大小.
bInterval : 轮训数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255.
5、字符串描述符:其中字符串描述符是可选的.如果不支持字符串描述符,其设备,配置,接口描述符内的所有字符串描述符索引都必须为0
typedef struct _USB_STRING_DESCRIPTION_
{
BYTE bLength,
BYTE bDescriptionType,
BYTE bString[1];
}USB_STRING_DESCRIPTION;
bLength : 描述符大小.由整个字符串的长度加上bLength和bDescriptorType的长度决定.
bDescriptorType : 接口描述符类型.固定为0x03.
bString[1] : Unicode编码字符串.。