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》

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

  1. USB HID设备报告描述符详解(转)

    转自:http://group.ednchina.com/93/198.aspx. 参考:USB HID usage table 概述:   报告在这里意思是数据传输(data transfer),而 ...

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

    USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. ...

  3. USB2.0协议学习笔记---描述符

     USB设备描述符 字段名 长  度(字节)  地址偏移 含           义 bLenth   1  0  描述符长度 bDescriptorType   1  1 描述符类型 (这里为 1) ...

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

    USB是串行总线,所以数据是一位一位地在数据线上传送的.既然是一位一位地传送,就存在着一个数据位先后的问题.USB使用的是LSB在前的方式,即先出来的是最低位数据,接下来是次低位,最后是最高位(MSB ...

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

    http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     ...

  6. USB描述符【整理】

    USB描述符 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送GetDescriptor请求,USB设备在收到这个请求之后,会将USB描述符信息返回给USB主机,USB主 ...

  7. (转)USB的描述符及各种描述符之间的依赖关系

    全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...

  8. USB HID描述符【转】

    本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...

  9. USB描述符解析-->枚举.

    枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H ...

随机推荐

  1. [问题2014A06] 解答

    [问题2014A06]  解答 用反证法, 设存在 \(n\) 阶正交阵 \(A,B\), 使得 \[A^2=cAB+B^2,\,\,c\neq 0.\cdots(1)\] 在 (1) 式两边同时左乘 ...

  2. Servlet 实现上传文件以及同时,写入xml格式文件和上传

    package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...

  3. zoj3416 Balanced Number

    链接 这题纠结了好久,刚开始想到的是正解,不过想到可能会出现一个数支点不唯一的情况,这样就多算了,其实是我想多了,一个数只有一个支点. 这样就好像想到了,枚举支点的位置,保存力矩的状态. dp[i][ ...

  4. 火狐浏览器Firefox上DownThemAll插件

    DownThemAll插件支持断点续传.多线程下载,可以大幅度提高下载速度. 在Windows平台上,要下载大量的文件,迅雷自然是首选:但在非Windows平台上,只要安装一个火狐浏览器,再安装Dow ...

  5. python 正则表达式总结

    一.匹配元字符 使用元字符可以简便操作,写正则表达式时更方便 常用元字符: . 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行  ^ 匹配行首. ...

  6. 能源项目xml文件 -- app-dubbo.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. 002_kafka_相关术语详细解析

    参考: http://www.cnblogs.com/likehua/p/3999538.html http://kafka.apache.org/documentation.html#getting ...

  8. oracle PROCEDURE AS IS区别

    在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用 ,在游标(CURSOR)中只能用IS不能用AS.

  9. sm30表维护做排序

    好吧,之前有人问过,因为代码太少就一直没发...今天给出来吧 众所周知,表维护其实就是个TC,只是表维护是统一的,没有使用通用名内表名什么的,这个就不多说了,来重点: TC的一般排序可以放在:1,PB ...

  10. Windows Store App 用户库文件夹操作

    上面介绍了与用户库文件有关的操作,包括创建.读写等,下面将介绍与用户库文件夹相关的操作. 与文件操作一样,想要对用户库文件夹进行操作,需要首先获取用户库的相应位置,获取的方法上面已经介绍过了,这里不再 ...