USB 2.0 协议专栏之 USB 2.0 概述(一)

前言:本篇博客为手把手教学的 USB 2.0 协议栈类精品博客,该专栏博客侧重针对 USB 2.0 协议进行讲解。Universal Serial Bus 作为如今最常见的通信接口,被广泛应用于:Keyboard、Mouse、Communication Device Class 和 Mass Storage Class 等电子产品中。本专栏将利用 USB 2.0 协议内容与 MCU 工作代码为各位读者进行教学。USB 协议栈是嵌入式工程研发过程中很大的坑,USB 协议栈非常冗杂且深奥,但它在工程项目中却至关重要,希望这篇博文能给读者朋友的工程项目给予些许帮助,Respect!

Universal Serial Bus 版本:

Universal Serial Bus 衍生产品:

推荐网址

USB官网:Front Page | USB-IF

USB中文网:USB中文网 (usbzh.com)

沁恒WCH官网:首页 - 南京沁恒微电子股份有限公司 (wch.cn)

一、USB 协议栈

Universal Serial Bus 协议栈是一种软件层,它实现了 Universal Serial Bus (USB) 规范,允许计算机与外部设备进行通信。USB 协议栈分为主机协议栈和设备协议栈,各自负责不同的功能。以下是一些关于 USB 协议栈的详细信息:

(1)、Universal Serial Bus 协议栈

  • 主机协议栈:运行在计算机或类似主机设备上,负责管理 USB 设备连接、枚举、配置和通信。
  • 设备协议栈:位于 USB 设备上,响应主机的请求,管理数据传输,并处理设备特定的功能。

(2)、Universal Serial Bus 协议栈的功能

  • 设备枚举:当 USB 设备连接到主机时,主机通过一系列步骤识别设备,并为其分配资源。
  • 数据传输:协议栈支持多种数据传输类型,包括控制传输、批量传输、中断传输和同步传输。
  • 电源管理:管理 USB 设备的供电状态,包括挂起和恢复操作。
  • 错误处理:检测并响应数据传输过程中的错误。

(3)、Universal Serial Bus 协议栈的关键特性

  • 模块化设计:USB 协议栈通常设计成模块化,便于在不同设备和操作系统之间移植。
  • 兼容性:支持不同版本的USB规范,如 USB 1.x、USB 2.0、USB 3.x 等。
  • 性能优化:通过直接内存访问(DMA)、零拷贝等技术优化数据传输性能。

1.1 USB 1.0

Universal Serial Bus 1.0 是通用串行总线(USB)的第一个主要版本,于 1996 年发布。这一版本标志着 USB 标准的首次重大推出,其具有以下特点:

1、数据传输速率:USB 1.0提供了两种数据传输速率,分别是低速1.5 Mbps和全速12 Mbps。

2、热插拔和即插即用:USB 1.0支持热插拔功能,允许用户在不关闭计算机的情况下直接插入或拔出USB设备。此外,它还支持即插即用,意味着当设备插入时,主机可以自动侦测并加载所需的驱动程序。

3、标准化连接器:USB 1.0 规范了 A 型和 B 型 USB 连接器的使用。

USB 1.0 作为首款商用 USB 版本并未得到广泛采用,但它的推出为后来 USB 标准的普及铺平了道路。USB 1.0 的出现简化并优化了早期 90 年代计算机系统中复杂的互连过程和数据传输的缓慢问题。在此之前,计算机制造商使用串行和并行端口以及专有插头、连接器和电缆来实现数据传输,这些方式常常需要专门的驱动程序和卡片,且数据传输速率较慢。

1.2 USB 2.0

Universal Serial Bus 2.0(通用串行总线 2.0)是 USB 标准的一个重要升级版本,它在 1998 年发布,以提高数据传输速度,满足高速外设如硬盘、数码相机等的需求。USB 2.0 的主要特点包括:

1、高速数据传输:USB 2.0 支持高达 480 Mbps 的数据传输速度,这是 USB 1.1 全速版本的 40 倍。

