十一、USB 的四种传输类型

1、批量传输

详细内容见 《USB2.0标准协议》 8.5.2 Bulk Transactions 章节。

批量事务类型的特点是能够通过错误检测重试保证主机和设备之间无错误地传递数据。批量事务使用由令牌数据握手数据包组成的三阶段事务,如图 8-30 所示。在一定的流量控制和停止条件下,数据阶段可以用握手代替,从而产生一个两阶段事务,其中没有数据传输。PING和NYET报文只能用于高速运行的设备。

当主机准备好接收批量数据时,它会发出 IN 令牌。设备端点通过返回数据包进行响应,如果无法返回数据,则返回NAK或STALL握手。NAK表示该设备暂时无法返回数据,而STALL表示该端点被永久停止,需要USB系统软件干预。如果主机收到一个有效的数据包,它会以一个ACK握手来响应。如果主机在接收数据时检测到错误,则不会向该设备返回握手包。

当主机准备发送批量数据时,它首先发出一个OUT令牌包,然后是一个数据包(或PING特殊令牌包,请参阅章节8.5.1)。如果设备没有错误地接收到数据,它将返回三个握手中的一个(或者四个,包括NYET,对于高速运行的设备):

  • ACK表示接收到的数据包没有错误,并通知主机它可以按顺序发送下一个数据包。

  • NAK表示接收到的数据没有错误,但主机应该重新发送数据,因为设备处于临时状态,无法接受该数据(例如,缓冲区已满)。

  • 如果端点被暂停,则返回STALL,表示主机不应该重试传输,因为设备上有错误条件。

如果数据包被接收到CRC或比特错误,则不返回握手。

图 8-31 和图 8-32 分别显示了用于批量、控制和中断 OUT 全速/低速事务的主机和设备状态机。图 8-27、图 8-28 和图 8-29 显示了用于高速事务的状态机。图 8-33 和图 8-34 分别显示了用于批量、控制和中断 IN 事务的主机和设备状态机。




批量读写的顺序位和数据PID使用如图8-35所示。数据包同步是通过使用数据序列切换位和 DATA0/DATA1 PID 实现的。当端点遇到任何配置事件(配置事件在章节9.1.1.5和9.4.5中解释)时,将批量端点切换序列初始化为DATA0。端点上的数据切换不会初始化为短数据包传输或 IRP 停用的直接结果。

主机总是用一个配置事件初始化总线传输到DATA0 PID的第一个事务。第二个事务使用DATA1 PID,连续的数据传输代替其余的批量传输。数据包发送端在收到ACK后进行切换,而接收端在收到并接受有效数据包后进行切换(参见章节8.6)。

2、控制传输

详细内容见 《USB2.0标准协议》 8.5.3 Control Transfers 章节。

控制传输至少两个事务阶段设置状态。控制传输可以选择性地包含设置状态阶段之间数据阶段。在Setup阶段,使用Setup事务将信息传输到设备的控制端点。SETUP 事务的格式与 OUT 类似,但使用 SETUP 而不是 OUT PID。图 8-36 显示了 SETUP 事务格式。SETUP总是为SETUP事务的数据字段使用DATA0 PID。接收 SETUP 的设备必须接受 SETUP 数据并使用 ACK 进行响应;如果数据损坏,则丢弃数据并不返回握手。

控制传输的数据阶段(如果存在)由一个或多个 IN 或 OUT 事务组成,并遵循与大容量传输相同的协议规则。数据阶段中的所有事务必须位于同一方向(即,所有 ID 或所有 OUT)。在数据阶段发送的数据量及其方向是在设置阶段指定的。如果数据量超过预先协商的数据包大小,则数据将在承载最大数据包大小的多个事务(INs 或 OUTs)中发送。剩余的数据作为最后一个事务中的残留数据发送。

控件传输的"状态"阶段是序列中的最后一个事务。状态阶段事务遵循与批量事务相同的协议序列。高速运行设备的状态阶段还包括PING协议。Status阶段是通过改变前一个阶段的数据流方向来划分的,它总是使用DATA1 PID。例如,如果Data阶段由OUTs组成,则状态为单个IN事务。如果控制序列没有Data阶段,那么它由一个Setup阶段和一个由IN事务组成的Status阶段组成。

