USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式
连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口,可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识,包括。
文章目录
- 1 接口类型和标准规范
- 2 引脚分布
- 3 USB体系架构和工作原理
- 4 USB时序
- 5 USB数据格式
1 接口类型和标准规范
USB接口有不同的形状和设计,最初只有两种USB类型:USB-A和USB-B。现在,又衍生出了更多地接口类型,包括USB-C、USB Micro、USB Mini和Lightning Cable,如下图所示:

(1)USB-A:最常见的USB类型,主要应用于有线鼠标、键盘和U盘。它的线缆端较宽,由于该连接器没有旋转对称性,两端不同,对应不同类型的端口。
(2)USB-B:中间为小矩形孔形状。它通常不用于现代计算机,但在打印机、路由器和扫描仪上常见。
(3)USB-C:有一个更扁平、更小的公口,中间的孔是扁平的椭圆形,适合小型连接器针脚插入。它是取代USB-A和USB-B的新标准,更适用于较薄的设备,如MacBook和手机。
(4)USB Micro:USB-A和USB-B都有Micro大小的版本。Micro USB是如今许多智能手机中非常常见的USB连接器。然而,随着USB Type C的出现,Micro USB正在慢慢被淘汰,不再用于新款高端智能手机。但Micro USB仍然广泛应用于全球的廉价智能手机和其他电子设备中。
(5)USB Mini:同样有两种分为USB Mini A和USB Mini B。它们是Type A和Type B USB连接器的缩小版,一般用于便携式相机、游戏控制器和一些老款移动电话中。
(6)Lightning Cable:主要用于iPhone和iPad,采用完全不同类型的USB连接器,即Lightning cable。这种线缆的一端有一个薄的矩形连接器,另一端是Type C连接器。Lightning cables没有正反面的区分,不用担心插入的正反。
USB支持三种速度:低速(1.5Mbps)、全速(12Mbps)和高速(480Mbps)。
(1)USB 2.0标准:高速USB,最大数据传输速度为480Mbps,支持所有类型的连接器,最大电缆长度为5米,最大充电功率为15瓦。
(2)USB 3.2标准(第一代):超高速USB,最大数据传输速度为5Gbps,支持USB-A 3.0、USB-B 3.0和USB-C等不同连接器,最大电缆长度为3米,最大充电功率为15瓦。
(3)USB 3.2标准(第二代):同样是超高速USB,最大数据传输速度为10Gbps,最大电缆长度为1米,支持不同类型的连接器,最大充电功率为100瓦。
(4)USB 3.2标准(第2×2代):超高速USB,最大数据传输速度为20Gbps,最大电缆长度为1米,支持USB连接器,最大充电功率为100瓦。
(5)Thunderbolt 3标准:最大数据传输速度高达40Gbps,最大电缆长度为2米(主动电缆,即包括放大和补偿信号的芯片转换的电缆)和0.8米(被动电缆),支持USB连接器,最大充电功率为100瓦。
(6)USB 4标准:也称为Thunderbolt 4,最大数据传输速度高达40 Gbps,最大电缆长度为2米(主动电缆)和0.8米(被动电缆),支持USB连接器,最大充电功率为100瓦。
- USB 4的标准和Thunderbolt 3几乎一样,因为Thunderbolt 3由Intel开发,通常受特定的厂商支持,而USB4则是一个开房标准,不受制造商限制,任何厂商都可以实现USB 4,而不需要特定的许可
2 引脚分布
USB2.0共4条线,其中数据通过D+和D-连接器传输,而Vbus和GND为USB设备供电。下图为USB-A和USB-B的引脚图:

将USB-A的线剪开,如下图所示:

USB3.0的引脚如下:

可以看到USB3.0多了5个引脚:两根高速发送引脚、两根高速接收引脚和参考地。之所以预留原来的4个引脚是为了兼容USB2.0。
3 USB体系架构和工作原理
下图是USB协议结构的概述,一旦各种I/O设备通过USB连接到计算机,它们就会构成一个树状结构。在这种USB结构中,每个I/O设备都会进行点对点连接,通过串行传输格式来传输数据。
在这种架构中,I/O设备通过USB连接到计算机,USB也被称为集线器。架构中的集线器是I/O设备与计算机之间的连接点。该架构中的根集线器用于将整个结构连接到主机计算机。

