USB基础

news2024/9/24 7:17:46

一 USB 芯片组成

同以太网类似,USB芯片也分为Controller部分(主机控制器/设备控制器)和PHY部分(收发器) 两大部分组成。

Controller部分
主要实现USB的协议和控制,内部逻辑主要有 MAC层,CSR层,FIFO层等。

MAC层实现安装USB协议进行数据包打包和解包,并把数据按照 UTMI/ULPI总线格式发送给PHY。
FIFO控制层主要是和DDR进行数据交互,控制USB从DDR搬运数据的通道

PHY 部分
USB PHY负责最底层的信号转换,作用类似于网口的PHY。主要实现 并转串的功能,把控制器通过 UTMI或ULPI总线传递过来的并行数据 转换为串行数据,再通过差分数据线输出到USB接口。或反之

总之USB芯片内部实现的功能就是接受软件的控制,进而从内存搬运数据并按照USB协议进行数据打包,并串转换后输出到芯片外部。或者从芯片外部接收差分数据信号,串并转换后进行数据打包并写到内存中。

以Controller 和 PHY 都被封装到SOC为例,如图

在这里插入图片描述

VBUS :电压线,主机利用VBUS给USB设备提供工作电压。
D+ : 正向传送数据 数据线
D-: 反向传送数据 数据线

一般来说如果芯片的usb phy封装在芯片内,基本采用UTMI+的接口。不封装到芯片内的一般采用ULPI接口,这样可以降低pin的数量。

二 嵌入式设备上的USB系统

如图是嵌入式设备上的USB系统,其中SOC内嵌了USB控制器,USB 收发器(PHY)没有封装到芯片内。该控制器支持4条总线和3中操作模式。
在这里插入图片描述

总线1工作在主机模式下,通过USB收发器(PHY) 和 A型接口( USB Type A)连接。USB Type A常用于个人电脑PC及消费类电子产品中,用于连接键盘,鼠标等外设

总线2 也工作在主机模式下,只不过它的USB收发器(PHY)连接的是内嵌USB设备,如打印机等

总线3工作在设备模式下,通过USB收发器(PHY) 和 B型接口(USB Type B)连接。B型接口通过一条 B-A线和主机连接。在这种模式下,该嵌入式设备可以当做USB从设备使用。同PC机相比,嵌入式设备(如MP3,手机等)作为USB的设备端,所以 大部分嵌入式设备 除了包含主机控制器之外,还包含USB设备控制器。

总线4接的是 OTG(On-The-Go)控制器,既可以做主机,也可以作从机,与前三种总线不同,总线4的USB收发器是智能的,能够通过I2C 和处理器交换控制信息,USB OTG 收发器(PHY)的另一端和Mini-AB OTG接口相连。如果两个设备都支持OTG,他们不需要作为主机的计算机介入就可以直接通信。

关于主机控制器

USB 主机控制器分为以下几种:
UHCI(Universal Host Controller Interface 通用主机控制器接口) 该标准是英特尔提出。

OHCI(Open Host Controller Interface 开放主机控制器接口)该接口是康柏和微软等公司提出,兼容OHCI的控制器硬件智能程度比UHCI高。

EHCI(Enhanced Host Controller Interface 增强型主机控制器接口) 该主机控制器支持高速的USB2.0S设备。为支持低速的USB设备,该控制器通常同时包含UHCI 和 OHCI控制器。

USB OTG控制器,这类控制器在嵌入式微控制器领域越来越受欢迎,由于采用了OTG控制器,每个通信终端 即能作主机也能作从机,设备可以根据功能需要在主机模式和设备模式之间任意切换。

主机控制器内嵌了一个叫 根集线器 的硬件。很重要!!!!

三 关于根集线器

USB集线器又称为USB Hub,用于拓展计算机USB接口。计算机主板上对外往往提供多个USB接口,这些接口往往都是通过主板上的USB集线器芯片来拓展出来的。在USB总线通信协议中,通过设备描述符和接口描述符来判断该USB是否为USB集线器。

USB 根集线器(USB Root Hub)指的是直接连接到USB主控制器上的USB Hub。USB根集线器供电与USB主控器供电来源相同。USB总线中只有USB主机和USB集线器可以向外部供电。