事务顺序、数据序列位值和控制读写序列的数据PID类型如图8-37所示。序列位显示在括号中。

当一个控制端点在一个控制传输的Data或Status阶段发送一个STALL握手时,在所有后续访问该端点时都必须返回一个STALL握手,直到接收到一个SETUP PID。端点在接收到一个后续的SETUP PID后,不需要返回一个STALL握手。对于默认端点,如果为SETUP事务返回一个ACK握手,主机期望端点已经自动从导致STALL的条件中恢复,并且端点必须正常操作。

1、报告状态结果

Status阶段向主机报告先前传输的Setup和Data阶段的结果。可能会返回三种可能的结果:

  • 命令序列已成功完成。

  • 命令序列无法完成。

  • 该设备仍忙于完成命令。

状态报告总是在设备到主机的方向上。表8-7总结了每种方法所需的响应类型。控制写传输在status阶段事务的数据阶段返回状态信息。控制读传输在status阶段事务的握手阶段返回状态信息,在主机上前一个数据阶段发出了一个零长度的数据包之后。

对于控制读取,主机必须发送OUT令牌或PING特殊令牌(对于高速运行的设备)到控制管道来启动Status阶段。在这个阶段,主机可能只发送一个零长度的数据包,但该设备可以接受任何长度的数据包作为有效的状态查询。管道对这个数据包的握手响应表示当前状态。NAK表示该设备仍在处理该命令,主机应该继续进入Status阶段。ACK表示该设备已经完成了命令,并准备接受新命令。STALL表示该设备有一个错误,阻止它完成命令。

对于控件写,主机向控制管道发送一个IN令牌来启动Status阶段。该设备以握手或零长度数据包进行响应,以指示其当前状态。NAK表示该设备仍在处理该命令,主机应该继续进入Status阶段;返回一个零长度的数据包表示命令正常完成;和STALL表示该设备不能完成该命令。该设备期望主机对Status阶段的数据包做出ACK响应。如果设备没有接收到ACK,它将停留在命令的Status阶段,并且只要主机继续发送in令牌,它将继续返回零长度的数据包。

如果在数据阶段,命令管道被发送了更多的数据,或者被请求返回的数据比设置阶段(参见章节8.5.3.2)指示的更多,它应该返回STALL。如果控制管道在Data阶段返回STALL,则该控制转移将没有Status阶段。

2、变长数据阶段

控制管道可能有一个变长数据阶段,在该阶段中,主机请求的数据比指定的数据结构中包含的数据更多。当所有数据结构都返回给主机时,该设备应该通过返回一个小于管道的MaxPacketSize的包来指示data阶段结束。如果数据结构是管道wMaxPacketSize的整数倍,设备将返回一个零长度的数据包,以指示data阶段的结束。

3、最后一个数据事务的错误处理

如果 IN 事务上的 ACK 握手已损坏,则设备和主机将暂时就事务是否成功存在分歧。如果事务后跟另一个 IN,则切换重试机制将检测不匹配并从错误中恢复。如果 ACK 位于数据阶段的最后一个 IN 上,则无法使用切换重试机制,必须使用替代方案。

成功接收到最后一个IN的主机将发送ACK。稍后,主机将发出一个OUT令牌来启动传输的Status阶段。如果设备没有收到结束Data阶段的ACK,则设备将Status阶段的开始解释为主机成功接收到数据的验证。控件写操作没有这种模糊性。如果 OUT 上的 ACK 握手损坏,主机不会进入到"状态"阶段,而是重试最后一个数据。重试策略的详细分析在第 8.6.4 节中介绍。

4、由控制管道返回的STALL握手

由于控制传输中的设备问题,控制管道具有返回STALL握手的独特能力。如果设备无法完成命令,它将在控制传输的数据和/或状态阶段返回一个STALL。与功能停滞的情况不同,协议停顿并不表示设备出现错误。协议的STALL条件持续到接收到下一个SETUP事务,函数将返回STALL以响应管道上的任何in或OUT事务,直到接收到SETUP事务。通常,协议暂停表明请求或其参数不被设备理解,因此提供了一种扩展USB请求的机制。