USB协议的工作基于轮询机制,CPU会持续检查输入/输出设备是否准备好传输数据。因此,I/O设备无需向处理器更新它们的状况。每当新的设备连接到集线器时,它会被分配一个地址,第一个设备的地址为0。正常情况下,主机会对集线器进行轮询以获取其状况,从而使主机知道系统中的I/O设备是连接还是断开的。
一旦主机响应新设备,它通过读取设备的USB接口的特定内存中的可用数据来了解设备的容量。然后,主机使用适当的驱动程序与设备通信。接着,主机分配一个地址给新设备,该地址写入设备寄存器。通过这个功能,USB提供了即插即用的功能,允许主机自动识别新的可用I/O设备。
USB协议的另一个特点是“热插拔”,这意味着可以在不关闭或重启的情况下连接或断开I/O设备,因此当I/O设备连接或断开时,系统可以持续运行。
USB协议还可以支持等时传输,即数据在预定的时间间隔内传输。相比同步和异步数据传输,等时数据传输的传输速度非常快。为了保持等时的传输,根集线器通过USB发送一系列位,这些位指定了等时数据的开始,实际的数据可以在这一系列位之后传输。
4 USB时序
对于USB来说,它的数据传输仅依靠一对差分的D+和D-,而没有时钟线,那么它是怎么实现时间的同步的呢?USB采用反向不归零编码(NRZI)来传输数据:当下一个电平为0时,电平反转;当下一个电平为1时,电平不变。

每个USB数据包,最开始都有一个同步域(SYNC),接受者通过此包来计算出发送者的USB数据的频率。同时由于遇到逻辑0时比特位会翻转,接收者也一直在根据这个特性在调整USB的同步频率。但还是有一个问题,就是计算出来的频率不准确或自身的采样时钟无法完全与发送者的完全一致,所以如果连续出现多个逻辑1的话,很有可能造成数据传输的不一致。所以如果数据出现6个逻辑1,则会在这后面填充一个逻辑0,如上图所示中的Suffered Bit。接收端采样数据时只需要把这个填充位去掉即可。
5 USB数据格式
主设备之间进行有效通信非常重要。一旦外设通过USB连接到计算机,计算机会识别它是什么类型的设备,并自动加载允许设备正常工作的驱动程序。在这两个设备之间传输的少量数据称为数据包,每个数据包传输一个数字信息单元。USB协议中常见的4种数据包如下图所示:

(1)SYNC(Syncronize,同步字段):USB协议中,每个USB数据包都以SYNC字段开始,通常用于确保发送者和接收者保持时钟同步。在低速或全速USB系统中,SYNC字段为10101011。在高速USB系统中,SYNC字段为10101010 10101010 10101010 10101011。最后2位固定为11,用于指示PID字段的起始位置。
(2)PID字段(Packet Identifier,包标识符字段):用于识别正在传输的数据包类型以及数据包数据格式。该字段长8位,其中前4位识别数据包类型,后4位是前4位的按位补码。

