USB2.0学习1--基本概念

目录

1.USB概念

2.USB协议发展

3.USB接口类型

3.1 TYPE类型

3.2 Mini类型

3.3 Micro类型

4. USB体系结构和关键概念

4.1 USB工作原理

4.2 USB物理拓扑结构

4.3 USB逻辑拓扑结构

4.4 USB软件架构

4.5 USB数据流模型

4.5.1 USB设备端点

4.5.2 USB管道

4.6 USB即插即用功能

4.6.1 热插拔

4.6.2 枚举

4.7 USB供电方式

4.8 USB数据编解码和位填充

4.9 USB通信方向

4.10 USB设备分类

4.11 USB电平标准和总线状态


1.USB概念

USB全称是 Universal Serial Bus,即通用串行总线,是一种计算机与外围设备进行数据交互的串行通信标准。

USB协议是在1994年底由英特尔、IBM、Microsoft等公司联合提出的,现由USB协会(USB-IF)管理。

USB使用差分信号来传输数据,具有传输速度快、支持热插拔、连接灵活、独立供电、协议向下兼容等优点,目前应用十分广泛。

2.USB协议发展

USB接口自1994年推出以来,经过30年的发展,从USB1.0发展到了现在的USB4.0,传输速率也从最开始的1.5Mbps,大幅提高到了最新的40Gbps。

USB协议按照速度等级和连接方式分可分为7个版本,但是从USB3.0开始,USB-IF对之前的接口标准重命名了,导致协议名称混乱,市场中的习惯叫法和官方命名不一样,现在USB-IF正式的主版本号只有USB 2.0USB 3.2USB4这3个。

原名

提出时间

传输速率

官方主版本号

官方子版本号

USB1.0

1996

1.5Mbps

USB2.0

USB2.0 Low Speed

USB1.1

1998

12Mbps

USB2.0 Full Speed

USB2.0

2000

480Mbps

USB2.0 High Speed

USB3.0

2008

5Gbps

USB3.2

USB3.2 Gen1(SuperSpeed USB)

USB3.1

2013

10Gbps

USB3.2 Gen2x1(SuperSpeed USB 10Gbps)

USB3.2

2017

20Gbps

USB3.2 Gen2x2(SuperSpeed USB 20Gbps)

USB4.0

2019

20Gbps

USB4.0

USB4.0 Gen2x2

40Gbps

USB4.0 Gen3x2

从上表可知,USB2.0根据速度分类,可分为低速(Low Speed)、全速(Full Speed)和高速(High Speed)3个版本。 

3.USB接口类型

USB接口分为插头和插座:

  1. 插头,对应的也叫公口,主要是各种外围设备上;
  2. 插座,对应也叫做母口,一般在PC主机箱上。

USB的接口类型,根据接口形状不同,主要可以分为三大类:

  1. TYPE类型:有TYPE-A、TYPE-B、TYPE-C共3种类型;
  2. Mini类型:有Min A、Min B共2种类型;
  3. Micro类型:有Micro A、Micro B、Micro B superSpeed 共3种类型

3.1 TYPE类型

3.2 Mini类型

3.3 Micro类型

4. USB体系结构和关键概念

4.1 USB工作原理

整个USB总线系统由三个元素组成:

  1. 主机(Host)
  2. 集线器(Hub)
  3. 设备(Func)

主机(Host)是一个提供 USB接口及接口管理能力的硬件、软件及固件的复合体,常见的如PC。从功能角度来看,主机(Host)其实由Host Controller和Root Hub两部分组成,Host Controller主要负责数据处理,Root Hub则负责向上下游提供接口。一个USB系统中仅有一个USB主机。

集线器(Hub)用于连接设备和主机,用户可以将设备或附加的Hub与之相连,这些附加的Hub可以连接其他的设备以及下层 Hub。每个Hub也需要占用地址。

根集线器(Root Hub)是一个特殊的Hub,它Host Controller集成在一起,不占用地址。

下图是我们PC端常见的USB系统: 

USB是主从模式的总线,每次通信都是由主机发起,设备不能主动发起通信,只能被动的应答主机的请求。

