USB协议-USB的描述符及其之间的关系

USB只是一个总线,只提供一个数据通路而已。USB总线驱动程序并不知道一个设备具体如何操作,有哪些行为。具体的一个设备实现什么功能,要由设备自己来决定。那么,USB主机是如何知道一个设备的功能以及行为呢?这就要通过描述符来实现了。描述符中记录了设备的类型、厂商ID和产品ID(通常依靠它们来加载对应的驱动程序)、端点情况、版本号等众多信息。

USB1.1协议定义的标准描述符有设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)及字符串描述符(String Descriptor)。USB2.0协议中又增加了两个新的标准描述符:Device Qualifier Descriptor和Other Speed Configuration Descriptor。

一个USB设备只有一个设备描述符。设备描述符里决定了该设备有多少种配置,每种配置都有一个配置描述符;而在每个配置描述符中又定义了该配置有多少个接口,每个接口都有一个接口描述符;在接口描述符里又定义了该接口有多少个端点,每个端点都有一个端点描述符;端点描述符定义了端点的大小、类型等。如果有类特殊描述符,它跟在相应的接口描述符之后。由此可以看出,USB的描述符之间的关系式一层一层的,最上层是设备描述符,接下来是配置描述符,再下来是接口描述符,最下面是端点描述符。

在主机获取描述符时,首先获取设备描述符,接着再获取配置描述符,然后根据配置描述符中的配置集合的总长度,一次将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回。对于字符串描述符,是单独获取的。主机通过发送获取字符串描述符的请求以及描述符的索引号、语音ID来获取对应的字符串描述符。

  • 设备描述符主要记录的信息有:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。
  • 配置描述符主要记录的信息有:配置所包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电流需求量等。
  • 接口描述符主要记录的信息有:接口的编号、接口的端点数、接口所使用的类、子类、协议等。
  • 端点描述符主要记录的信息有:端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。
  • 字符串描述符主要是提供一些方便人们阅读的信息,它不是必需的。

这里所说的设备,就是一个实实在在的USB设备,例如一个USB鼠标。设备有一个设备地址,USB主机主要依靠这个设备地址来访问设备。而在设备内部还会分得更细。它会分出一些端点来,例如端点0、端点1等。就是说,如果USB主机要和USB设备通信,只有设备地址是不够的,还需要一个端点地址。有了设备地址和端点地址,就能准确地对端点发送和读取数据了。比如你要去8号教学楼的808教师,8号楼就是设备地址,而808教室就是端点地址。而配置和接口,是为了更方便地管理端点而抽象出来的概念。一个设备可以有多个配置,但是同一时刻只能有一个配置有效。每个配置下又可以有多个接口。当我们需要不同的功能时,只要选择不同的配置即可。拿刚才的教学楼来说,我们可以把它分成两个配置:平时上课用和期末考试用。考试用时,全部的教室都拿来作考场(即该配置下只有一个接口,接口下有很多端点——教室);而平时上课用时,分成两类(即该配置下有两个接口,每个接口下有一些端点——教室):教室休息室和上课课室。教师休息室和课室是不能共用的(这在USB中也是如此,同一个端点号是不能出现在同一个配置下的两个或多个不同的接口中)。但是平时用来做课室或者休息室的教室,考试时都可以拿来作考场(这在USB中也是如此,同一个端点号可用在不同的配置中)。

具有多个接口并由接口来实现功能的设备叫做USB复合设备,例如一个USB音频设备,它具有一个音频控制接口,另外还可能具有一个到多个音频流或MIDI流接口。在主机端,会把USB复合设备的每个接口当作一个功能设备来看待。常见的USB鼠标、U盘等,通常是单一的设备,即一个设备下只有一个配置描述符、一个接口描述符。

摘录自《圈圈教你玩USB》

时间: 2024-08-02 22:13:44

USB协议-USB的描述符及其之间的关系的相关文章

usb命令格式、描述符详解

一.USB命令 在USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成“命令”. 所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clear_Feature. Get_Configuration.Get_Descriptor.Get_Interface.Get_Status.Set_Address. Set_Configuration.Set_Descriptor.Set_Interf

USB协议-USB设备的枚举过程

USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. 枚举的过程: 1.  USB主机检测到USB设备插入之后,就会先对设备复位.USB设备在总线复位后其地址为0,这样主机就可以通过地址0和那些刚刚插入的设备通信.USB主机往地址为0的设备的端点0发送获取设备描述符的标准请求(这是一个控制传输的建立过程).设备收到该请求后,会按照主机请求的参数,在数据

USB协议-USB的包结构及包的分类

USB是串行总线,所以数据是一位一位地在数据线上传送的.既然是一位一位地传送,就存在着一个数据位先后的问题.USB使用的是LSB在前的方式,即先出来的是最低位数据,接下来是次低位,最后是最高位(MSB).一个包,又被分成了很多个域(field),而LSB.MSB就是以域为单位来划分的. USB总线上传输数据是以包为基本单位的.一个包被分成不同的域.根据不同类型的包,所包含的域是不一样的.但是不同的包有个共同的特点,就是都要以同步域开始,紧跟着一个包标识符PID(Packet Identified

[转] linux系统文件流、文件描述符与进程间关系详解

http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: 1.linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题. 2.fork,vfork流缓冲等对文件操作的影响. 1.linux文件系统结构 首先补充一点基础知识,了解一下linux文件系统.如下图所示: 图1 磁盘,分区和文件系统 应该明白,上图所示结构是硬盘中文件存放

USB描述符【转载】

USB描述符 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送GetDescriptor请求,USB设备在收到这个请求之后,会将USB描述符信息返回给USB主机,USB主机分析返回来的数据,判断出该设备是哪一种USB设备,建立相应的数据链接通道.那么USB描述符信息到底是一个什么样的数据呢,USB协议中有详细描述. 通用的USB描述符信息包括设备描述符.配置描述符.接口描述符和端点描述符,具体不同的USB设备还包括其它类型的描述符,例如,USB鼠标.键盘还包括HID

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

USB HID描述符【转】

本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,HID描述符,报告描述符等等.关于报告描述符,请看我以前写的:<USB HID报告及报告描述符简介 > http://group.ednchina.com/93/198.aspx.一个USB设备有一个设备描述符,设备描述符里面决定了该设

USB HID Report Descriptor 报告描述符详解

Report descriptors are composed of pieces of information. Each piece of information is called an Item.报告描述符由一些数据片组成.这些数据片被叫做Item.All items have a one-byte prefix that contains the item tag, item type, and item size. 每一个Item都包含一个字节的前缀,这个前缀中包含了三个信息--it

龙芯软件开发(32)-- USB协议深入分析

现在非常流行USB设备,时时刻刻都在我们身边,比如使用U盘,使用MP3,使用手机,都需要与PC的USB通讯.通过USB的接口,使用我们的生活非常方便了,想什么时候听歌,就可以插入MP3到PC机那里,然后再从PC上下载MP3.这个过程在用户看来是非常的简单,不需要安装驱动程序,不需要断掉PC机的电源.真正体现"科技以人为本"的思想.使用这么方便的U盘或者MP3,那么我们又需要去问个为什么了,为什么会这么方便呢?往往方便的背后,就意味着需要工程师做大量的工作,才会让大家使用USB这么方便.