(3)Address(地址字段):指示数据包主要用于哪个设备。这个7位长的字段允许最多支持127个设备。地址为零的设备是无效的,因为尚未分配地址的任何设备都应该对零地址的传输数据包做出响应。
(4)Endpoint(端点字段):端点字段长4位,允许更灵活地进行寻址。通常,这些字段用于指示数据是输入还是输出。端点’0’是一个特殊情况,被称为控制端点,每个设备都包括一个端点0。
(4)Data(数据字段):数据字段的长度不是固定的,可以从0到8192bit,但必须以字节为单位。
(5)CRC字段(Cyclic Redundancy Checks):CRC是在数据包有效负载中的数据上执行的,所有令牌数据包(用来启动一次USB传输)和帧起始数据包使用5位CRC,而数据数据包使用16位CRC。
(6)EOP字段(End of the Packet,数据包结束字段):每个数据包都以EOP字段结束。
相关文章:
USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式
连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口,可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识,包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …...
less和scss语法详解
比较好的博客文章:Less使用语法(详细):https://blog.csdn.net/weixin_44646763/article/details/114193426 SCSS基本语法:https://www.jianshu.com/p/4efaac23cdb6 总结:我理解的点: 1、符号声…...
【计算机网络笔记】TCP/IP参考模型基本概念,包括五层参考模型
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
RSA加密与签名的区别
文章目录 一、签名验签原理二 RSAUtils 工具类三、通过x509Certificate来获取CA证书的基本信息四、 通过公钥获取公钥长度 一、签名验签原理 签名的本质其实就是加密,但是由于签名无需还原成明文,因此可以在加密前进行哈希处理。所以签名其实就是哈希加…...
arcgis js api 4.x通过TileLayer类加载arcgis server10.2发布的切片服务跨域问题的解决办法
1.错误复现 2.解决办法 2.1去https://github.com/Esri/resource-proxy 网站下载代理配置文件,我下载的是最新的1.1.2版本,这里根据后台服务器配置情况不同有三种配置文件,此次我用到的是DotNet和Java. 2.2 DotNet配置 2.2.1 对proxy文件增加…...
如何让chatGPT给出高质量的回答?
如何让chatGPT给出高质量的回答? ChatGPT从入门到进阶教程合集_哔哩哔哩_bilibili 公式 【指令词】【背景】【输入】【输出要求】 1. 指令词 ——精准任务or命令 如:简述、解释、翻译、总结、润色 2. 背景 ——补充信息 如:简述一篇讲解…...
Java后端开发(八)-- idea(2022版)将commit(未push)的 本地仓库 的 单条commit记录 进行撤销
目录 1.修改Test01类后,提交到本地仓库 。 2.commit成功后,在Git =》Log中会显示,commit记录...
Mysql架构解析,InnoDB架构概述。
MySQL架构解析 Mysql整体架构 MySQL整体架构如下图所示: MySQL逻辑系统架构分为4层: 应用层MySQL服务层存储引擎层系统文件层 下面将对各层的功能和组件进行介绍,并探讨一条语句的执行过程。 应用层 应用层是MySQL体系架构的最上层,它…...
jmeter如何测试websocket接口?
jmeter做接口测试,很多人都是做http协议的接口,就有很多人问websocket的接口怎么测试啊? 首先,我们要明白,websocket接口是什么接口。 然后,我们怎么用jmeter测试? jmeter要测试websocket接口…...
15 Transformer 框架概述
整体框架 机器翻译流程(Transformer) 通过机器翻译来做解释 给一个输入,给出一个输出(输出是输入的翻译的结果) “我是一个学生” --》(通过 Transformer) I am a student 流程 1 编码器和解…...
[架构之路-241]:目标系统 - 纵向分层 - 企业信息化与企业信息系统(多台企业应用单机组成的企业信息网络)
目录 前言: 一、什么是信息系统:计算机软件硬件系统 1.1 什么是信息 1.2 什么是信息系统 1.3 什么是信息技术 1.4 什么是信息化与信息化转型 1.5 什么是数字化与数字化转型(信息化的前提) 1.6 数字化与信息化的比较 1.7 …...
flink中使用异步函数的几个注意事项
背景 在flink系统中,我们为了补充某个流事件成一个完整的记录,经常需要调用外部接口获取一些配置数据,流事件结合这些配置数据就可以组合成一条完整的记录,然而如果同步调用外部系统接口来实现,那么会有很大的性能瓶颈…...
QML之Repeater 控件使用
Repeater 控件是 重复作用 根据 model中的index 数量进行重复 废话不说 直接看如何用 当model 为数字时 Rectangle{height: 1200width: 500visible: trueanchors.fill: parentColumn{spacing: 20Repeater{model: 10delegate: Rectangle{width: 60height: 20color: index%2 …...
哈希树讲解
哈希树(HashTree)是哈希(Hash)算法的一种延续。传统数据结构中对如何避免哈希冲突都有一定的描述和解释,但是这些描述和解释都是泛泛而谈,并没有提出比较好的解决方案。这里所提到的哈希树(HashTree)算法就是要提供一种在理论上和实际应用中均能有效地处…...
vue 项目启动后一直不断的刷新停不下来
新建的vue 项目,配置了代理后项目一直刷新,停不下来,各种查找最后发现是vue.config.js 中的热更新配置项目开启的原因 const {defineConfig } require(vue/cli-service) const AutoImport require(unplugin-auto-import/webpack) const Co…...
makesense在线yolov5标注
文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…...
python 之 矩阵相关操作
文章目录 1. **创建矩阵**:2. **矩阵加法**:3. **矩阵乘法**:4. **矩阵转置**:5. **元素级操作**:6. **汇总统计**:7. **逻辑操作**: 理解你的需求,我将为每个功能写一个单独的代码块…...
敢问路在何方
从2022年进入软件行业到现在,二十二年眨眼之间过去了,依然奋斗在编码第一线,挣扎在第一线,借此程序员佳节之际回顾一下这许多年的历程。 由于本人混得实在不好,工作过的地方都用某单位某公司来代替实际的,到…...
复习mysql中的事务
一个事务的开始和结尾必须是 start transaction | commit; rollback 事务特性 1.原子性:多个操作打包成一个整体,要么全部执行,要么一个都不执行。 不过这里的“一个都不执行”并不是真正的全不执行,只是看起来与没执行一样。…...
力扣刷题 day52:10-22
1.数组拆分 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 方法一:排序 #方法一:排序 def arrayPai…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