USB总线采用轮询机制,主机会对集线器进行轮询以获取其状况,从而知道系统中的设备是连接还是断开的,是否准备好传输数据。每当新的设备连接到集线器时,主机会自动分配一个地址给新设备,该地址写入设备的寄存器中,主机通过该地址读取设备的描述符来了解设备的属性,对设备进行管理和通信。

4.2 USB物理拓扑结构

USB的物理拓扑结构是一个分层的星形拓扑结构,Hub是每个星形拓扑结构的中心,如下图所示。

USB2.0协议中,以 Host-Root Hub为起点,最多支持7层(Tier),也就是说一个USB 系统中最多可以允许 5Hub 级联

每个初始化成功的USB设备(USB设备和USB集线器)都有一个唯一的7位二进制地址,也就是说一个主机最多可以同时支持 128 个地址,由于地址 0 作为默认地址,只在设备枚举期间临时使用,不能被分配给任何一个设备,因此理论上一个USB HOST最多可以同时支持127设备

低层的集线器或设备进行数据传输时,都是共享的上一层集线器的带宽,过多的集线器串联会导致每个设备分配到的带宽变小,同时过多的集线器串联可能会导致每个从机的供电量变小,不正常运行,而 Usb Hub 也是需要占用地址的,所以实际可支持的USB设备的数量将小于 127。

4.3 USB逻辑拓扑结构

逻辑拓扑结构是站在USB HOST的角度来讲的,对USB HOST而言,所有连接到该USB总线上的设备具有同等的地位关系,HOST对这些设备采用相同的方式寻址访问。尽管物理连接上,有的设备需要USB Hub中继访问,有些USB设备是直接访问,但在逻辑上HUB是透明的,所以USB设备和HOST是直接连接的关系。

4.4 USB软件架构

USB软件系统将USB 设备、主机划分为不同的层次和模块,可以分为功能层、设备层总线接口层3个层次,如下图所示。图中的黑箭头表示实际的数据流,灰箭头表示逻辑上的数据流。

每层的功能描述如下:

  • 功能层完成功能级的描述、定义和行为;
  • 设备层则完成从功能层到总线接口层的数据转换,把一次功能层的行为转换为一次一次的基本传输;
  • USB 总线接口层则处理编码后Bit 流,完成数据传输的物理层实现和总线管理。

这些复杂的层次和模块划分主要有两个好处:

  • 一是可以规范设备和主机的行为,消除不同硬件厂商的区别,减少兼容性的问题;
  • 二是可以将 USB 软件开发的工作量细化,硬件工程师可以集中精力设计设备的总线接口层,而软件工程师可以只需要考虑优化用户界面。

4.5 USB数据流模型

下图是一个完整的USB数据传输过程。图中的黑箭头表示实际的数据流,灰箭头表示USB的数据传输机制。

从逻辑上讲 USB数据的传输是通过管道进行的,USB系统软件通过默认控制管(与端点0相对应的管道)管理设备,设备驱动程序通过其它的管道来管理设备的功能接口,实现数据交互。下图是一个简化的USB通信框图,体现了USB通信系统中数据流、端点、主机内存缓冲区和管道之间的关系。

4.5.1 USB设备端点

端点是USB设备端的概念。端点是设备内部的数据传输终点,实际上就是一个数据缓冲区(Buffer),是真实的物理单元。这些端点在设备出厂时就已定义好的,每一个端点都有唯一的地址和属性。

在USB主机看来,每个USB设备就是端点的集合,主机只能通过端点与设备进行通讯。设备支持端点的数量是有限的,除默认端点外(端点0),低速设备最多支持 2 组端点(2 个输入(IN),2 个输出(OUT)), 高速和全速设备最多支持 15 组端点。

USB端点按功能可分为控制端点和数据端点。

  • 控制端点在USB设备端就是0地址端点。每个USB设备都必须包括一个USB控制端点,并且这个端点是双向的,其主要功能是主机实现对设备的配置。
  • 数据端点用于数据的传输,一个 USB 设备可以包括若干个数据端点,不同的端点以端点编号和方向区分,不同的端点有不同的特性,可以支持不同的传输类型、访问间隔以及最大数据包大小等。数据端点只支持一个方向的数据传输。

