博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USB 采用“令牌包”-“数据包”-“握手包”的传输机制
阅读量:2300 次
发布时间:2019-05-09

本文共 1523 字,大约阅读时间需要 5 分钟。

USB 采用轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个USB 体

系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据

包。
USB 采用“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向
或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌
包作出响应。握手包表示了传输的成功与否。
数据包:USB 总线上数据传输的最小单位,包括SYNC、数据及EOP 三个部分。其中数据的格
式针对不同的包有不同的格式。但都以8 位的PID 开始。PID 指定了数据包的类型(共16 种)。令牌
包即指PID 为IN/OUT/SETUP 的包。
端点(Endpoint):是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传
输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 个输入,2 个输
出),高速和全速设备最多支持15 组端点。
管道(Pipe)是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的
流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存
在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状
态,并对设备进行配置。
USB 设备连接到HOST 时,HOST 必须通过默认的控制管道对其进行枚举,完成获得
其设备描述、进行地址分配、获得其配置描述、进行配置等操作方可正常使用。USB 设备
的即插即用特性即依赖于此。
枚举:是USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含
该子类定义的特殊请求)。通过枚举HOST 可以获得设备的基本描述信息,如支持的USB 版本、PID、
VID、设备分类(Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力(最
大包长度)。HOST 根据PID 和VID 加载设备驱动程序,并对设备进行合适的配置。只有经过枚举的
设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取100mA 的电流。
USB 体系定义了四种类型的传输,它们是:
控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。
中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。
批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U 盘等。
同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。
注意:中断传输并不意味这传输过程中,设备会先中断HOST,继而通知HOST 启动传输。中断传输
也是HOST 发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,否则NAK 主
机。
不同的传输类型在物理上并没有太大的区别,只是在传输机制、主机安排传输任务、可
占用USB 带宽的限制以及最大包长度有一定的差异。
USB 设备通过管道和HOST 通信,在默认控制管道上接受并处理以下三种类型的请求:
1. 标准请求:一共有11 个标准请求,如得到设备描述、设置地址、得到配置描述等。
所有USB 设备均应支持这些请求。HOST 通过标准请求来识别和配置设备。

2. 类(class)请求:USB 还定义了若干个子类,如HUB 类、大容量存储器类等。不

同的类又定义了若干类请求,该类设备应该支持这些类请求。设备所属类在设备描
述符中可以得到。
3. 厂商请求:这部分请求并不是USB 规范定义的,而是设备生产商为了实现一定的
功能而自己定义的请求。

转载地址:http://ruuib.baihongyu.com/

你可能感兴趣的文章
在驱动程序中改变进程状态并调用schedule()
查看>>
C语言中的-------结构
查看>>
栈的应用---平衡符号
查看>>
用栈计算逆波兰式
查看>>
利用数组栈将中缀表达式转换成后缀表达式
查看>>
SpringBoot + Mybatis-plus实战之Mybatis-plus的一级缓存、二级缓存
查看>>
Java 字符串型的日期对比大小
查看>>
Java常见异常类型
查看>>
aviator 实现 List 的求和、排序、最大、最小值
查看>>
android内存碎片问题优化梳理
查看>>
android相机场景下整机内存分析
查看>>
armcm3权威指南笔记----arm编程中地址未对齐方面的影响
查看>>
MMU,cache,裸机嵌入式C编程还有带操作系统的编程
查看>>
软件工程式工作—NQS组历程
查看>>
iOS 网络编程4-发布异步请求
查看>>
iOS开发何如在调试的时候轻松找到程序在哪里崩溃
查看>>
iOS模拟器问题: An error was encountered while running (Domain = FBSOpenApplicationErrorDomain, Code = 4)
查看>>
iOS8 模拟器键盘输入中文
查看>>
表格视图
查看>>
在表格中实现搜索
查看>>