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 标志当前帧的终止。
作用
帧调度边界:
- OHCI 主机控制器(HC)在每帧结束时执行以下操作:
- 更新 Frame Number Counter(FNO)。
- 检查并处理 周期性传输列表(Periodic List) 中的等时(Isochronous)和中断(Interrupt)传输。
- OHCI 主机控制器(HC)在每帧结束时执行以下操作:
带宽管理:
- 确保每帧内的传输不超过 USB 总线的带宽限制(如 Full Speed 下每帧最多 1200 字节)。
硬件行为:
- 触发 SOF(Start of Frame) 包,标志下一帧的开始。
- 若当前帧未完成传输,HC 可能强制终止并进入下一帧。
示例场景
- 在 等时传输(Isochronous) 中,HC 必须在 EOF 前完成当前帧的数据传输,否则数据会被丢弃(因无重传机制)。
2. EOP(End of Packet)
定义
- EOP 表示 单个 USB 数据
包(Packet)的结束。 - 它是物理层信号,由 2 个位的 SE0(Single-Ended Zero)状态 + 1 位 J 状态 组成。
作用
包传输终止:
- 标志一个完整的 USB 包(如 Token Packet、Data Packet、Handshake Packet)已发送或接收完毕。
错误检测:
- 如果 EOP 信号异常(如长度错误),HC 会标记 CRC 错误 或 位填充错误。
握手协议:
- 在 控制传输(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)。
