USB学习(2):USB端点和传输协议(数据包、事物)详解

USB学习(2):USB端点和传输协议(数据包、事物)详解接着上一篇文章 继续介绍一下 USB 的端点 传输协议 数据包和事物 的知识 usbendpoint

大家好,欢迎来到IT知识分享网。

接着上一篇文章USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式,继续介绍一下USB的相关知识。

1 USB端点(Endpoints)

1.1 基本知识

1.2 四种端点

(2)中断端点(Interrupt Endpoints)
主要用于需要使用高可靠性方法传输少量数据的设备,通常在人机界面设备(HID)中常见。它不是真正的中断,而是使用轮询,它可以保证主机以可预测的间隔检查数据。中断传输提供了准确性保证,因为错误会被正确检测,并在下一个事务中进行重试。在低速和全速设备上,中断传输具有90%的保证带宽,而在高速设备上为80%。这个带宽与等时端点共享。

中断端点的最大数据包大小取决于设备的速度。高速设备支持最大数据包大小为1024字节。全速设备支持最大数据包大小为64字节。低速设备支持最大数据包大小为8字节。

(3)批量端点(Bulk Endpoints)
用于批量传输,通常用于需要在不定的时间内传输相对大量数据的设备,其中传输可以使用任何可用的带宽空间。它是USB设备最常见的传输类型。批量传输的时间是可变的,取决于总线上有多少可用带宽,因为没有为传输设置预留的带宽。批量传输提供了准确性保证,因为错误会被正确检测,事务会被重新发送。批量传输在传输大量数据,但对传输时间不敏感的情况下非常有用。

批量端点的最大数据包大小取决于设备速度。高速设备支持的最大BULK数据包大小为512字节。全速设备支持的最大数据包大小为64字节。低速设备不支持批量传输类型。

(4)等时端点(Isochronous Endpoints)
用于等时传输,这是连续的、实时的传输,具有主机和设备事先协商好的带宽。等时传输必须支持容忍错误数据流,因为它们没有错误恢复机制或握手。错误通过CRC字段检测,但不会被更正。在等时传输中,需要权衡保证交付与保证准确性。音乐流或视频流是使用等时端点的应用示例,因为偶尔丢失的数据会被人类的耳朵和眼睛忽略。等时传输在低速和全速设备上有90%的保证带宽(高速设备为80%),并与中断端点共享。

高速设备支持的最大数据包大小为1024字节。全速设备支持的最大数据包大小为1023字节。低速设备不支持等时传输类型。在等时传输中有特殊考虑因素。通常需要使用3倍的缓冲来确保数据准备就绪,包括一个正在主动传输的缓冲区,一个已加载并准备传输的缓冲区和一个正在主动加载的缓冲区。

传输类型 控制端点 中断端点 批量端点 等时端点
典型用例 设备初始化和管理 鼠标和键盘 打印机和大容量存储 音频流和视频流
低速支持 Yes Yes No No
差错检验 Yes Yes Yes No
保证数据交付率 No No No Yes
保证带宽 Yes(10%) Yes(90%) No Yes(90%)
保证延迟 No Yes No Yes
最大传输大小 64bytes 64bytes 64bytes 1023bytes(Full-Speed)
1024bytes(High-Speed)
最大传输速率 823KB/s 1.216MB/s 1.216MB/s 1.023MB/s

2 传输协议

