本文是我整理的一些 USB 的学习心得,希望能对大家有所帮助。
文章目录
- 前言
- 🍒 USB 基本概述
- 🍒 USB 结构框架
- 🍉硬件框架
- 🍉 软件框架
- 🍒 USB 电气信号
- 🍉 USB 硬件线路
- 🍉 信号电平
- 🍉 断连状态
- 🍉 数据包的结构
- 🍉 NRZI 与位填充
- 总结
前言
这篇文章为大家介绍 USB模块的基本概述,结构框架 以及 相关电气信号。
USB 模块 全面解析(二)
🍒 USB 基本概述
USB(Universal Serial Bus,通用串行总线)是一种广泛使用的连接标准,用于在计算机、外围设备和其他电子设备之间传输数据和供电。它最初由一群公司(包括Intel、Microsoft、Compaq等)在1996年推出,旨在简化设备连接、提高传输速度,并取代传统的串行端口(Serial Port)和并行端口(Parallel Port)。
1. USB 接口特点:
- 即插即用:设备连接后可自动识别和配置
- 热插拔:可在不关闭设备的情况下连接或断开
- 供电能力:能够为连接的设备提供电源
- 高速传输:根据不同版本提供不同的数据传输速率
2. USB 类型:
Type-A,Type-B,Mini-USB,Micro-USB,Type-C。
3. 为什么有些项目使用 USB 而不使用串口?
虽然串口(Serial Port)仍在某些特定的应用中使用,但是在许多情况下,USB 已经取代了串口:
- 速度 :USB 的
速度远高于串口
。穿的典型速度为 115200 bps(bit per second), 而 USB 2.0 的速度为 480 Mbps, USB 3.0 的速度为 5Gbps, USB 3.1 的速度为 10Gbps, USB 4的速度可达 40G bps. - 易用性: USB 设备通常支持
即插即用
。串口需要手动配置波特率,数据位,停止位,校验位等参数。 - 支持多种设备: USB 支持通过 USB 集线器 (USB Hub)
连接多个设备
。串口只能一对一的连接。
🍒 USB 结构框架
🍉硬件框架
先介绍 USB 系统中的 2 个硬件概念:
① USB Host : USB Host 是 USB 系统中的主机端,负责 管理 和 控制 USB 总线上的所有设备。每个 USB Host 控制器中都集成了一个 Root Hub(根集线器) 。Root Hub 是 USB 拓扑结构的起点,提供了物理连接 USB 设备的端口。
② USB Device : (分为 两类 设备)
a. Hub :集线器,用来扩展 两类 接口。
b. Function : 普通的 USB 设备,比如 U盘,声卡等。
可以看到上图的 USB设备 是通过 Hub(集线器) 连接到USB总线上。这里 Hub 相当于一个扩展坞,可以连接多个 USB 设备。
例如:USB 设备插到电脑上去,对于USB 设备接触到的是 USB控制器 内嵌的 root hub.
🍉 软件框架
APP 可以通过 USB设备驱动 访问 USB设备;APP也可以使用 libusb 库
直接通过USB 控制器驱动 访问 USB 设备。 在 libusb 库中 封装了很多 API 函数,进而可以更 便捷的访问 USB 设备。
🍒 USB 电气信号
接下来 我们将从软件工程师的角度去了解我们需要知道的 USB 电气信号。
USB 2.0 协议支持 3 种速率:低速(1.5Mbps),全速 (12Mbps), 高速 (480Mbps).
USB Hub, USB 设备 也分为 低速, 全速, 高速三种类型。一个 USB 设备 可能兼容 低速和全速,也可能兼容 高速和全速。但是,不会同时兼容 低速和高速。
USB 设备的状态装切换图:
🍉 USB 硬件线路
下图是一个 USB 设备连接到 Hub 端口的电路图。
对于 Hub端口,在Data+和Data-是没有上拉电阻的,但是有 2 个15K的下拉电阻 Rpd。下面的这个 USB 设备的 Data+ 有一个1.5K的上拉电阻,表明该 USB 设备是全速/高速设备。如果USB 设备的 Data- 有一个1.5K的上拉电阻,表明该 USB 设备是低速设备。
简单来讲,对于 USB 设备只需要 4 条线:电源(5V),GND, Data+, Data-
。 只通过 Data+, Data- 这两条线传输数据。
数据线 D+ 和 D- 只能表示 4 种状态,在 USB 协议中 就是使用这两条线路 实现了 空闲(Idle),开始(start),传输数据(Data),结束(EOP) 等功能。
🍉 信号电平
这里只介绍 低速/全速信号电平, D+ ,D- 就是数据线 Data+ 和 Data-。
4 种基础状态:
- Differential "1" (差分状态 1) :通常,D+ 比 D- 高至少 200mV。
- Differential "0" (差分状态 0):通常,D- 比 D+ 高至少 200mV。
- SE0 (单端0) : D+ = D- = 低电平,常用于总线复位 。
- SE1 (单端1) : D+ = D- = 高电平 ,常用于错误检测,若检测到SE1,接收端会标记为错误。
衍生出的几种状态:
- Data J State (J 状态)
- Data K State (K 状态)
- Idle state (空闲) :对于 低/全 设备,空闲态时都处于 J 状态。
- Resest 复位: 通过 SE0 状态维持10ms来触发复位。
- SOP 是 “包” 开始的信号。 EOP 是 “包” 结束的信号。 这些后面会详细讲解。
🍉 断连状态
Hub 端口的 D+,D- 分别连接 15K的下拉电阻。对于 全/高速 设备 D+ 端连接 1.5K 的上拉电阻,而对于 低速 设备 D- 端连接 1.5K的上拉电阻,不同速率的 USB 设备连接到 Hub 端口时会导致 Hub 的 D+或 D- 电平变化。可以根据Hub 引脚的电平变化 来判断是什么设备的连接。
设备的连接:
-
全/高速设备 连接时,D+ 电平由低 -> 高:(高速设备 起初 是作为 全速设备被识别的)
-
低速设备 连接时,D- 电平由低 -> 高:
设备的断开:
-
全速 设备 断开时, D+ 电平由高 -> 低。
低速 设备 断开时, D- 电平由高 -> 低。 -
对于 高速 设备,是作为 全速 设备被发现的。
当 主机 确定连接的 USB 设备支持 全速时,就会触发 高速协商。如果 USB设备支持 高速, 并且主机也支持 高速,那就转换为 高速传输(即断开USB设备 D+的上拉电阻)。如果不支持高速,那还是保持全速传输。
高速协商:
Hub 端口发出 SE0 信号,就是复位信号。USB设备检测到 SE0 信号后,就会发出 高速握手信号(Chirp K 信号)。Hub 端检测到 K 信号后 就会发出 " Chirp K " " Chirp J " 信号去告诉USB设备 Hub 端也可以支持 高速传输。
🍉 数据包的结构
在USB设备中,数据传输的基本单位是 “ 包 ” ,下图是一个 “包” 的基本结构。
- SOP :Start Of Packet, 包的开始。即 Hub 驱动 D+, D- 两条线路从 Idle 状态变为 K 状态。
上面在信号电平处 提到了对于 全/低速设备 Idle状态 是 J 状态。而 J 状态和 K 状态的电平是相反的。所以当电平状态 处于由 J -> K 的交点时 是 SOP。
-
SYNC : 用于接收端时钟同步。SOP 中转变的 K 状态 就是 SYNC 的 第一位数据, SYNC 的格式是 3对 KJ + 2个K。
-
Packet Content : 数据包。包含 PID(包类型) + 地址/帧号/数据 + CRC(校验)。这里的 地址,帧号,数据 不会同时存在。
-
EOP : End of Packet,包的结束。D+,D- 先设置位 SE0 状态并保持 2 位时间,再设置位 J 状态 并维持 1 位时间,最后 D+, D- 变成高阻状态,这时由线路的上下拉电阻使得总线进入 Idle 状态。
大家可以先了解一下 “ 包 ” 的结构,下一篇文章将详细讲解各个部分。
🍉 NRZI 与位填充
位填充规则:
- 在发送数据时,如果
连续出现 5 个 1,发送端会自动插入一个 0
。 - 接收端在检测到连续 5 个 1 后,会检查第 6 位。如果是 0,则将其移除;如果是 1,则视为错误。
作用:防止数据中出现过长的连续 1,从而提高传输的可靠性。
例:
原数据 1111110(连续 6 个 1)
现数据 11111010
NRZI (反向不归零编码)规则:
- 对于数据 0,波形翻转;对于数据 1,波形不变。
可观察下图,当下一个数据是 0 时,电平翻转。当下一个数据是 1 时, 电平不变。
先 位填充,再 反向不归零反转。
总结
下一篇文章 继续为大家介绍 USB 的协议层数据格式 以及 USB 描述符 。