USB 协议整理 五:USB概述及协议基础(四)
十一、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概述及协议基础(四)相关推荐
- USB 概述及协议基础
1.1 USB是什么 1. USB是什么: USB是通用串行总线(Universan Serial Bus)的缩写. 2. USB出现的原因: 1)支持热插拔,并且即插即用(PnP:Plug and ...
- XSP12 USB PD受电端快充协议芯片
USB PD受电端快充协议芯片 1.概述 XSP12 是一款集成 USB Power Delivery(PD2.0/3.0)快充协议.QC2.0/3.0 快充协议.华为FCP 协议和三星 AFC 快充 ...
- 基于AOA协议的android USB通信
摘 要:AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设 ...
- linux下uvc协议访问usb摄像头,Ubuntu调用USB摄像头
FreeBSD Webcam:传送门 1 查看摄像头USB驱动 CMD ls /dev/v* Result /dev/vcs /dev/vcs4 /dev/vcsa1 /dev/vcsa5 /dev/ ...
- USB TypeC接口和USB PD快充协议,有何区别?
很多人一下子搞不清楚,怎么USB即是TypeC又是USB PD呢? 首先从USB标准演化来看这个问题: 通常提到USB几点几,一般说地是通信速度变快了. 那USB TypeC又是什么呢?它主要是指接口 ...
- Zynq7000 USB2.0协议解析及USB控制器详解
USB 2.0规范及控制器 文章目录 USB 2.0规范及控制器 USB2.0 Univerasl Serial Bus USB Host USB总线 接口标准 总线信号 USB拓扑结构 数据流模型 ...
- USB HID读卡器 M1卡读卡器 Mifare 读写器 NFC方案 NFC读写器方案 usb 接口NFC读写器 ISO14444 TypeA 协议读写器 S50/S70 usb读写器 提供Demo
[产品简介] USB Mifare卡系列读写设备是一款简单.实用的13.56MHz非接触式IC卡读写器 可读写银行卡.公交卡.校园卡.燃气卡.MifareS50卡,S70卡(ISO14443A ...
- 5、USB协议学习:USB的枚举过程
文章目录 枚举顺序 枚举过程 标准请求 bmRequestType bReqest 请求类型 GetDescriptor 设备描述符 设备描述符定义 获取设备描述符 返回设备描述符 配置描述符 配置描 ...
- windows xp 驱动开发(五) USB驱动程序、应用软件概述
转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家提出意见,一起讨论! 1.USB设备驱动程序(WDM模型) 1.1 分类 USB设备驱动程序的设计 ...
- USB协议与Windows USB设备驱动程序笔记
USB概述 USB主控制器负责数据处理,USB根集线器(ROOT HUB)提供一个连接USB主控制器与USB设备之间的接口和通路.USB集线器(USB HUB)可以对原有的USB端口在数量上进行扩展. ...
最新文章
- 2014年下半年信息系统项目管理师上午试题试题与答案 54
- 布线时其他区域变黑、高亮Net时其他区域太黑
- boost::safe_numerics模块测试对文字的 constexpr 操作
- MaxCompute Next
- Ubuntu系统---C++之Eclipse 开始工程项目
- ofbiz中的数据模型
- Free Code Camp现在有本地组
- java robot键值_Java:使用Robot类模拟键盘, 以Alt码方式输出汉字
- 放弃微博,继续回来写月经
- Linux 文件类型!
- 苹果iPhone手机升级系统内存空间变小不够如何解决?
- Capture CIS 软件功能介绍
- 夏季刮油蔬菜排行榜,还不赶紧学起来,看看是否有你的“菜”
- 博途软件中多重背景块的建立_TIA博途软件中创建多重背景函数块
- 最全超实用的网站SEO优化方案步骤解析
- 通过okHttpUtils实现文件的上传下载
- QQ无法登录的一劳永逸解决方案(浏览器可以上网但QQ死都登不上去)
- 左右手桌面股票盯盘软件
- 用于著作权申报的代码导出功能
- 【点云系列】Multi-view Neural Human Rendering (NHR)
热门文章
- 基于单片机智能电子密码锁设计(毕业设计资料)
- 飞凌单片机解密_[资料] 常见的IC芯片解密方法与原理解析!
- U8Cloud 3.5 试用笔记
- windows进程 windows多进程编程
- 公司打算使用内网安全管理的软件,看了一下感觉IP-guard和Ping32两个好像不错,有需要的朋友可以参考一下
- oracle和timesten整合,Oracle TimesTen 关系型内存数据库18.1新版本详解
- Quantum Machine Learning——QML学习记录00
- 下载离线aptana的eclipse插件
- 联想19/20财年录得强劲的营业额 税前利润创历史新高 力克挑战,勇攀高峰
- java g.drawline_菜鸟求教:关于Graphics g中的g.drawLine问题