USB通信包含一系列的帧。每一帧包含一个起始帧(Start of Frame,SOF),然后是一个或多个事务(transaction)。每个事务由一系列数据包(packet)组成。每个数据包以一个同步模式(SYNC)开始,并以“数据包结束”(End of Packet,EOP)模式结束。在最基本的情况下,一个事务包括一个令牌数据包(token packet)。根据具体的事务类型,可能还会有一个或多个数据数据包,而有些事务还可能有握手数据包。如下图所示:
在这里插入图片描述
事务是数据包的交互过程,它由三种不同类型的数据包组成:令牌数据包数据数据包(可选)和握手数据包。事务被放置在帧内,不会被拆分到不同帧中(除非是高速等时传输的情况),也不会在其他事务中间中断。下图显示了一个事务的块状图示:
在这里插入图片描述
不同类型的数据包包含不同的信息,以下是可能包含在数据包中的信息:



  • 数据包标识(PID) :(8位:4位类型标识位和4位错误检查位)。这些位声明了一个事务是IN(输入)/OUT(输出)/SETUP(设置)/SOF(帧起始)之一。
  • 设备地址(可选):(7位:最多127个设备)。
  • 端点地址(可选) :(4位:最多16个端点)。USB规范支持最多32个端点。虽然4位能提供最大值为16,但我们可以通过使用一个IN PID、一个介于1到16之间的端点地址一个OUT PID和一个介于1到16之间的端点地址,实现16+16=32个端点。
    • 注意:端点地址(实际用于数据传输的端点的地址标识)和端点编号(端点编号是用于在设备描述和配置中进行标识的逻辑标识符)的区别。
  • 有效数据(可选) :(0到1023字节)。
  • CRC(可选):(5位或16位)。

2.1 数据包类型

除了PID(数据包标识)之外,数据包中的所有内容都是可选的。上图可以代表四种数据包类型,

2.1.1 令牌数据包(Token packets)

  • 用于启动事务、识别参与事务的设备、始终由主机发出

令牌数据包始终来自主机,用于指导总线上的数据流向。令牌数据包的功能取决于执行的活动。

  • IN令牌:用于请求设备将数据发送到主机
  • OUT令牌:用于发送主机的数据
  • SETUP令牌:用于发送主机的命令
  • SOF令牌:用于标记时间帧
  • SOF数据包不会触发握手数据包的发送
  • High-Speed USB引入了微帧,每125微秒发送一个SOF,而帧计数仅在每1毫秒递增一次。

2.1.2 数据数据包(Data packets)

  • 用于传递有效载荷(payload)数据、由主机或设备发送

2.1.3 握手数据包(Handshake packets)

  • 用于确认接收到无错误的数据

握手数据包意味着每个事务的结束。每个握手数据包包括一个8位数据包标识,并由事务的接收方发送。不同的USB速度所支持的握手数据包不同:

  • ACK(低速/全速/高速):确认成功完成
  • NAK(低速/全速/高速):否定确认
  • STALL(低速/全速/高速):由设备发送的错误指示
  • NYET(仅高速):表示设备尚未准备好接收另一个数据包
    在这里插入图片描述

2.1.4 特殊数据包(Special packets)

  • 有助于处理不同的传输速度差异(如主机是USB3.0,设备为USB2.0)、由主机发送到USB集线器

USB规范定义了四种特殊数据包:

  • PRE:由主机发送给集线器,表示接下来的数据包是低速的
  • SPLIT(仅高速):在令牌数据包之前,用于指示分裂事务
  • ERR(仅高速):由集线器返回,用于报告分裂事务(一种特殊的USB传输方式:将一个USB事务分成两个独立的部分,其中一个部分在主机和集线器之间进行,而另一个部分在集线器和设备之间进行)中的错误
  • PING(仅高速):在收到NYET握手后,用于检查Bulk OUT(大容量数据传输)或Control Write(发送命令或配置参数到USB设备的一种传输类型)的状态
    在这里插入图片描述

2.2 事务类型

USB转换是数据从主机到设备或从设备到主机的方式。有几种不同的事务类型,它们通常使用不同的名称来表示相同的概念。这三种不同的事务类型如下:

2.2.1 IN/Read/Upstream事务

2.2.2 OUT/Write/Downstream事务

OUT、Write和Downstream都是从主机到设备的事务。在这种类型的事务中,主机发送适当的令牌包(OUTSETUP),然后跟随一个或多个数据包。接收设备通过发送适当的握手包来结束事务。如下图所示,主机的事务为白色方框,来自设备的事务为黑色方框。

在这里插入图片描述

如下图所示,主机发送了OUT令牌包和一个DATA0数据包,但从设备接收到NAK。主机随后重试发送数据。注意,从握手收到NAK以来,数据切换位未发生变化。在下一次尝试发送数据时,设备以ACK确认,表示OUT事务成功完成。

在这里插入图片描述

2.2.3 控制事务

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137435.html

(0)
上一篇 2025-06-20 17:10
下一篇 2025-06-20 17:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信