控制管也可以支持功能停顿,但这是不推荐的。这是一种退化情况,因为控制管道上的功能停顿表明它已经失去了与主机通信的能力。如果控制管道确实支持功能停滞,则它必须具有 Halt 功能,该功能可由主机设置或清除。第 9 章详细介绍了如何处理控制管道上 Halt 特征的特殊情况。设计良好的设备会将其所有功能和 Halt 功能与非控制终结点相关联。应保留控制管道以处理 USB 请求。

3、中断事务

详细内容见 《USB2.0标准协议》 8.5.4 Interrupt Transactions 章节。

中断事务可以由IN或OUT传输组成。在接收到IN令牌后,函数可以返回数据、NAK或STALL。如果端点没有新的中断信息要返回(即,没有等待的中断),该设备在数据阶段返回一个NAK握手。如果为中断端点设置了Halt特性,该函数将返回一个STALL握手。如果中断处于挂起状态,则该设备将中断信息作为数据包返回。主机在响应收到数据包时,如果收到的数据没有错误,则发出 ACK 握手;如果数据包已损坏,则发出不返回握手。图 8-38 显示了中断事务格式。

第5.9.1节包含了关于高速、高带宽中断端点的附加信息。这类端点在微帧中使用多个事务,如本节中定义的那样。对于高带宽终端,每个事务遵循如图8-38所示的事务格式。

当端点对实际中断数据使用中断传输机制时,必须遵循数据切换协议。这允许设备知道主机已接收到数据,并且可以清除事件条件。这种"有保证"的事件传递允许设备仅发送中断信息,直到主机收到中断信息,而不必在每次轮询函数时发送中断数据,直到USB系统软件清除中断条件。在切换模式下使用时,中断端点由端点上的任何配置事件初始化为 DATA0 PID,其行为与图 8-35 中所示的批量事务相同。

4、等时传输

详细内容见 《USB2.0标准协议》 8.5.5 Isochronous Transactions 章节。

等时传输具有令牌和数据阶段,但没有握手阶段,如图 8-39 所示。主机发出一个IN或OUT令牌,然后是数据阶段,在这个阶段端点(用于INs)或主机(用于OUTs)传输数据。等时传输不支持握手阶段或重试功能。

注意: 全速设备或主机控制器应该能够接受数据包中的 DATA0 或 DATA1 PID。全速设备或主机控制器应仅发送数据包中的 DATA0 PID。高速主机控制器必须能够接受并发送数据包中的 DATA0、DATA1、DATA2 或 MDATA PID。每个微帧最多有 1 个事务的高速设备只能在数据包中发送 DATA0 PID。具有高带宽端点的高速设备(例如,每个微帧具有 1 个以上事务的设备)必须能够接受和/或发送数据包中的 DATA0、DATA1、DATA2 或 MDATA PID。

等时传输不支持切换排序。带有每个微帧一个事务的高速等时传输不支持切换排序。高带宽、高速等时传输支持数据PID排序(有关更多详细信息,请参见第 5.9.1 节)。

图 8-40 和图 8-41 分别显示了等时传输 OUT 事务的主机和设备状态机。图 8-42 和图 8-43 分别显示了等时传输 IN 事务的主机和设备状态机。



十二、传输、事务、包和域的关系

十三、通用 USB 设备操作

详细内容见《USB2.0 标准协议》9.2 Generic USB Device Operations 章节。