端点的上述特性通过端点描述符来体现。

4.5.2 USB管道

USB数据的传输,宏观的看来是在主机和设备之间进行;微观的看是在主机软件Buffer和设备端点之间进行,可以认为USB 通讯就是主机软件Buffer和设备端点之间的数据交换,交换的通道即称为管道。

管道是USB在软件层面上的一个抽象概念。管道代表主机软件buffer和设备端点之间移动数据的能力,是对USB设备端点的软件抽象,它包括USB设备端点的所有信息,比如带宽使用、传输类型、传输方向和最大有效数据长度等。

USB管道有两种类型:

  1. 流管道(Stream Pipe):通过管道传输的数据没有USB定义的结构,只支持单向传输,即IN或OUT。流管道支持中断传输、同步传输和批量传输。
  2. 信息管道(Message Pipe):通过管道移动的数据具有一些USB定义的结构。允许数据双向流动并且仅支持控制传输。

管道随着主机和设备的连接的建立而建立,当移除设备时,管道也跟着被移除。任何USB设备一旦上电就存在一个信息管道,即默认控制管道(Default Control Pipe),此管道使用端点0,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置,USB 设备的即插即用特性即依赖于此。

总结起来,USB端点是物理层面上设备实际执行数据收发工作的硬件实体,而USB管道则是软件层面上抽象出的一种逻辑结构,它封装了与某个特定端点交互的所有细节,使得主机操作系统能够高效地管理和控制与USB设备的数据通信。

4.6 USB即插即用功能

所谓即插即用(Plug & Play)主要包含两个方面的内容:一是热插拔,一是枚举。热插拔由物理层实现,而枚举则主要依靠软件协议实现。

4.6.1 热插拔

热插拔即带电拔插 ,是指设备能够带电接入或者移出正在工作的系统 ,而不影响系统工作的技术。

USB采用四线电缆来传输信号,如上图所示,其中D+ 和 D- 是一对差分信号线,使用3.3V 的电平,VBus 是5V的电源

如图2.4所示,主机的D+与D-都用15K电阻接地,使得在没有设备插入的时候D+与D-上的电平始终为低。全速设备的D+通过1.5K电阻上拉到3.3V,而低速设备的D-通过1.5K电阻上拉到3.3V,这使得在设备插入主机的时候,D+或D-上会产生一个上升沿,如上图2.5所示,主机就是依靠这个上升沿判断出设备的插入和插入设备的类型(全速设备还是低速设备)。

同样的,如上图所示,在设备拔出的过程中主机也会检测到D+或D-上电平的变化(由高到低)然后识别到设备断开。这就是热插拔的原理。

高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。然后主机和设备通过一系列握手信号确认双方的身份,这里对速度的检测是双向的,只有两者都支持高速模式,后续的通信才会切换到高速模式。

4.6.2 枚举

USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程设备的状态梳理如下表:

总线枚举依靠软件协议实现,主机端在枚举过程中会为设备安装相应的驱动程序,枚举完毕后主机就能与设备进行通讯了。 下图是主机端在枚举过程中,设备状态详细的跳转流程图。

4.7 USB供电方式

USB 支持“总线供电”和“自供电”两种供电模式。

自供电就是由设备自己提供电源,设备不需要从VBus上取得电流,这类设备的功率不受USB 协议的限制。

总线供电模式,设备完全从VBus上取得电流,它们的功率受USB协议的限制,一般不能超过500mA。总线供电时,设备有两种工作状态:一是正常工作(Normal)状态,一是挂起(Suspend)状态。USB 协议规定,如果总线供电时设备在3ms内没有进行总线操作,即总线处于空闲态,设备需要自动进入挂起状态,而挂起的设备从总线上吸收的电流必须小于 500uA。总线供电设备在进入挂起状态以后,可以通过唤醒(Resume) 操作恢复到正常工作状态。

