在现代电子设备中,USB作为一种通用、可靠的通信接口,几乎无处不在。从手机充电口、存储设备,到嵌入式系统的数据传输,USB协议为多种场景提供了稳定、高效的数据通道。尽管其应用看似简单易用,但其底层通信协议结构却高度复杂和严谨,尤其是对嵌入式开发者而言,理解USB的通信机制对于设备调试、协议栈移植至关重要。
一、USB通信协议的分层结构
USB通信的本质是主机与设备端点之间的分组数据交互。整个通信体系自底向上分为以下三个主要层级:
• Packet(包):USB通信的最小数据单元;
• Transaction(事务):由多个数据包组成,完成一次端点的访问;
• Transfer(传输):由一次或多次事务构成,完成一次完整服务的数据交互过程。
这种分层结构可类比于网络协议的分层模型,有助于分别处理电气传输、数据逻辑和服务语义等不同维度的问题。
二、Packet结构详解
- 包格式及构成
每个USB包由以下五个主要部分组成:
• SYNC(同步字段):接收器以此锁相,标志包起始;
• PID(包标识符):定义包类型(IN、OUT、DATA、ACK等);
• Payload/Data(数据字段):有效负载,长度依传输类型而异;
• CRC(循环冗余校验):用于数据完整性验证;
• EOP(包结尾):特定电平表示包结束。
同步字段和EOP字段为物理层控制信息,而PID、数据与CRC为协议层信息。 - 包分类与功能
• Token包:由主机发出,包含IN、OUT、SETUP、PING四种;
• Data包