USB总线拓扑
一个USB分层星型结构有且仅有一个USB主机控制器,并且USB主机控制器一般都伴随有一个Root Hub(根集线器),都在在最顶层,主机通过Root Hub提供若干个连接点,由于集线器和电缆中的信号传输有定时限制,该星形拓扑结构的最大层数为7层(包括根层)。而且要注意的是,在这7层结构中,主机和任何设备间的通信通路最多可支持5个非根集线器。因此,如果hub被连接在第7层就不能运转,第7层只能允许连接功能设备。一个USB主控制其最多可连接127个外设(包括根集线器)。如下最大的7层星型结构,代表的只是一条USB 总线,一条总线仅有一个USB主机控制器和一个Root Hub。

在这里插入图片描述

所有的USB设备都必须经过集线器上的USB端口连接到总线,即使是计算机内部的USB 设备也是经由Hub的端口连接到总线的。

关于集线器的工作:
当USB设备插入到USB集线器后,一切的工作都是由USB集线器开始的。当USB设备插入到USB集线器的一个端口后,该端口会检测到有设备插入,检测依据是USB设备在D+ 或 D- 数据线的上拉电阻,当设备的上拉电阻在D+时,为全速设备。当设备的上拉电阻在D-时,为低速设备。也就是说 USB集线器在检测到有设备插入的同时还要判断该设备是全速设备还是低速设备,检测后 将相应的寄存器置位。此时USB集线器驱动就会将检测到的端口状态上报给USB子系统。

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

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

相关文章

一文看懂 Redis 主从同步的原理

Redis 主从同步的基本原理有三种,分别是:全量复制,基于长链接的命令传播,增量复制。 接下来分别说说这三种主从间同步的原理。 全量复制 当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof&#x…

新人转行IC该怎么选择岗位?(内附各岗位学习视频)

最近看到不少同学在后台提问:新人转行IC该怎么选择岗位?其实转行本身就是一件大事,转行之前一定要做好调研,选择适合自己的岗位,这样才能规划好职业生涯。 IC行业这几个岗位是最常见的:数IC前端设计工程师…

PoolFormer实战:使用PoolFormer实现图像分类任务(二)

文章目录训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法运行以及结果查看测试热力图可视化展示完…

JSON数据解析

1.基础 JSON(JavaScript Object Notation) 是一种通用的轻量级数据交换文本格式。它很容易让人阅读和编写,也便于机器进行解析和生成。它使用JavaScript语法来存储和描述数据对象,但是JSON完全独立于JavaScript。JSON可适用于多种流行编程语言。这些特性…

JavaScript 用法

文章目录JavaScript 用法<script><script><script> 标签<body><body><body> 中的 JavaScriptJavaScript 函数和事件在 <head><head><head> 或者 <body><body><body> 的JavaScript<head><hea…

计算机网络知识解析

本篇文章主要讲的是计算机网络相关的内容&#xff0c;需要有一定的计算机网络的基础知识才能汲取更多的知识。当然没基础也可以看懂&#xff0c;会对计算机网络有一个基础的理解。在这一篇介绍中&#xff0c;我尽可能的覆盖一些面试中的问题&#xff0c;通过本篇文章&#xff0…

2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!

大环境下&#xff0c;谁又是幸存者&#xff1f;2022年吃瓜事件拆解&#xff0c;打造爆款&#xff0c;让你拥有顶级营销思维&#xff08;完整版&#xff09;&#xff01;小伍带你了解【商业营销内核】&#xff01;咱们开讲&#xff01;【事件1】张兰 vs 大S&#xff0c;大女主张…

【PyTorch学习1】B站刘二大人《PyTorch深度学习实践》——线性模型(Linear Model)

b站课程链接&#xff1a;线性模型 1.基本思想&#xff1a; 给出了一组一维数据&#xff0c;定义了一个简单的线性拟合函数&#xff0c;通过穷举法来列出一些权重&#xff08;拟合函数的系数&#xff09;&#xff0c;并计算这些权重对应的拟合损失函数&#xff08;使用均方误差…

C/C++智能指针详解

系列文章目录 文章目录系列文章目录前言一、什么是智能指针&#xff1f;二、使用方法1.shared_ptr2.unique_ptr3.weak_ptr前言 对C/C学习感兴趣的可以看看这篇文章哦&#xff1a;C/C教程 本章主要介绍一些C/C中智能指针的实现原理以及如何使用 一、什么是智能指针&#xff1…