2、兼容性:USB 2.0 完全兼容 USB 1.1,支持全速和低速模式。

3、多种传输模式:USB 2.0 支持低速(1.5 Mbps)、全速(12 Mbps)和高速(480 Mbps)三种传输模式。

4、即插即用和热插拔:用户可以在不关闭计算机的情况下直接插入或拔出 USB 设备,并且设备可以自动识别和配置。

5、供电方式:USB 2.0 为设备提供 5V 电源,减少了对外接电源的需求。

6、多种设备支持:USB 2.0 支持多种类型的设备,如键盘、鼠标、打印机、外部硬盘等。

7、拓扑结构:USB 2.0 采用主从结构,主机负责发起通信,设备负责接收和响应。

8、数据传输机制:USB 2.0 的数据传输基于包(packet)和事务(transaction)的机制,包括令牌包、数据包和握手包。

USB 2.0 的推出极大地提高了计算机与外部设备之间的数据传输效率,对于当时的数字存储和带宽需求的增长起到了关键作用。随着技术的进步,USB 2.0 逐渐被更高速度的 USB 3.0 和 USB 3.1 等标准所取代,但 USB 2.0 仍然在许多设备和应用中得到广泛使用 。

1.3 USB 3.0

Universal Serial Bus  3.0,也被称为 SuperSpeed USB,是通用串行总线(USB)的第三个主要版本,于 2008 年 11 月 17 日正式发布。它代表了 USB 技术的一个重要进步,特别是在数据传输速度方面。以下是 USB 3.0 的主要特点和功能:

1、高速数据传输:USB 3.0 提供高达 5 Gbps(500MB/s)的理论传输速率,这是 USB 2.0 全速模式的10倍。

2、双总线架构:USB 3.0 采用了双总线架构,可以同时支持超高速和非超高速(USB 2.0速度)的数据传输。

3、电源管理:USB 3.0 提供了更好的电源管理,能够为需要更大电力支持的设备提供更好的支持。

4、全双工数据通信:USB 3.0 实现了全双工数据通信,简化了数据传输过程,提高了效率。

5、兼容性:USB 3.0 保持了与 USB 2.0 的兼容性,可以与 USB 2.0 和 USB 1.1 设备一起使用。

6、物理接口:USB 3. 0 的线缆和插座后向兼容于 USB 2.0,但 USB 3.0 的插头和插座强制要求标准着色,以帮助用户区分。

7、电源供应:USB 3.0 提供 5V 的供电电压和 900mA 的供电电流。

8、连接模型:USB 3.0 的连接模型允许根据设备支持的最高信号速度、主机和设备之间所有集线器的最高速度以及当前主机能力和配置来发现和配置 USB 设备。

USB 3.0 的出现极大地提高了计算机与外部设备之间的数据传输效率,满足了高清视频、大容量存储设备等日益增长的数据传输需求。随着技术的不断进步,USB 3.0 也得到了广泛的采用和应用。

二、USB 硬件接口

USB 接口分为标准 USB 接口、Mini USB 接口和 Micro USB 接口三种类型。

如今,绝大多数的手机接口都已经统一为 USB Type-C,USB Type-C 注定成为新时代的宠儿!

2.1 标准 USB 接口

标准 USB 接口分为 Type-A 和 Type-B 两种,样貌如下:

其中 Type-A 和 Type-B 根据支持的 USB 标准不同,又可以分为 USB 2.0 和 USB 3.0 标准 USB 接口。根据接口的颜色,我们很容易区分该接口是支持 USB 2.0 还是支持 USB 3.0 的。Type-A 型接口也是我们日常生活中最常见的 USB 接口,广泛应用于鼠标、键盘、U盘等设备上,Type-B 型则常用于打印机、特殊显示器等设备上。

2.2 Mini USB 接口

Mini USB 接口,是一种小型的 USB 接口,其指标与标准 USB 相同,但是加入了 ID 针脚(用于区分设备是主机还是外设),以支持 OTG(On The Go,该功能允许在没有主机的情况下,实现设备间的数据传送)功能。Mini USB 接口主要分为 Mini-A 和 Mini-B 两种,样貌如下:

Mini USB 接口由于相对较小的体型,常见于一些小型设备上,比如 MP3、MP4、收音机等,某些型号的手机也采用了该接口。

2.3 Micro USB 接口

Micro USB 接口,属于 Mini USB 的下一代规格接口,Micro USB 接口的插头采用了不锈钢材料,插拔寿命提高为 10000 次,相比 Mini USB 接口,在宽度几乎不变的情况下,高度减半,更为小巧。Micro USB 接口也可分为 Micro-A 和 Micro-B 两种,样貌如下:

Micro-B 类型的 USB 接口,相信大家都认识,只是不知道它的专业名称,在智能手机发展的前期,绝大多数的智能手机(iphone 除外,iphone 为 Lighting 接口,iphone15 则为 Type-C)都采用了 Micro-B 型接口作为充电和数据接口。在 USB 3.0 标准发布后,Micro-B 接口也有了新的造型,相信大家也不陌生,我们购买的支持 USB 3.0 的移动硬盘盒大部分就采用了该接口。

2.4 Type-C 接口

Type-C 接口,是近几年出现的新型 USB 接口,该接口对于使用者来说,相信最大的好处就是可以正反插拔了吧。

据统计,平均每人每年在插 USB 上浪费的时间是 30 分钟!第一次插总是插不进去的,多次插拔到怀疑人生时,最后发现还是第一次的才是对的,后面的N次尝试不过是人生中的小小曲折,有了 type-C 接口后终于可以一次搞定了。Type-C 接口的样貌如下:

最新的 USB 4.0 标准目前仅支持 Type-C 接口,同时 USB 4.0 采用了 Thunderbolt 协议(俗称雷电接口协议,是由Intel主导开发的接口协议,具有速度快,供电强,可同时兼容雷电、USB、Display Port、PCIe 等多种接口/协议的特点),因此,支持 USB 4.0 标准的 Type-C 接口也是可以兼容雷电接口的。如此看来,Type-C 接口已是大势所趋了。

三、简述 USB 传输

本篇博客将先给各位读者简述一下 USB 协议学习过程中需要了解和熟知的内容,后续博客将对这些部分进行详细讲解,各位读者朋友们不必太过着急!

3.1 USB 概述

1、USB 接口特点 

2、USB 协议标准历程

3、USB 速度与针点

3.2 USB 知识概述

1、USB 编码格式

NRZI(Non-Return-to-Zero Inverted)编码:

1、USB 1.1 和 USB 2.0 使用 NRZI 编码来传输数据。

2、在 NRZI 编码中,数据位的值不是通过电压的高低直接表示,而是通过电压是否改变来表示。逻辑 “0” 表示信号电平不变,而逻辑 “1” 表示信号电平发生改变。

2、USB 帧的概念

1、帧(Macroframe):

对于低速和全速 USB 设备,帧就是宏帧,它们没有微帧的概念,通常是 1 ms;

2、微帧(Microframe):

针对高速 USB 设备,一个帧被进一步划分为 8 个微帧,每个微帧持续 125 微秒,微帧使得高速USB能够更有效地利用带宽。

3、USB 的 4 种传输

1、控制传输(Control Transfers): 控制传输用于设备与主机之间的配置和控制消息交换。 它们通常用于设备的枚举过程,即在设备连接到主机时对其进行识别和配置。 控制传输是可靠的双向传输,具有固定的数据大小(最多 64 字节对于全速和高速设备,最多 8 字节对于低速设备)。 控制传输包括三个阶段:设置阶段(SETUP)、数据阶段(可选)和状态阶段。

2、批量传输(Bulk Transfers): 批量传输用于传输大量数据,例如文件传输。 它们不保证固定的传输速率,但是保证数据的完整性。 批量传输是可靠的双向传输,但是没有固定的传输时间,因为 USB 会根据总线上的其他活动动态分配带宽。 批量传输适用于对时间要求不是特别严格的场合。

