背景:

  USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结。

正文:

1、 USB通信的最基本单位是“包”。如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数。每类域均有具体的位数规定)。

包有三种:令牌包,数据包,握手包

a)      令牌包:输入包,输出包,设置包,帧起始包。(通俗理解为,主机要求设备做什么)

b)      数据包:Data0 / Data1。

c)      握手包:ACK正确应答包,NAK无效包,STALL延时包。

2、 USB是一个数据传输过程,那么根据传输的的方式不同,人为的可以将他命名为,同步传输,中断传输,批量传输,控制传输四种。这四种传输肯定是由一包一包数据组成。就拿U盘存储用的批量传输举个例子:

主机需要U盘内的一张.jpg图片,过程如下,主机先发个令牌包给设备,告诉设备,把图片准备好,我要来取图片了,然后设备将图片填充到USB的端点buf内,由USB设备芯片打包成数据包发送给主机,主机接收成功后就发一个握手包告诉设备我有没有成功接收,未成功则重新来过。

OK,若是要传一部占用空间的很大.avi格式电影怎么办?USB的端点buf可是大小有限制的,所以就会分批次多次进行以上传输过程,而每次这种过程就又被人为的取了一个名字“事务”,换种说法,即此次传输由多比事务组成。

“事务”也分三种“IN事务”、“OUT事务”、“SETUP事务”。

此处的IN与OUT是站在主机的角度而言。顾名思义,“IN事务”:主机请求设备发送数据给主机。“OUT事务”:主机请求发送数据给设备。

事务介绍完了,继续来说说USB的四种传输方式:

a)      批量传输:

此传输只包含:“IN事务”、“OUT事务”。

传输特点:若总线上有其它传输,其会优先让位带宽给其它位。

b)      中断传输:

此传输亦只包含:“IN事务”、“OUT事务”。

传输特点:此中断非硬件意义上的中断,主机实际上在轮训,当设备状态发送改变,才会发生一次中断,然后主机将状态读走。轮训周期(全速设备:1~255ms, 低速设备:10~255ms)。

c)      同步传输:(只针对全速设备)

此传输亦只包含:“IN事务”、“OUT事务”。但注意的是!该传输的每笔事务内,不会发送握手包,即不纠错。

传输特点:常用于音频流、视频流。且数据包只使用DATA0 发数据。

d)      控制传输:

此传输包含:“IN事务”、“OUT事务”、“SETUP事务”,最复杂的传输,核心在“SETUP事务”。其包含三个步骤:

l  初始设置步骤

由一个“SETUP事务”(令牌包,数据包,握手包)组成。其中数据包(8个字节的DATA0包,分配给5种命令信息bmRequestType、bRequest、wValue、wIndex、wLength)。

l  可选数据步骤

由上一步骤确定是否收发数据,由“IN事务”、“OUT事务”组成。

l  状态信息步骤

由“IN事务”、“OUT事务”组成,注意!此处的IN,OUT是相对于设备而言。其主要是返回设备设置完以后的状态信息吧?(此句暂属联想)

以上既是USB传输的基本数据结构,现在知道了数据是通过何种方式传的,那就该去说道说道这些传输方式里传输的具体内容是什么。USB设备连接上主机后,需要提供一大串信息告诉主机,我能做什么,需要多少USB资源等等,而这一大串信息就保存在USB描述符当中。

3、 标准的USB描述符

描述符其实就是C语言实现的USB数据栈,USB设备基于USB通信协议将其打包发送给USB主机,USB主机再基于USB通信协议对设备上传来的每一包每一位数据进行解析,从而获得USB的详细信息。

暂不论这些USB标识符的具体意义,先了解下设备枚举的过程:

标准的USB描述符有:

l  设备描述符

一个USB设备只能有一个设备描述符,最主要的作用既是报告设备的类别,配置的数量等。

其中包含:设备类别(标准的USB设备类型由此处定义,但有的是基于接口在接口描述符内定义,如HID),USB版本号,端点0的最大报大小,厂商、商品、设备出厂编号,描述厂商、产品、设备的字符串索引(无则写0)。可能的配置数量。

l  配置描述符

一个设备可拥有好几个配置描述符,由于在设备描述符阶段已经规定了设备类别,所以多个配置描述符只能描述同一类别,譬如ISDN就有64KB/s、128KB/s两种配置。选取哪种配置由其内字段“bConfigurationVale”来决定。但一个配置只能有一个配置描述符。