4.8 USB数据编解码和位填充

USB2.0采用NRZI(Non-Return-to-Zero Inverted Code,反向不归零编码)对发送的数据包进行编码:

  1. 输入数据0, 编码成“电平翻转”
  2. 输入数据1, 编码成“电平不变”

 

 USB2.0协议规定,主机在NRZI编码前会对原始数据流进行位填充:数据中每连续六个1后插入一个0,这给USB设备接收器逻辑每七位时间至少一次数据转换。

NZRI编码的每次翻转(每个逻辑0)都是一次同步的过程,接收方通过同步域(SYNC)来计算发送方的频率,以便用这个频率来继续采样,以保证数据和时钟锁定。

4.9 USB通信方向

USB2.0规范中,USB的数据传输仅支持半双工,因为仅有一对差分信号线,数据方向只能是主机->从机或从机->主机。USB是一条轮询总线,在USB体系中,每次传输都是由USB Host发起,数据的传输方向也是USB Host为参考对象来评定的,主机接收(读取)数据叫做IN(IN事务),主机发出(写)数据叫OUT(OUT事务)。

USB2.0的规范中,使用的是小端模式,即低字节在先,高字节在后。

4.10 USB设备分类

为了解决不同厂商的同类设备的兼容性问题 ,USB协议规定了很多标准类 ,同类的设备所有厂商必须按相同的格式传输数据,否则需单独指明驱动程序。下表是常见的USB类,USB类需要在设备描述符中指明。

4.11 USB电平标准和总线状态

下表是USB2.0低速、全速和高速模式下的电平标准。

根据功能和电平状态,USB2.0定义了多种总线状体。

下表7-2显示了USB2.0低速和全速总线信号1、信号0、SE0状态、SE1状态、J状态、K状态、空闲IDLE状态下D+、D-线分别对应的电平信号范围。

下表7-3显示了USB2.0高速总线信号1、信号0、J状态、K状态、Chirp J状态、Chirp K状态、空闲IDLE状态下D+、D-线分别对应的电平信号范围。

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

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

相关文章

网工内推 | 国企信息工程师,信息系统项目管理师优先,最高14薪

01 上海浦东软件园股份有限公司 🔷招聘岗位:信息化管理工程师 🔷岗位职责: 1. 根据公司战略、数字化总体架构规划和IT 技术趋势,制定信息化系统的规划与设计,并制定实施计划。 2. 统筹公司信息化系统管理…

Redis-实战篇-缓存击穿问题及解决方案

文章目录 1、缓存击穿2、常见的解决方案有两种:2.1、互斥锁2.2、逻辑过期2.3、两种方案对比 3、利用互斥锁解决缓存击穿问题3.1、ShopServiceImpl.java3.2、使用 jmeter.bat 测试高并发 4、利用逻辑过期解决缓存击穿问题 1、缓存击穿 缓存击穿问题 也叫 热点key问题…

<电力行业> - 《第4课:什么是电力?什么是发输变配用5环节?》

1 什么是电力? 我们对于平日生活中离不开的电很熟悉,但是电力是什么? 其实,电力就是电能作为动力的能源。电力就是我们说的电,不过更多了系统化。 19世纪70年代,电力的发明和应用掀起了第二次工业化高潮。…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域,传统的 HTTP 协议存在以下一些问题: 频繁的请求和响应:每次通信都需要建立和关闭连接,带来额外的开销。高延迟:每次通信都需要经过多个网络层的传输,延…

Stm32的DMA的学习

一,介绍 二,DMA框图 三,DMA通道 四,相关HAL库函数 五,配置DMA 六,Stm32CubeMX配置 【13.1】减少CPU传输负载 DMA直接存储器访问—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili

【鸿蒙 HarmonyOS】尺寸设置:size/layoutWeight/constraintSize

