包的格式

(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在 USB总线 上传输的。

数据在 USB总线 上的传输以包为单位,包只能在帧内传输

高速USB总线的帧周期为125us(=0.125ms)全速以及低速 USB 总线的帧周期为 1ms

开始由一个特定的包(SOF包 \in 令牌包)表示,帧尾为 EOFEOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。

包是USB总线上数据传输的最小单位,包不能被打断或干扰,否则会引发错误。
若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。
一次传输由 一次到多次事务 传输构成,一次传输可以跨帧完成(即:一次传输可以被打断)

USB包由五个域组成,即: //★

  1. 同步域(SYNC)
  2. 标识符域(PID)
  3. 数据域(ADDR + Frame Number + DATA )
  4. 循环冗余校验域(CRC)
  5. 结尾域(EOP)

基本格式如下图(即:一个包由下面多个域组成): //★

  • 简易格式1: //相对格式2 少了 SOP起始信号 和 EOP终止信号,为了快速了解
    2.1 包组成(Packets Content) - 图1
  • 完整格式2://建议记住这个。
    2.1 包组成(Packets Content) - 图2

SOP = Start Of Packet
EOP = End Of Packet

SofTool.CN
我认为应该采纳 完整格式2 来理解。

EOF 和 EOP 的区别

OHCI(Open Host Controller Interface) 规范中,EOF(End of Frame)EOP(End of Packet) 是两个关键概念,它们在 USB 数据传输中扮演不同的角色。以下是它们的详细区别:

1. EOF(End of Frame)

定义

  • EOF 表示 USB (Frame)或微帧(Microframe)的结束
  • OHCI 中,USB 时间被划分为 1ms 的帧(Full Speed)125µs 的微帧(High Speed),EOF 标志当前帧的终止。

作用

  1. 帧调度边界

    • OHCI 主机控制器(HC)在每帧结束时执行以下操作:
      • 更新 Frame Number Counter(FNO)。
      • 检查并处理 周期性传输列表(Periodic List) 中的等时(Isochronous)和中断(Interrupt)传输。
  2. 带宽管理

    • 确保每帧内的传输不超过 USB 总线的带宽限制(如 Full Speed 下每帧最多 1200 字节)。
  3. 硬件行为

    • 触发 SOF(Start of Frame) 包,标志下一帧的开始。
    • 若当前帧未完成传输,HC 可能强制终止并进入下一帧。

示例场景

  • 等时传输(Isochronous) 中,HC 必须在 EOF 前完成当前帧的数据传输,否则数据会被丢弃(因无重传机制)。

2. EOP(End of Packet)

定义

  • EOP 表示 单个 USB 数据(Packet)的结束
  • 它是物理层信号,由 2 个位的 SE0(Single-Ended Zero)状态 + 1 位 J 状态 组成。

作用

  1. 包传输终止

    • 标志一个完整的 USB 包(如 Token Packet、Data Packet、Handshake Packet)已发送或接收完毕。
  2. 错误检测

    • 如果 EOP 信号异常(如长度错误),HC 会标记 CRC 错误位填充错误
  3. 握手协议

    • 控制传输(Control Transfer)批量传输(Bulk Transfer) 中,EOP 后设备需返回 ACK/NAK/STALL 握手包。

示例场景

  • 主机发送一个 OUT 数据包 后,EOP 标志包结束,设备需在指定时间内回复 ACK

3. 关键区别对比

特性 EOF(End of Frame) EOP(End of Packet)
作用范围 帧级(1ms 或 125µs 时间单位) 包级(单个 USB 数据包)
触发行为 帧计数器更新、SOF 发送、周期性传输调度 包传输终止、握手协议触发
硬件信号 无特定物理信号,由 HC 内部逻辑管理 明确的物理层信号(SE0 + J 状态)
错误处理 帧超时或带宽超额会导致丢帧 EOP 信号异常会触发 CRC 错误或重传
关联传输类型 影响所有传输类型(尤其是等时/中断传输) 所有包均需 EOP,但对控制/批量传输更关键

4. 实际应用中的联系

  • 协同工作
    一个 USB 帧(EOF 终止)内可能包含多个数据包(每个包以 EOP 结束)。例如:

    • 等时传输 中,HC 可能在一个帧内发送 多个等时包,每个包以 EOP 终止,最后以 EOF 结束整个帧。
  • 时序关系

    • 若某个包的 EOP 未在 EOF 前完成,该包可能被截断(等时传输)或触发重传(批量传输)。

5. 总结

  • EOF时间调度单位 的结束,关乎 USB 的全局带宽管理和帧同步。
  • EOP数据包 的结束,确保单个包的完整性和协议正确性。

在 OHCI 驱动开发中:

  • 需通过 HcFmInterval 寄存器 配置帧长度(EOF 间隔)。
  • 需检查 HcInterruptStatus 寄存器 的 EOP 相关错误标志(如 CRCError)。