其中包含:配置返回所有描述符大小(设备描述符除外),接口数量,供电模式,最大电流等等。

l  接口描述符

接口是一系列端点的集合,每个接口都有一个唯一的标号,但可多个接口描述符描述同一个接口。USB可通过字段“bAlternateSetting”来切换。其可在配置完成后进行任意切换。就USB例子来说,其只有一个实现MassStorage类的接口,在该接口下使用了批量输入Bulk_IN,批量输出Bulk_OUT2个非0端点来传输文件。

其中包含:接口/备用接口编号,使用端点数(不含端点0),接口类型等等。

l  端点描述符

其内定义了端点属性(输入\输出、传输类型、最大包,主机查询端点时间间隔)。

其作为配置描述符的一部分返回给主机,本身并不能直接被主机访问。

l  字符串描述符

以上4类描述符内均有字符串描述符索引,用于对前面描述符的补充,此即字符串描述符作用。

记录地点:深圳WZ

记录时间:2016年3月10日

自己总结的USB数据结构及其描述符的更多相关文章

  1. USB系列之二:读取USB设备的描述符

    在前面的文章中,我们已经给出了USB协议的链接地址,从这篇文章起,我们会涉及到许多USB 1.1的内容,我们的指导思想是先从熟悉USB 1.1协议入手,先使用现成的HCD和USBD,直接面对客户端驱动 ...

  2. usb协议分析-设备描述符配置包-描述符

    /* usb协议分析仅供大家参考---设备描述符配置包,设备描述符, 地址设置, 配置描述符, 字符串描述符 */ /* -1- usb设备描述符配置包 */ typedef struct _USB_ ...

  3. usb驱动开发8之配置描述符

    前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),下面是看配置描述符还是看设备描述符呢??我们知道,设备大于配置,配置大于接口,接口可以有多种设置. 我 ...

  4. USB HID报告及报告描述符简介

    在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID ...

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

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

  6. 2.7 usb摄像头之usb摄像头描述符打印

    学习目标:参考lsusb源码,打印USB摄像头的设备描述符.配置描述符.接口联合描述符.端点描述符: 一.lsusb命令和源码 使用命令lsusb可以看看设备的id,并执行 # lsusb -v -d ...

  7. USB描述符【整理】

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

  8. HID 报告描述符精细说明.

    1,报告描述符概述    1.1) 报表描述符        报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的.报表描述符非常复杂而有弹性,因为它 ...

  9. Linux kernel的中断子系统之(三):IRQ number和中断描述符

    返回目录:<ARM-Linux中断系统>. 总结: 二描述了中断处理示意图,以及关中断.开中断,和IRQ number重要概念. 三介绍了三个重要的结构体,irq_desc.irq_dat ...

随机推荐

  1. HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)

    题目链接: 传送门 畅通工程续 Time Limit: 1000MS     Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...

  2. 软件工程个人作业 - week1

    <构建之法>阅读疑惑: 如何寻找开发效率和性能的均衡点?显然开发效率强调封装,重视代码重用.但是遗憾的是代码重用往往泛化了数据特征,降低了效率. 如何“公平”分配工作?尤其是团队中人员参差 ...

  3. 【Beta】第一次任务发布

    后端 整理以下5个环节的API文档:登录注册.收藏以及获取收藏.个人信息的获取以及更新.发送实验数据以获取PDF报告 验收条件:每个接口说明请求格式(请求方式,请求内容)和返回格式 例: 请求 方式: ...

  4. JavaWeb学习总结-07 Filter 学习和使用

    一 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  5. gnuplot配置HOME目录

    http://blog.csdn.net/jspenliany/article/details/39828261 本人使用gnuplot绘图,使用console version的来进行处理的时候,经常 ...

  6. TeamViewer12.0.71503(远程控制软件)精简版单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  7. WinForm------GridControl中通过判断单元格文字显示不同字体颜色或背景色

  8. Java字符串方法

    1.字符串和字符数组的转换 .toCharArray() String str1 = "hello"; // //System.out.println(str1); char c[ ...

  9. 英文论文中i.e.,e.g.,etc.,viz.的简要小结

    英文论文中i.e.,e.g.,etc.,viz.的简要小结 看了一堆用法,全白扯,自己总结的最好记,最实用 i.e. =即.换句话说.也就是说."'In essence' or 'in ot ...

  10. LaTeX Software & Manuals

    LaTeX Software & Manuals How to Typeset Equations in LaTeX LaTeX is a very powerful tool for typ ...