USB 模块 全面解析(一)
本文是我整理的一些 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 描述符 。
相关文章:
USB 模块 全面解析(一)
本文是我整理的一些 USB 的学习心得,希望能对大家有所帮助。 文章目录 前言🍒 USB 基本概述🍒 USB 结构框架🍉硬件框架🍉 软件框架 🍒 USB 电气信号🍉 USB 硬件线路🍉 信号电平&…...
xr-frame 3D Marker识别,扬州古牌坊 3D识别技术稳定调研
目录 识别物体规范 3D Marker 识别目标文件 map 生成 生成任务状态解析 服务耗时: 对传入的视频有如下要求: 对传入的视频建议: 识别物体规范 为提高Marker质量,保证算法识别效果,可参考Marker规范文档 Marker规…...
拆一拆吉利普及高阶智驾的盲盒
吉利银河后续所有的全新和改款车型都会搭载千里浩瀚不同级别的智驾系统; 既然银河都标配了,定位更高的领克大概率也会全系标配; 加上极氪从去年下半年就是全系标配。 这样一来,就是吉利版的「全民智驾」。 一、 「千里浩瀚」&a…...
2024四川大学计算机考研复试上机真题
2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测:https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...
解锁高效编程:深度剖析C++11核心语法与标准库实战精要
目录 一、引言 二、核心语法革新 (一)类型推导系统 1. 统一初始化语法 2. initializer_list 机制 (三)函数增强 1. Lambda表达式 2. 可变参数模版 3. 数对象包装和参数绑定 (四)内存管理 1. 右值引用与…...
基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)
摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响,导致在真实临床环境中诊断不可靠。领域泛化(Domain Generalization, DG)方法旨在通过多领域训练提升模型在未知领域的性能,但…...
深度学习-大白话解释循环神经网络RNN
目录 一、RNN的思想 二、RNN的基本结构 网络架构 关键点 三、RNN的前向传播 四、RNN的挑战:梯度爆炸和梯度消失 问题分析 示例推导 五、LSTM:RNN的改进 核心组件 网络架构 3. LSTM 的工作流程 4. 数学公式总结 5. LSTM 的优缺点 优点 缺点 6. LSTM 的…...
Spring统一格式返回
目录 一:统一结果返回 1:统一结果返回写法 2:String类型报错问题 解决方法 二:统一异常返回 统一异常返回写法 三:总结 同志们,今天咱来讲一讲统一格式返回啊,也是好久没有讲过统一格式返…...
IPOIB 驱动中的发送完成处理机制
1. ipoib_napi_add_rss 函数 ipoib_napi_add_rss 函数的主要作用是为 InfiniBand 设备的每个接收队列和发送队列添加 NAPI 结构,并注册相应的轮询函数。NAPI(New API)是一种网络接口卡(NIC)的轮询机制,用于高效处理网络数据包,避免频繁的中断处理开销。 static void i…...
BambuStudio学习笔记:format格式化输出
# Slic3r::format 字符串格式化工具说明## 概述本头文件提供了基于 boost::format 的 C 字符串格式化工具封装,旨在简化多参数格式化操作,支持类似 C20 std::format 的调用语法。## 核心设计目标- **简化调用语法**:替代 boost::format 的链式…...
软件测试基础:功能测试知识总结
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中…...
wheel_legged_genesis 开源项目复现与问题记录
Reinforcement learning of wheel-legged robots based on Genesis System Requirements Ubuntu 20.04/22.04/24.04 python > 3.10 开始配置环境! 点击releases后进入,下载对应最新版本的代码: 将下载后的代码包解压到你的自定义路径下&…...
【金融量化】Ptrade中如何量化策略的交易持久化?
交易持久化是指在实际交易中交易相关的数据(如订单信息、持仓状态、策略参数等)保存到本地或远程存储中,以便在程序重启、系统崩溃或网络中断后能够恢复交易状态,确保策略的连续性和稳定性。以下是如何在策略中实现交易持久化的方…...
qt实践教学(编写一个代码生成工具)持续更新至完成———
前言: 我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具,可以把我平时用到的代码整合一下全部放入这个软件中,做一个我自己专门的代码生成工具,我初步的想法是在下拉选框中拉取需要配置的功能,然后就弹出对…...
设置 CursorRules 规则
为什么要设置CursorRules? 设置 CursorRules 可以帮助优化代码生成和开发流程,提升工作效率。具体的好处包括: 1、自动化代码生成 :通过定义规则,Cursor 可以根据你的开发需求自动生成符合规定的代码模板,…...
AI 芯片全解析:定义、市场趋势与主流芯片对比
1. 引言:什么是 AI 芯片? 随着人工智能(AI)的快速发展,AI 计算的需求不断增长,从云计算到边缘计算,AI 芯片成为推动智能化时代的核心动力。那么,什么样的芯片才算 AI 芯片ÿ…...
Axure高保真Element框架元件库
点击下载《Axure高保真Element框架元件库》 原型效果:https://axhub.im/ax9/9da2109b9c68749a/#g1 摘要 本文详细阐述了在 Axure 环境下打造的一套高度还原 Element 框架的组件元件集。通过对 Element 框架组件的深入剖析,结合 Axure 的强大功能&#…...
21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>
PS: 开闭原则 定义和背景 开闭原则(Open-Closed Principle, OCP),也称为开放封闭原则,是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放,对修改封闭。这意味着一个软件实体…...
【2025年后端开发终极指南:云原生、AI融合与性能优化实战】
一、2025年后端开发的五大核心趋势 1. 云原生架构的全面普及 云原生(Cloud Native)已经成为企业级应用的核心底座。通过容器化技术(DockerKubernetes)和微服务架构,开发者能够实现应用的快速部署、弹性伸缩和故障自愈…...
Docker新手入门(持续更新中)
一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…...
微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...
【Spring Boot 应用开发】-05 命令行参数
Spring Boot 常用命令行参数 Spring Boot 支持多种命令行参数,这些参数可以在启动应用时通过命令行直接传递。以下是一些常用的命令行参数及其详细说明: 1. 基本配置参数 --server.port端口号 指定应用程序运行的HTTP端口,默认为8080。 jav…...
选择研究方向(28条)DeepSeek提示词
选择研究方向(28条) 在学术研究的旅程中,确定研究方向和主题是至关重要的第一步。一个明确且具有创新性的研究主题不仅能够为研究提供清晰的方向,还能激发研究者的热情和动力。以下是一些优化后的提示词,目的在于帮助…...
Linux中读写锁详细介绍
读写锁介绍 Linux 中的读写锁(Read-Write Lock)是一种用于线程同步的机制,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。这种机制在读操作远多于写操作的场景下,可以显著提高并发性能。读写锁主要有…...
flink分布式事务 - 两阶段提交
分布式事务与两阶段提交协议详解 分布式事务是分布式系统中保证数据一致性和可靠性的核心技术之一。在大数据处理、微服务架构以及实时流处理等领域,分布式事务的应用场景越来越广泛。两阶段提交协议(Two-Phase Commit, 2PC)作为一种经典的分布式事务管理协议,在保证强一致…...
《DataWorks:为人工智能算法筑牢高质量数据根基》
在当今数字化时代,人工智能(AI)技术的迅猛发展深刻地改变着各个行业的面貌。从智能推荐系统到医疗影像诊断,从自动驾驶到自然语言处理,AI正以前所未有的速度渗透到我们生活和工作的方方面面。而在这一系列AI应用的背后…...
机器学习(五)
一,多类(Multiclass) 多类是指输出不止有两个输出标签,想要对多个种类进行分类。 Softmax回归算法: Softmax回归算法是Logistic回归在多类问题上的推广,和线性回归一样,将输入的特征与权重进行…...
DeepSeek搭配Excel,制作自定义按钮,实现办公自动化!
今天跟大家分享下我们如何将DeepSeek生成的VBA代码,做成按钮,将其永久保存在我们的Excel表格中,下次遇到类似的问题,直接在Excel中点击按钮,就能10秒搞定,操作也非常的简单. 一、代码准备 代码可以直接询问…...
利用Git和wget批量下载网页数据
一、Git的下载(参考文章) 二. wget下载(网上很多链接) 三、git和wget结合使用 1.先建立一个文本,将代码写入文本(代码如下),将txt后缀改为sh(download_ssebop.sh…...
人工智能之数学基础:线性代数中的行列式的介绍
本文重点 行列式是一种重要的数学工具,更是连接众多数学概念和实际应用的桥梁。本文将介绍矩阵的行列式,你可以把它看成对方阵的一种运算,将方阵映射成一个标量。 行列式的定义 行列式是一个由数值组成的方阵所确定的一个标量值。对于一个n*n的矩阵A=(aij),其行列式记为d…...