USB 协议整理 五:USB概述及协议基础(四)相关推荐

  1. USB 概述及协议基础

    1.1 USB是什么 1. USB是什么: USB是通用串行总线(Universan Serial Bus)的缩写. 2. USB出现的原因: 1)支持热插拔,并且即插即用(PnP:Plug and ...

  2. XSP12 USB PD受电端快充协议芯片

    USB PD受电端快充协议芯片 1.概述 XSP12 是一款集成 USB Power Delivery(PD2.0/3.0)快充协议.QC2.0/3.0 快充协议.华为FCP 协议和三星 AFC 快充 ...

  3. 基于AOA协议的android USB通信

    摘 要:AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设 ...

  4. linux下uvc协议访问usb摄像头,Ubuntu调用USB摄像头

    FreeBSD Webcam:传送门 1 查看摄像头USB驱动 CMD ls /dev/v* Result /dev/vcs /dev/vcs4 /dev/vcsa1 /dev/vcsa5 /dev/ ...

  5. USB TypeC接口和USB PD快充协议,有何区别?

    很多人一下子搞不清楚,怎么USB即是TypeC又是USB PD呢? 首先从USB标准演化来看这个问题: 通常提到USB几点几,一般说地是通信速度变快了. 那USB TypeC又是什么呢?它主要是指接口 ...

  6. Zynq7000 USB2.0协议解析及USB控制器详解

    USB 2.0规范及控制器 文章目录 USB 2.0规范及控制器 USB2.0 Univerasl Serial Bus USB Host USB总线 接口标准 总线信号 USB拓扑结构 数据流模型 ...

  7. USB HID读卡器 M1卡读卡器 Mifare 读写器 NFC方案 NFC读写器方案 usb 接口NFC读写器 ISO14444 TypeA 协议读写器 S50/S70 usb读写器 提供Demo

    [产品简介]     USB Mifare卡系列读写设备是一款简单.实用的13.56MHz非接触式IC卡读写器 可读写银行卡.公交卡.校园卡.燃气卡.MifareS50卡,S70卡(ISO14443A ...

  8. 5、USB协议学习:USB的枚举过程

    文章目录 枚举顺序 枚举过程 标准请求 bmRequestType bReqest 请求类型 GetDescriptor 设备描述符 设备描述符定义 获取设备描述符 返回设备描述符 配置描述符 配置描 ...

  9. windows xp 驱动开发(五) USB驱动程序、应用软件概述

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家提出意见,一起讨论! 1.USB设备驱动程序(WDM模型) 1.1  分类 USB设备驱动程序的设计 ...

  10. USB协议与Windows USB设备驱动程序笔记

    USB概述 USB主控制器负责数据处理,USB根集线器(ROOT HUB)提供一个连接USB主控制器与USB设备之间的接口和通路.USB集线器(USB HUB)可以对原有的USB端口在数量上进行扩展. ...

最新文章

  1. 仰视源代码,实现strcpy
  2. HP大中华区总裁孙振耀谈工作、职业与人生规划
  3. 内向女生适合学计算机吗,适合内向女生学的专业有哪些
  4. 经典C语言程序100例之二五
  5. 运行 ui5 serve 命令行报错的处理方法
  6. xcode快捷键(二)
  7. html5用户输入后自动显示用户名已重复_lt;inputgt; | HTML输入框标签
  8. MySQL中CASE WHEN的用法
  9. 怎么加密高程点_珠峰咋有4个高度?专业测绘科技工作者解读珠峰高程测算过程...
  10. 2021年度最全“Java面试宝典+Java核心知识集”,一箭双雕杠春招
  11. java 找不到符号变量_java 编程中出现的 找不到符号 的问题
  12. 一文弄懂Spring Cloud的5大核心组件详解:Eureka+Hystrix+Zuul+Ribbon
  13. 2021-08-17:资产波动之贝塔系数的比喻
  14. PETA 数据集下载
  15. matlab 去条带噪声,一种图像条带噪声及坏线消除方法
  16. 如何利用一维数组实现二维数组的多列自由升降序排序过程详解
  17. 苹果历代iPod产品大全相册
  18. ubuntu双系统安装教程
  19. Microsoft office 2007 word PPT 转pdf的插件
  20. WS2812灯珠(五)---移植Adafruit_NeoPixel库

热门文章

  1. 应用密码学:协议、算法与C源程序(学习第二章)
  2. 745. 前缀和后缀搜索(每日一难phase2--day27)
  3. 推荐几个rpm包下载网站
  4. matlab计算可达矩阵,matlab计算可达矩阵
  5. 计算机添加路由表命令,win10系统使用dos命令添加静态路由的处理教程
  6. 计算机职业素养结尾,IT职业素养读后感
  7. U盘安装Ubuntu操作系统
  8. 十个随机数排列(vb代码)
  9. 2017大一计算机教程,2017年计算机等考一级章节考点:WPS2000新手入门教程
  10. 弱电工程项目经理部及各相关人员岗位职责