3、中断传输(Interrupt Transfers):中断传输用于传输小量数据,并且这些数据需要定期或及时传输,如鼠标和键盘的数据。 它们提供了保证的传输速率,即在一定的最大延迟时间内完成传输。 中断传输是可靠的单向传输,通常用于周期性的数据传输。

4、等时/同步传输(Isochronous Transfers): 同步传输用于需要恒定速率传输的数据,如音频和视频流。 它们不保证数据的完整性,但是保证在特定的时间间隔内传输数据。 同步传输是单向传输,数据可能在传输过程中丢失,但是不会影响整体的数据流。

四、作者有话

4.1 博客寄语

Universal Serial Bus 协议的意义在于它提供了一种统一、标准化的接口规范,极大地简化了计算机与外部设备之间的连接和数据交换过程。自 1996 年发布以来,Universal Serial Bus 协议已成为现代计算机和消费电子产品中最为普及和重要的连接标准之一。

如今,Universal Serial Bus协议栈已经进入到了 USB 4.0 时代,但目前大部分嵌入式产品还是以 USB 2.0USB 3.0 的电子产品为主。USB 协议是非常繁杂且难学的,但 USB 协议的出现对人类电子产品的进步是极具意义的。日常生活中的 KeyboardMouseCommunication Device ClassCDC)、Mass Storage ClassMSC等电子产品都严重依赖于 USB 协议。USB 协议正是因为其学习成本和门槛的存在,所以才值得深入去探究和挖掘。故此,USB 的学习是嵌入式工程师职业生涯很值得选择的道路之一!!!

4.2 粉丝群

嵌入式交流群 1 群:958820627(可能已满);嵌入式交流群 2 群:876919359(可能已满);嵌入式交流群 3 群:957431539(推荐加入)。欢迎加群,有问题可以群内分享技术交流,秋招和春招会有诸多大厂内推码或者内推名额推荐。希望大家友好讨论技术知识!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“论企业集成架构设计及应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 论企业集成架构设计及应用企业集成架构(Enterprise Integration Arhitecture,EIA) 是企业集成平台的核心,也是解决企业信息孤岛问题的关键。企业集成架构设计包括了企业信息、业务过程、应用系统集成架构的设计。实现企业集成的技术多种多样&a…

什么是 Windows 服务

什么是 Windows 服务 Windows 服务是 Windows 操作系统的核心。它们控制着操作系统的运行,定义了图形用户界面(GUI)与系统硬件之间的通信以及其他许多功能。没有这些服务,Windows 操作系统将无法正常运行。 对普通用户而言&…

【人工智能】人工智能概述(二)人工智能的关键技术

文章目录 一. 机器学习与深度学习1. 机器学习2. 深度学习 二. 计算机视觉1. 基本概念和分类2. 未来计算机视觉面临的主要挑战 三. 自然语言处理1. 基本概念与分类2. 自然语言处理面临的四大挑战 四. 知识图谱1. 基本概念2. 应用场景 五. SLAM技术1. 基本概念2. 主要分类 六. 人…

DSP教学实验箱_数字图像处理操作_案例分享:5-13 灰度图像二值化

一、实验目的 学习灰度图像二值化的原理,掌握图像的读取方法,并实现在LCD上显示二值化前后的图像。 二、实验原理 图像二值化 图像的二值化处理就是将图像上的点的灰度置为 0 或 255,也就是将整个图像呈现出明显的黑白效果。即将 256 个亮…

AJAX(1)——axios库的使用

什么是AJAX? AJAX是异步的JavaScript和XML。简单来说,就是使用XMLHttpRequest对象与服务器通信。它可以使用JSON,XML,HTML和text文本等格式发送和接收数据。AJAX最吸引人的就是它异步的特性,也就是说它可以在不重新刷新页面的情况下与服务器通信&#…

昇思25天学习打卡营第25天|LLM应用-基于MindNLP+MusicGen生成自己的个性化音乐

