USB 协议整理 五:USB概述及协议基础(四)

article/2025/9/21 6:28:50

十一、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 章节。


http://chatgpt.dhexx.cn/article/pFd3yCS9.shtml

相关文章

USB总线-USB协议简介(一)

1.简介 USB是通用串行总线(Universal Serial Bus)的缩写。在USB总线出现之前,计算机与键盘、鼠标、扫描仪、打印机都使用专用的接口连接,不同设备的接口不能互用,扩展性很差,每次插拔设备都要关闭计算机&a…

USB 协议整理 二:USB概述及协议基础(一)

一、USB 版本 二、USB是什么 USB是一种接口技术,真正的即插即用,英文全称是Universal Serial Bus,USB就是简写,中文叫通用串行总线。USB 的出现简化了个人计算机与外围设备的连接,增加了易用性。 USB 是主从模式。 …

强大的USB协议分析工具

2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力。 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:https://pan.baidu.com/s/12qBCOjuy4i8kr1M…

USB 充电协议

文章目录 锂电子电池电池的发展史锂电子电池充电过程充电物理公式充电器接口 USB协议慢充USB-IF BC1.2 快充QCOM QCOPPO VOOCUSB-IF PDMTK PE USB 充电市场 锂电子电池 电池的发展史 USB充电,都是充的 锂离子电池https://blog.csdn.net/u012719256/article/details/72627022 …

USB 协议分析(含基本协议和 USB 请求和设备枚举)

1. 物理特性 1.1 引脚 一条USB传输线分别由地线、电源线、D和D-四条线构成,D和D-是差分输入线,它使用的是3.3V的电压(与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500mA(可以在编程中设置)。 引脚标号信号名…

1.USB协议简介

最近学习usb相关的知识,一直感觉入不了门,看《linux那些事儿之我是usb》,对usb协议也不是很熟悉,没能坚持看下去,直到看了《圈圈教你玩usb》一书,把自己的兴趣立马提了起来,大牛圈圈用51单片机实…

USB协议基础篇

初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB。 目录 一,从最常见的名词说起 1.1 什么是USB 1.2 USB协议版本 1.3 USB接口分类 1.4 PIPE 1.5 endpoint 1.6 管道通信方式…

USB协议简介

1.USB协议简介 https://blog.csdn.net/songze_lee/article/details/77658094 2017年08月28日 23:20:16 songze_lee 阅读数:22978 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/songze_lee/article/details/7…

USB协议详解

本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100163.com 一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或…

简单说说USB协议(一)

目录 USB是什么 USB协议的传输结构 USB的电气特性 拓扑结构 编码方式 描述符 USB是什么 USB,通用串行总线,是一种计算机与外围设备进行数据交互的通信协议。 任何东西的出现都是有理可循的,在以前计算机刚兴起的时候,要连接…

USB协议介绍

目录 前言 1、概述 1.1 USB协议 1.2 USB充电协议 1.3 USB接口 1.3.1 type-a 1.3.2 Type-C 1.3.3 USB2.0/3.0/3.1/3.2速率 1.3.4 ULPI/UTMI 前言 开始整理USB相关基础概念,仅用于基础介绍、USB概念入门。更深入的内容请参考USB协议手册。部分图文来自参考文…

usb 传输协议

USB,是英文Universal Serial Bus(通用串行总线)、支持设备的即插即用和热插拔功能。在1994年底由英特尔、IBM、Microsoft等公司联合提出的,在此之前PC的接口杂乱,扩展能力差,热拔插不支持等。USB正是为了解…

USB协议(1)USB基础知识

USB(Universal Serial Bus)是通用串行总线的缩写,它是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数…

linux免费的内网穿透

参考:https://www.cpolar.com/blog/how-to-install-cpolar-under-android-termux-hyper-terminal 下载包:https://www.cpolar.com/download 由于我的linux版本是装在安卓手机上的Alpine linux,所以下载的是如下图版本 下载后使用xftp工具上传到服务器&…

钉钉内网穿透 免费内网穿透工具 让你的电脑成为web服务器

什么是内网穿透? 就是让你个人电脑内建立的网站,在外网可以访问,例如你的手机,其他电脑等。 例如你在电脑部署了一个web服务器,你在浏览器访问127.0.0.1可以打开这个网站,但是你用手机访问127.0.0.1却打不…

免费的内网穿透(钉钉)

1.简介 阿里钉钉提供的免费内网穿透,是基于ngrok 的,可以实现 Http 穿透,可以将我们本地服务暴露给外部访问,可以用作我们调试一些回调接口,或者共享一些文件。 优点:网速快,估计是台带宽为100…

免费 内网穿透工具 实测好用

花生壳:已卸载 免费的版本根本不支持http协议,只支持TCP。 星空内网穿透:已卸载 需要注册账号 需要加入QQ群 需要实名认证,填写身份证号 钉钉内网穿透: 没试验,只记录在此 Utools中的内网穿透&#x…

推荐一款真正永久免费的内网穿透

神卓互联内网穿透,是一款真正的永久免费的内网穿透,每月不限流量、访问地址固定不变。 目录 1. 安装神卓互联内网穿透工具 神卓互联内网穿透客户端 控制台-界面清洁-一目了然 2.添加本地web项目-创建映射规则 3.神卓互联-增加通道检测功能&#xff0…

(不打广告)推荐这款永久免费内网穿透软件-神卓互联

内网穿透是一种将内部网络中的应用程序公开到公共网络上的技术。在许多情况下,由于网络安全限制或配置问题,内部网络中的应用程序可能无法通过公共网络访问。这时,内网穿透技术就可以解决这个问题,使得我们可以在没有公共 IP 地址…

内网穿透工具(全免费)

文章目录 前言一、NATAPP是什么?二、使用步骤1.访问官网注册2.客户端下载3 登录,配置参数1 登录,购买免费隧道2 配置参数3 根据authtoken 运行 natapp.exe 4 试试效果 总结 前言 平时开发微信公众号,小程序, 或者给他人演示项目等,难免会遇到需要开通外网的情况,作…