一、背景 常见尺寸:width(宽度)、height(高度)、padding(内边距)、margin(外边距) 主要整理下size(设置高宽尺寸)、layoutWeight(对…

Redis数据库(五):Redis数据库基本特性

这一节我们来介绍如何使用C语言的库来操作Redis数据库。 目录 一、hiredis的安装 1.1 下载源码 1.2 解压 1.3 进入hiredis路径下 1.4 利用makefile文件进行编译 二、接口介绍 三、C程序操作Redis代码 四、redis.conf配置文件详解 五、Redis的持久化 5.1 RDB &#x…

STM32CubeMX与RT-Thread Studio协助使用(实现点亮LED)

1创建自己的项目 1-1选择板子 1-2生成的项目 运行一下看是否创建成功 零警告零错误 2配置STM32Cude 2-1找打如图图标点击(CubeMX的图标) 2-2输入自己安装的路径选中exe文件 点击Browse 找到如图选中,在打开(STM32CubeMX的安装路…

echarts 5.5.0版本下的层叠柱形图,每个值都从0开始,会有覆盖情况

需求: 1、每个公司,需要两个柱子去展示(stack: 1是第一个柱子,stack:2,是第二个柱子); 2、必须每个数据都是从0开始,不在上一个值上累加; 3、鼠标滑上去的时候,最大值…

什么是API?如何进行API对接?

目录 一、API和API对接的定义 二、API接口的应用场景 三、为什么需要API对接 四、如何进行API对接 GET请求 POST请求 五、API对接的注意事项 在这个数字化时代,API像一把万能钥匙,让数据流动起来,创造出无限可能。本文旨在介绍API及其…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

科普:什么是 BC-404 ?全方位解读最新通缩型 NFT 标准

区块链技术飞速发展的今天,创新从未停歇。继 ERC-404 标准问世后,一个名为 BC-404 的新标准应运而生,为 NFT 市场带来了全新的可能性。BC-404(Bonding Curve 404)—基于对 ERC-404 的改进,加密货币中第一个…

三、知识库搭建

知识库搭建 1 介绍词向量向量数据库 2 使用embedding API3 数据处理数据加载数据清洗文档分割 4 搭建并使用向量数据库4.1 自定义embedding封装4.2 chroma数据库4.3 向量检索 详细代码参考:https://github.com/lin902/llm-application 1 介绍 词向量 词向量就是把…

RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace

🚀返回专栏总目录 文章目录 一. 指定 ftrace 跟踪器二、设置要 trace 的函数三、ftrace 的开关四、查看 trace五、trace-cmd 的使用六、trace-cmd 的常用选项6.1、查看可以跟踪的事件6.2、跟踪特定进程的函数调用6.3、函数过滤6.4、限制跟踪深度6.5、追踪特定事件沉淀、分享、…

CesiumJS【Basic】- #016 多边形面渲染“花了”的问题

文章目录 多边形面渲染“花了”的问题1 目标2 问题代码3 修正后代码4 总结多边形面渲染“花了”的问题 1 目标 解决多边形的面“花了”的问题 2 问题代码 使用Cesium.PerInstanceColorAppearance渲染后出现色斑 import * as Cesium from "cesium";const viewer …

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展,网络承载的业务越来越多,越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处,内外网之…

Orangepi Zero2使用外设驱动库wiringOP配合时间函数驱动HC-SR04超声波测距模块

目录 一、HC-SR04超声波模块原理和硬件接线 1.1 超声波测距原理: 1.2 超声波时序图: 1.3 HC-SR04超声波模块硬件接线: 二、时间函数 2.1 时间函数gettimeofday()原型和头文件: 2.2 使用gettimeofday()函数获取当前时间的秒数…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来,就手动修改下.git/config文件,将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…

打印一张A4纸多少钱?打印a4多少钱一张

在数字化日益发展的今天,打印服务依然是办公、学习和生活中不可或缺的一部分。对于广大用户来说,了解A4纸打印的价格成为选择打印服务的重要参考因素。那么,A4纸打印到底多少钱一张呢? 在琢贝云打印平台,打印价格非常实…

Arcengine 添加字段时,显示General function failuer

一、现象 Arcengine开发的时候,在addfield(添加字段)操作时,显示General function failuer。如下图所示: 二、问题原因 General function failuer是常规故障,问题原因是文件占用,只要把文件在…