打卡 目录 打卡 应用任务简介 生成音乐 预训练权重模型下载 无提示生成 文本提示生成 音频提示生成 生成配置 应用任务简介 MusicGen 来自 Meta AI 的 Jade Copet 等人提出的基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或…

NFS服务器环境搭建

1、什么是NFS ● 定义: NFS是一种在计算机系统之间共享文件和目录的协议,最初由Sun Microsystems开发,现在已经成为广泛使用的网络文件系统之一。 ● 核心功能: 通过网络(特别是TCP/IP网络)实现文件共享…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1:问题现象:问题分析: 问题2:问题现象:问题分析:解决方案: 事后现象 事前现象 问题1: 问题现象: 在本地调试时,一切顺利,但一…

Flink Doirs Connector 常见问题:Doris目前不支持流读

常见问题 Doris Source 在数据读取完成后,流为什么就结束了? 目前 Doris Source 是有界流,不支持 CDC 方式读取。 问题:对于 Flink Doris DataStream,Flink 想要在 流式读取 Doirs / 实时读 Doris,目前读…

03--KVM虚拟化

前言:这里开始涉及到云计算内容,虚拟化使云计算发展,云计算推动虚拟化进步,两者相辅相成,这一章总结一下kvm虚拟化的解决方案。 1、基础概念 1.1、云计算 以前要完成信息处理, 是需要在一个客观存在的计算机上完成的…

Node.js版本管理工具之NVM

目录 一、NVM介绍二、NVM的下载安装1、NVM下载2、卸载旧版Node.js3、安装 三、NVM配置及使用1、设置nvm镜像源2、安装Node.js3、卸载Node.js4、使用或切换Node.js版本5、设置全局安装路径和缓存路径 四、常用命令技术交流 博主介绍: 计算机科班人,全栈工…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前,先提出三个观点,正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由一些…

vscode 环境

这张截图显示的是在VS Code(Visual Studio Code)中选择Python解释器的界面。不同的Python解释器及其虚拟环境列出了可选项,用户可以根据需要选择合适的解释器来运行Python代码。以下是对截图中信息的详细解释: 解释器选择界面 当…

Chrome浏览器设置暗黑模式 - 护眼模式 - 亮度调节 - DarkReader - 地址栏和书签栏设置为黑色背景

效果图 全黑 浅灰 (DarkReader设置开启亮色亮度-25) 全白 前言 主要分两部分需要操作, 1)地址栏和书签栏 》 需要修改浏览器的外观模式 2)页面主体 》 需要安装darkreader插件进行设置 步骤 1)地址栏和…

AOP面向切面编程和log4j的使用(Java版)

什么是面向切面编程 在传统的面向对象编程中,程序的功能被模块化成各个类和方法,这些类和方法分别处理特定的功能。然而,有些功能可能涉及到多个类、多个方法,例如日志记录、事务管理、性能监控等,这些功能可能在不同…

橙单后端项目下载编译遇到的问题与解决

今天下载orange-admin项目&#xff0c;不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…

AcWing803. 区间合并

#include<climits>的作用是方便我直接使用INT_MIN,下面这个代码是二刷写的 思路是先根据 [ L , R ] i [L,R]_i [L,R]i​的L先排序&#xff0c;然后遍历vector进行区间合并。 #include<iostream> #include<vector> #include<algorithm> #include<cl…

在window将Redis注册为服务

将redis注册为系统服务&#xff0c;开启自启动 安装服务 默认注册完之后会自动启动&#xff0c;在window中的服务看一下&#xff0c;如果启动类型为自动&#xff0c;状态是自动运行则启动完成。如果是手动&#xff0c;需要右键属性调整为自动&#xff0c;在点击启动&#xff0c…

【React】详解组件通信:从基础到进阶的全面指南

文章目录 一、父组件向子组件传递数据1. 基本概念2. 示例代码3. 详解定义子组件 Son定义父组件 App导出父组件 App数据流props 的内容 二、子组件向父组件传递数据1. 基本概念2. 示例代码3. 详解引入React库和useState钩子定义子组件 Son定义父组件 App导出父组件 App数据流 三…

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…