根据 USB 规范,设备端点是 USB 设备中一个独特的可寻址部分,它作为主机和设备间通信流的信息源或库。
USB 枚举和配置一节介绍了设备向默认地址做出响应的步骤。
枚举过程中,该事件在主机读取端点描述符等其他描述符信息之前发生。
在该过程中,需要使用一套专用的端点用于与设备进行通信。
这些专用的端点(统称为控制端点或端点 0)被定义为端点 0 IN 和端点 0 OUT。
虽然端点 0 IN 和端点 0 OUT 是两个不同的端点,但对开发者来说,它们的构建和运行方式是一样的。每一个 USB 设备都需要支持端点 0。因此,该端点不需要使用独立的描述符。
除了端点 0 外,特定设备所支持的端点数量将由各自的设计要求决定。
简单的设计(如鼠标)可能仅要一个 IN 端点。
复杂的设计可能需要多个数据端点。
USB 规范对高速和全速设备的端点数量进行了限制,即每个方向最多使用 16 个端点(16 个 IN、16 个 OUT,总共为 32 个),其中不包含控制端点 0 IN 和 0 OUT 在内。低速设备仅能使用两个端点。
USB 类设备可对端点数量设定更严格的限制。
例如,低速人机界面设备(HID)设计的端点可能不超过两个 — 通常有一个 IN 端点和一个 OUT 端点。数据端点本身具有双向特性。只有对它们进行配置后才支持单向传输(具有单向特性)。例如,端点 1 可作为 IN 或 OUT 端点使用。设备的描述符将正式使其成为一个 IN 端点。
各端点使用循环冗余校验(CRC)来检测传输中发生的错误。
CRC 是一个用于检测错误的计算值。USB 规范中对实际的计算公式进行了解释,这些计算由 USB 硬件进行,这样可确保能够发出正确的响应。数据操作的接收方对数据进行CRC 检查。如果两者匹配,那么接收方将发出一个 ACK。如果两者匹配失败,便不会发出任何握手数据包。
在这种情况下,发送方将重新发送数据。
USB 规范定义了四种端点,并根据类型以及所支持的设备速度限制了数据包的尺寸。
根据设计要求,开发者使用端点:
描述符指出端点类型以及数据包最大尺寸。四种端点和各自的特性如下:
控制端点 — 这些端点支持控制传输(即所有设备支持的传输)。控制传输通过总线发送和接收设备的信息。它的优点是可以保证传输准确。它能够立即检测到错误的发生,并重新发送数据。控制传输在低速和全速设备上使用 10%的保留带宽(在高速设备上为 20%)并提供 USB 系统级控制。
中断端点 — 这些端点支持中断传输。这种传输非常适合需要使用高度可靠的方式来传输少量数据的设备。它通常用于HID 设计。这种传输的名称可引起误会。实际上,它并不是一个中断,但使用了一个轮询率。进行该传输时,主机将在预计时间间隔内检查数据。通过及时检测错误并重新传输数据,该传输可确保数据操作的准确性。在低速和全速设备上,中断传输使用带宽的 90%,而在高速设备上,所用的带宽为 80%。同步端点与其共享该带宽。
中断端点的数据包最大尺寸与设备的速度相关。高速设备支持最大为 1024 字节的数据包。全速设备支持最大为 64 字节的数据包。低速设备支持最大为 8 字节的数据包。
批量端点 — 这些端点支持批量传输,即是在高度可变的时间内传输大量数据并且可用任何带宽空间的传输。它们是USB 设备的最通用传输类型。因为用于批量传输的带宽并不是固定的,该传输的传送时间也是可变的。传送时间取决于总线上的可用带宽,由于该因素,便不能预期实际的传送时间。通过及时检测错误并重新传输数据,该传输可确保数据操作的准确性。批量传输非常适合对时间没有严格要求的大量数据传输。
批量端点的数据包最大尺寸与设备速度相关。高速设备支持最大为 512 字节的数据包。全速设备支持最大为 64 字节的数据包。低速设备不支持批量传输。
同步端点 — 这些端点支持同步传输,即具有预定带宽的连续性实时传输。由于同步传输没有错误恢复机制和握手数据包,它们需要支持容忍错误的数据流。错误由 CRC 字段检测,但不会被修改。因此,同步传输可保证传输速度,但以数据的准确性作为代价。流式音乐或视频即是使用同步端点的应用示例,因为我们的耳朵和眼睛通常忽略偶尔被错过的数据。在低速和全速设备上,同步传输使用带宽的 90%(在高速设备上,所用的带宽为 80%),中断传输与其共享该带宽。
高速设备支持最大为 1024 字节的数据包。全速设备支持最大为 1023 字节的数据包。低速设备不支持同步传输。有关同步传输,请注意一些重点内容。为了保证数据传输,您通常需要使用三个缓冲区,一个正在传输数据、一个已加载数据和一个正在进行加载数据。