公司动态
USB2.0简述
USB2.0协议是2000年发布的一项通用串行总线标准它最核心的变革是将传输速率大幅提升至480Mbps并保持了与之前版本的完美兼容。它不仅继承了即插即用和热插拔的便利性更通过一套精密的协议机制为主机与设备之间搭建了高效、可靠的通信桥梁。 速度USB2.0协议定义了三种运行模式以适应不同设备的需求高速模式480 Mbps这是USB 2.0引入的最大亮点为外置硬盘、高清摄像头等高带宽设备提供了充足的传输通道。全速模式12 Mbps用于早期的USB设备如USB 1.1版本的音频设备或摄像头。低速模式1.5 Mbps专为鼠标、键盘等人机交互设备设计足以满足其低数据量的需求。️USB 2.0 协议框架USB 2.0 通信协议采用严格的主从架构所有通信均由 USB 主机发起和控制。下面从物理拓扑、逻辑结构、通信模型、枚举过程和传输类型几个方面阐述其框架。1. 物理拓扑USB 系统采用分层的星型拓扑USB 主机位于顶端包含主机控制器和根集线器是整个总线的主控者。集线器用于扩展端口可级联最多支持 7 层。功能设备位于叶子节点提供具体功能如键盘、U盘。主机通过根集线器连接下游集线器或设备整个系统最多可连接 127 个设备包括集线器。物理连接采用 4 线电缆VBUS5V 电源、GND地、D 和 D-差分数据线。在物理层面USB 2.0有着严谨的规范连接线缆采用4线制包括VBUS5V电源、GND地线和D、D-差分数据线。信号编码使用NRZI非归零反转编码方式并通过位填充技术来保证接收端的时钟同步确保数据能准确无误地传输。供电能力可通过VBUS为设备供电电压为5V最大电流500mA。2. 逻辑结构每个 USB 设备在逻辑上被分解为若干层级设备代表一个物理硬件拥有唯一的设备地址1-127。默认地址 0 用于枚举阶段。配置一个设备可以有多个配置但同一时刻只能有一个配置生效。配置决定了设备的功耗和接口组合。接口一个配置可以包含多个接口每个接口代表一个功能或功能的一个侧面。接口是驱动程序绑定即加载驱动的目标。端点接口由若干端点组成。端点是 USB 通信的逻辑终点每个端点有唯一的端点号0-15和方向IN/OUT。端点 0 是所有设备必须有的控制端点用于设备管理和控制。其他端点根据传输类型分为批量、中断、同步端点。管道主机与设备某个端点之间的逻辑连接描述了数据传输的通道属性如传输类型、方向、最大包大小。3. 通信模型USB 总线上的所有数据传输都由主机以事务Transaction为单位发起。一个事务通常包含三个连续的包阶段令牌包阶段主机发送令牌包指明事务的类型IN、OUT 或 SETUP、目标设备地址和端点号。数据包阶段可选根据令牌包的方向主机或设备发送数据包。数据包有 DATA0/DATA1 的 PID 交替用于数据同步和错误检测。高速模式下还有 DATA2 和 MDATA。握手包阶段可选接收方返回握手包报告传输状态。握手包类型包括 ACK成功、NAK忙无法接收/发送、STALL错误条件、NYET无响应用于高速模式流控。并非所有事务都包含数据包和握手包控制传输的设置阶段只有令牌和数据无握手同步传输无握手阶段。4. 枚举过程当 USB 设备插入主机时主机通过以下步骤识别并配置设备设备连接检测集线器检测到端口状态变化通知主机。复位设备主机通过集线器向该端口发送复位信号使设备处于默认状态。分配地址主机通过默认地址 0 向设备发送SET_ADDRESS请求分配一个唯一的设备地址。获取描述符主机使用新地址发送GET_DESCRIPTOR请求获取设备描述符、配置描述符、接口描述符、端点描述符等。对于 HID 设备还会获取报告描述符。加载驱动程序主机根据获取的类、子类、协议代码如接口描述符中的bInterfaceClass加载相应的驱动程序。选择配置主机发送SET_CONFIGURATION请求选择一个有效的配置设备进入就绪状态。5. 传输类型USB 2.0 定义了四种传输类型以适应不同设备的需求控制传输用于设备枚举和命令控制。它是双向的、可靠的使用端点 0。每个控制传输分为设置阶段、数据阶段可选和状态阶段。批量传输用于大量数据的可靠传输如 U盘、打印机。使用批量端点有错误重传机制无带宽保证但可充分利用空闲带宽。高速模式下最大包大小为 512 字节。中断传输用于保证查询周期的数据传输如键盘、鼠标。主机保证在不超过端点描述符中指定的时间间隔内发起事务。全速设备周期为 1-255ms高速设备周期为 125µs-4096ms。高速模式下最大包大小为 1024 字节。同步传输用于实时性要求高、可容忍少量错误的数据流如音频、视频。使用同步端点无握手阶段无重传带宽有保证。高速模式下最大包大小为 1024 字节。6. 数据包格式USB 数据包由同步字段SYNC、包标识符PID、数据字段可选、循环冗余校验CRC和包结尾EOP组成。PID 字段指示包类型令牌包IN、OUT、SETUP、SOF数据包DATA0、DATA1、DATA2、MDATA握手包ACK、NAK、STALL、NYET特殊包PRE、ERR、SPLIT、PING 主要USB设备类一览USB通用串行总线协议将具有类似功能的设备归为一个“设备类”Device Class。这样做的最大好处是操作系统可以自带通用的类驱动程序开发者无需为每个新设备都从头编写驱动极大地简化了开发工作。核心的设备类设备类用途典型设备主要特点使用的传输类型人机接口设备 (HID)实现人与计算机的交互键盘、鼠标、游戏杆、触摸板-低延迟对用户操作需快速响应-数据量小每次传输的数据量很小如按键坐标-查询机制主机会以固定频率1-255ms查询设备是否有数据需要传输中断传输大容量存储 (MSC)存储和传输大量数据U盘、移动硬盘、SD卡读卡器、数码相机-海量数据传输数据量大但对传输时间没有严格要求-高可靠性要求数据必须100%完整、无差错地传输-带宽共享在总线空闲时才进行传输不占用固定带宽批量传输音频 (Audio)处理音频信号的输入与输出USB耳机、音箱、麦克风、声卡-实时性优先音频流必须连续、稳定对延迟敏感-容忍少量错误偶尔的丢包或数据错误如轻微的爆音比音频中断的影响要小-带宽保证需要占用固定的总线带宽同步传输视频 (Video/UVC)传输动态影像数据USB摄像头、网络摄像头、视频采集卡-高带宽需求需要高速传输大量视频数据-实时性要求高必须保证画面的流畅性延迟要低-允许一定错误偶尔的像素错误或丢帧通常不影响整体观看同步传输通信设备 (CDC)实现网络连接或传统串口通信USB Modem、USB网卡、USB转串口适配器-数据流传输传输的是持续的数据流如网络数据包-多种子类包括以太网控制模型用于USB网卡、抽象控制模型用于模拟串口等批量传输/中断传输/控制传输(取决于子类)打印 (Printer)向打印设备发送页面数据各种USB接口的打印机-数据量大打印任务尤其是图形的数据量通常不小-可靠性要求高打印内容不能有错位、乱码等错误-单向/双向既需要发送打印数据也需要接收打印机状态信息批量传输(用于发送数据)中断传输(可选用于获取打印机状态)DFU (设备固件升级类)为通过USB接口更新设备固件提供了标准化方法常见于嵌入式系统或需要固件升级的消费电子产品 。PHDC (个人医疗设备类)专为医疗健康设备定义如USB接口的血压计、血糖仪方便采集健康数据 。USB Billboard Class (电子看板类)主要用于USB Type-C设备在连接出现兼容性问题如未支持的Alternate Mode时向用户显示错误信息 。另外一个物理设备可以同时支持多个设备类比如带有麦克风Audio类和摄像头Video类的笔记本摄像头。这种设备被称为复合设备Composite Device。 设备类在协议框架下的通信区别每种设备类的核心区别不在于它们发明了全新的底层通信协议而在于它们在USB协议栈的框架内定义了完全不同的描述符、命令集合或请求以及数据格式。下面从核心架构、传输类型绑定、描述符结构三个维度详细说明 HID、MSC、CDC、UAC、UVC 类的区别。1. 核心架构标准设备请求 vs. 类特定命令所有 USB 设备都必须响应主机发出的标准设备请求如GET_DESCRIPTOR、SET_ADDRESS这部分是通用的。真正的区别在于枚举之后主机与设备进行功能交互时所使用的“命令集”。HID 类使用“报告”协议HID 设备不关心数据的具体含义只负责按照设备描述符中定义的“报告描述符”的格式将数据打包成“报告”Report发送给主机。主机通过标准的 HID 类特定请求如GET_REPORT、SET_REPORT、GET_IDLE、SET_IDLE来获取或设置这些报告。数据的解释权在主机端的 HID 驱动程序。MSC 类模拟磁盘命令MSC 设备将 USB 总线模拟成一个块存储设备。它在协议层之上封装了一套更上层的命令集最主流的是SCSI 命令集如READ(10)、WRITE(10)。主机通过 USB 批量传输端点发送封装好的CBW命令块包CBW 为 31 字节包含命令块标签、数据传输长度、方向、逻辑单元号及 SCSI 命令。设备执行后返回CSW命令状态包CSW 为 13 字节包含标签、剩余数据和状态。CDC 类模拟串口/网络CDC 是一个复合类通常由通信控制接口和数据接口两个独立的接口组成。控制接口使用控制传输端点 0或一个中断端点来传递通信线路的状态如 DTR 信号变化、波特率设置等。这些是通过类特定请求实现的例如SET_LINE_CODING数据阶段携带 7 字节结构包含波特率、停止位、校验位、数据位和SET_CONTROL_LINE_STATE。数据接口使用一对批量端点传输纯粹的串行数据流或网络数据包。虚拟串口是拥有一套串口的交互壳他的数据传输单位不是uart帧结构是Packet。令牌包Token、数据包DATA0/DATA1和握手包ACK/NAK。Uart是约定数据的速度和用帧结构包起来通信USB是靠NRZI编码。2. 传输类型与端点属性的绑定设备类的协议直接决定了它需要使用哪种类型的端点不同的传输类型对应不同的可靠性、实时性要求。同步传输的独特性Audio/Video 类Audio 和 Video 类的协议核心是“实时性优先”。它们使用的同步端点有其独特的协议机制无需握手包数据包发送后接收方不需要回复 ACK 或 NAK即使数据丢失也不会重传。隐含的同步机制对于音频播放主机以一个恒定的速率向同步端点发送数据包设备的硬件时钟会锁定这个数据流速率从而实现精准的播放节奏。这是 USB 协议中唯一一种对时间同步有严格要求的传输方式。批量传输的可靠性MSC/打印机类MSC 和打印机的协议建立在批量传输的“可靠交付”保证之上。协议层的设计假设底层的数据包要么被准确无误地送达要么总线报告错误。因此它们的命令和数据结构设计可以更关注于事务本身而不必担心底层的数据丢失。中断传输的周期性HID 类HID 类使用中断传输保证主机能够在固定时间间隔内查询设备确保人机交互的低延迟。端点描述符中定义了查询间隔如全速 1ms高速 125µs 的整数倍。3. 描述符结构的差异描述符是 USB 设备的“自我介绍”不同类的描述符结构差异巨大直接指导主机如何与它们通信。HID 描述符HID 类在标准的配置描述符之后必须包含一个HID 描述符描述版本、长度等。紧接着还需要一个专门的报告描述符它是一串描述设备数据格式的“字节码”主机需要解析它才能知道鼠标的 XY 位移数据在哪个字节按键又在哪个比特位。Audio 控制描述符Audio 类有一套复杂的类特定描述符如音频控制接口描述符它包含多个单元Unit和端子Terminal的描述如混音器单元、选择器单元、音量控制单元主机解析后构建出完整的音频拓扑结构。Video 控制描述符与 Audio 类似Video 类UVC的描述符会详细描述摄像头的各种能力如支持的分辨率列表、帧率、对焦控制、曝光控制、白平衡等。其描述符体系包含视频控制接口描述符和视频流接口描述符后者通过多个备选设置Alternate Setting来支持不同的格式和带宽需求。4. 典型设备类的数据流对比设备类描述符特色主要端点命令/数据格式数据流示例HID包含 HID 描述符和报告描述符中断 IN必要可选中断 OUT报告Report结构由报告描述符定义主机定期查询中断 IN 端点设备返回报告如按键数据或 NAK主机通过控制端点发送输出报告如键盘灯MSC标准描述符接口类 0x08子类 0x06协议 0x50批量 IN 批量 OUTCBW31 字节 SCSI 命令 数据 CSW13 字节主机发送 CBW含 SCSI READ→ 设备返回数据批量 DATA 包→ 设备返回 CSWCDC-ACM联合功能描述符ACM 功能描述符控制端点 可选中断 IN 批量 IN/OUT控制类请求如 SET_LINE_CODING数据原始串行流主机通过控制端点设置波特率串口数据通过批量端点传输状态变化通过中断 IN 上报UAC音频控制接口描述符含单元/端子拓扑音频流接口备选设置同步端点音频流 控制端点音频样本数据PCM 等控制类请求如 SET_CUR主机选择备选设置 → 激活同步端点 → 主机以恒定速率发送音频样本包无握手→ 用户调节音量时通过控制端点发送 SET_CURUVC视频控制接口描述符单元/端子视频流接口备选设置同步端点视频流 控制端点视频帧数据MJPEG、H.264 等控制类请求如对焦、曝光主机选择备选设置 → 激活同步端点 → 设备以固定间隔发送视频帧数据包无握手→ 用户调节对焦时通过控制端点发送 SET_CUR总结USB 通信框架提供了统一的底层机制物理拓扑、逻辑结构、事务模型、枚举、传输类型而设备类则在此基础上通过标准化的描述符、类特定命令和数据格式实现了多样化的应用。HID、MSC、CDC、UAC、UVC 等类在描述符结构、端点选择、命令集和数据流上的差异本质上是它们在 USB 协议框架下对各自功能需求的具体化。