计算机组成原理复习:存储器系统

计算机组成原理复习&#xff1a;存储器系统3.1 存储器的层次化结构3.2 半导体随机存储器&#xff08;RAM&#xff0c;易失性存储器&#xff09;3.2.1 静态随机存储器&#xff08;SRAM&#xff09;3.2.2 动态随机存储器&#xff08;DRAM&#xff09;3.2.3 只读存储器&#xff08…

token认证、Express中实现token的过程

一、token认证 1. 什么是token token的意思是“令牌"&#xff0c;是服务端生成的一串字符串&#xff0c;作为客户端进行请求的一个标识。当用户第一次登录后&#xff0c;服务器生成一个token并将此token返回给客户端&#xff0c;以后客户端只需带上这个token前来请求数据…

Jenkins搭建 笔记总结

文章目录1. 什么是CI/CD(DI)&#xff1f;2. 环境 安装部署3. 搭建 GitLab服务器&#xff08;ssh方式搭建&#xff09;4. 搭建 GitLab服务器&#xff08;Docker方式搭建&#xff09;4.1 搭建Docker环境4.2 docker容器 安装gitlab5. GitLab 提交代码6. Jenkins 配置Maven Git自动…

【信息论与编码 沈连丰】第五章:离散信道及其信道编码

【信息论与编码 沈连丰】第五章&#xff1a;离散信道及其信道编码第五章 离散信道及其信道编码5.1 信道的分类及其描述5.2 无扰离散信道的传输特性5.3 有扰离散信道的传输特性5.4 译码准则5.5 有扰离散信道的信道编码定理5.6 信道编码定理的应用第五章 离散信道及其信道编码 5…

6\8. 语义分析和中间代码生成

6&8. 语义分析和中间代码生成 从几个问题说起&#xff1a; 要计算 34*5 的值如何计算&#xff1f;按照以前的方法&#xff0c;我们会想到利用符号栈和数值栈来完成这个运算。但是有了语法分析之后我们不再需要进行这么复杂的代码构造了。第一&#xff0c;我们可以使用自顶…

AcWing1206.剪格子——学习笔记(未AC)

题目&#xff1a;1206. 剪格子 - AcWing题库https://www.acwing.com/problem/content/description/1208/ import java.util.Scanner;public class Main {public static void main(String args[]){//读数据Scanner input new Scanner(System.in);String MN input.nextLine();S…

Apache ShardingSphere分表的简单使用和常见问题

目录 简介 什么是 Apache ShardingSphere? 分库分表的背景 使用 pom 配置 1&#xff0c;application.properties配置文件 2&#xff0c;创建配置类 分表 验证分表 常见问题 自定义分表规则未生效 简介 官网&#xff1a;Apache ShardingSphere 版本&#xff1a;4…

ArcGIS基础实验操作100例--实验42创建渔网Fishnet

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验42 创建渔网Fishnet 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&a…

深度学习推理框架调研总结

深度学习推理框架1.移动端深度学习推理框架调研1.1 小米的MACE&#xff08;2017&#xff09;1.2 阿里的MNN1.3 腾讯的TNN1.4 ARM的tengine1.5 百度的paddle-mobie1.6 Facebook的Caffe2&#xff08;*&#xff09;1.7 Google的TensorFlow Lite &#xff08;*&#xff09;1.8 Appl…

南京晓庄操作系统期末复习【背诵部分】

操作系统期末复习背诵部分第一章1.操作系统的特征&#xff1a;2.操作系统的最基本特征是什么&#xff0c;为什么3.操作系统的目标4.操作系统的主要功能5.计算机资源6.多道程序设计时应解决什么问题7.三种操作系统及特点第二章1.进程的定义2.进程的特征3.进程的三种基本状态4.进…

Spark04: Transformation与Action开发

一、创建RDD的三种方式 RDD是Spark编程的核心&#xff0c;在进行Spark编程时&#xff0c;首要任务是创建一个初始的RDD这样就相当于设置了Spark应用程序的输入源数据然后在创建了初始的RDD之后&#xff0c;才可以通过Spark 提供的一些高阶函数&#xff0c;对这个RDD进行操作&a…