包的格式
包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在 USB总线 上传输的。
数据在 USB总线 上的传输以包为单位,包只能在帧内传输
。
高速USB总线的帧周期为125us(=0.125ms),全速以及低速 USB 总线的帧周期为 1ms。
帧 的 开始由一个特定的包(SOF包 令牌包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。
包是USB总线上数据传输的最小单位,包不能被打断
或干扰,否则会引发错误。
若干个数据包组成一次事务传输,一次事务传输也不能打断
,属于一次事务传输的几个包必须连续,不能跨帧完成。
一次传输由 一次到多次事务 传输构成,一次传输可以跨帧完成(即:一次传输可以被打断)
。
USB包由五个域组成,即: //★
- 同步域(SYNC)
- 标识符域(PID)
- 数据域(ADDR + Frame Number + DATA )
- 循环冗余校验域(CRC)
- 包结尾域(EOP)
包
的基本格式如下图(即:一个包由下面多个域组成): //★
- 简易格式1: //相对格式2 少了 SOP起始信号 和 EOP终止信号,为了快速了解
- 完整格式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 标志当前帧的终止。
作用
帧调度边界:
- 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)。