嵌入式驱动开发详解18(USB驱动开发)

news2024/12/18 7:31:05

文章目录

  • 前言
  • USB
    • USB简介
    • USB信号线
    • USB控制规格
  • USB—HUB
    • USB—HUB原理
    • USB—HUB电路
  • USB—OTG
    • USB—OTG原理
    • USB—OTG电路
  • USB协议
  • 后续
  • 参考文献

前言

该专栏主要是讲解嵌入式相关的驱动开发,但是由于部分模块的驱动框架过于复杂,其内容量不是一个人能完成的,我们驱动开发人员主要是对其进行理解即可,所以本专栏对部分驱动代码相关内容不进行讲解,包括ALSA,Codec,CAN,USB,WIFI,4G模块等,这些只讲解相关的协议等基础知识

USB

USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、USB 摄像 头等,我们在实际开发中也常常遇到 USB 接口的设备,因为 USB 接口很复杂,不同的设备其协议也不同,这不是简简单单一章内容就能说完的,USB 驱动开发本身就是一门复杂的课程。

USB简介

USB 全称为 Universal Serial Bus,翻译过来就是通用串行总线。由英特尔与众多电脑公司 提出来,用于规范电脑与外部设备的连接与通讯。
USB 目前可以划分为 USB1.0、USB2.0、USB3.0 以及即将到来的 USB4.0。
USB1.0:USB 规范于 1995 年第一次发布,由 Inter、IBM、Microsoft 等公司组成的 USBIF(USB Implement Forum)组织提出。USB-IF 于 1996 年正式发布 USB1.0,理论速度为 1.5Mbps。 1998 年 USBIF 在 USB1.0 的基础上提出了 USB1.1 规范。
USB2.0:USB2.0 依旧由 Inter、IBM、Microsoft 等公司提出并发布,USB2.0 分为两个版 本:Full-Speed 和 High-Speed,也就是全速(FS)和高速(HS)。==USB2.0 FS 的速度为 12Mbps,USB2.0 HS 速度为 480Mbps。==目前大多数单片机以及低端 Cortex-A 芯片配置的都是 USB2.0 接口,USB2.0 全面兼容 USB1.0 标准。
USB3.0:USB3.0 同样有 Inter 等公司发起的,USB3.0 最大理论传输速度为 5.0Gbps,USB3.0 引入了全双工数据传输,USB2.0 的 480Mbps 为半双工。USB3.0 中两根线用于发送数据,另外两根用于接收数据。在 USB3.0 的基础上又提出了 USB3.1、USB3.2 等规范,USB3.1 理论传输速度提升到了 10Gbps,USB3.2 理论传输速度为 20Gbps。为了规范 USB3.0 标准的命名,USBIF 公布了最新的 USB 命名规范,原来的 USB3.0 和 USB3.1 命名将不会采用,所有的 3.0 版本 的 USB 都命名为 USB3.2,以前的 USB3.0、USB3.1 和 USB3.2 分别叫做 USB3.2 Gen1、USB3.2 Gen2、USB3.2 Gen 2X2。
USB4.0:在 Inter 的雷电接口上改进而 来。USB4.0 的速度将提升到了 40Gbps,最高支持 100W 的供电能力,只需要一根线就可以完 成数据传输与供电,极大的简化了设备之间的链接线数

如下五副图所示,依次是USB A 插头和插座、USB B 插头和插座、Mini USB 插头和插座、Micro USB 插头和插座、USB Typec 插头和插座。
USB A 插头和插座:
在这里插入图片描述
USB B 插头和插座
在这里插入图片描述
Mini USB 插头和插座
在这里插入图片描述

Micro USB 插头和插座
在这里插入图片描述
USB Typec 插头和插座
在这里插入图片描述

USB信号线

在这里插入图片描述

  • USB A 插头:从左到右线序依次为 1,2,3,4,第 1 根线为 VBUS,电压为 5V,第 2 根线为 D-,第 3 根线为 D+,第 4 根线为 GND。USB 采用差分信号来传输数据,因 此有 D-和 D+两根差分信号线。大家仔细观察的话会发现 USB A 插头的 1 和 4 这两个触点比较 长,2 和 3 这两个触点比较短。1 和 4 分别为 VBUS 和 GND,也就是供电引脚,当插入 USB 的 时候会先供电,然后再接通数据线。拔出的时候先断开数据线,然后再断开电源线。
  • Mini USB 插头:Mini USB 插头有 5 个触点,也就是 5 根线,线序 从左往右依次是 1~5。第 1 根线为 VCC(5V),第 2 根线为 D-,第 3 根线为 D+,第 4 根线为 ID, 第 5 根线为 GND。可以看出 Mini USB 插头相比 USB A 插头多了一个 ID 线,这个 ID 线用于 实现 OTG 功能,通过 ID 线来判断当前连接的是主设备(HOST)还是从设备(SLAVE)。

USB控制规格

这里我们简单提一下 OHCI、UHCI、EHCI 和 xHCI,这三 个是用来描述 USB 控制器规格的,区别如下:
在这里插入图片描述

USB—HUB

USB—HUB原理

USB 是主从结构的,也就是分为主机和从机两部分,一般主机叫做 Host,从机叫做 Device。 主机就是提供 USB A 插座来连接外部的设备,比如电脑作为主机,对外提供 USB A 插座,我 们可以通过 USB 线来连接一些 USB 设备,比如声卡、手机等。因此电脑带的 USB A 插座数量就决定了你能外接多少个 USB 设备,如果不够用的话我们可以购买 USB 集线器来扩展电脑的 USB 插口,USB 集线器也叫做 USB HUB,虽然我们可以对原生的 USB 口数量进行扩展,但是我们不能对原生 USB 口的带宽进行扩展,在 一个 USB 系统中,仅有一个 USB 主机,但是可以有多个 USB 设备,包括 USB 功能设备和 USB HUB,最多支持 127 个设备。一个 USB 主控制器支持 128 个地址,地址 0 是默认地址,只有在 设备枚举的时候才会使用,地址 0 不会分配给任何一个设备。所以一个 USB 主控制器最多可以 分配 127 个地址。整个 USB 的拓扑结构就是一个分层的金字塔形。
在这里插入图片描述

USB—HUB电路

下面展示通过GL850G和SL2.1A这两个HUB芯片实现USB的扩展方式,这两个都是符合 USB2.0 标准的 USB HUB 芯片,支持一拖四扩展,可以将一路 USB 扩展为 4 路 USB HOST 接口。扩 展 出 了 4 路 USB HOST 接 口 , 分 别 为 HUB_DP1/DM1 、 HUB_DP2/DM2、HUB_DP3/DM3 和 HUB_DP4/DM4。其中 HUB_DP4/DM4 用于 4G 模块,因 此对外提供的只有三个 USB HOST 接口。
GL850G原理图如下:
在这里插入图片描述
SL2.1A原理图如下,其中SRV05-4是一款浪涌级别瞬态电压抑制器(TVS)二极管阵列,设计用于保护高速数据接口,专门设计用于保护数据和传输线路上的敏感元件免受静电放电(ESD),电快速瞬变(EFT)以及闪电引起的过压。
在这里插入图片描述

USB—OTG

USB—OTG原理

有些设备可能有时候需要做 HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。为此USB OTG 应运而生,OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以做 HOST, 也可以做 DEVICE。ID 线的高低电平表示 USB 口工作在 HOST 还是 DEVICE 模 式:
ID=1:OTG 设备工作在从机模式。
ID=0:OTG 设备工作在主机模式。
如果只有一个 Mini USB 或者 Type-C USB 接口的话如果要使用 OTG 的主机模 式,那么就需要一根 OTG 线。即mini USB 插头转USB A插座 或者 Type-C USB 插头转USB A 插座。

USB—OTG电路

方案一作为主机和从机分两个端口,从机的优先级高于主机。
在这里插入图片描述

左侧的为 Mini USB 插座,当 OTG 作为从机(DEVICE)的时候 USB 线接入此 接口。右侧为 USB A 插座,当 OTG 作为主机的时候将 USB 设备插入到此接口中。USB_OTG_VBUS 就是电脑供的 5V 电压,由于分压电阻 R111 和 R31 的作用,此时 USB_OTG1_ID 的电压就是 4.5V 左右,当 ID 线为高的时候就表示 OTG 工作在从机模式。Mini USB 线拔出来以后 USB_OTG_VBUS 就没有电压了,此时 USB_OTG1_ID 线就被 R31 这个 100K 电阻下拉到地,因此 USB_OTG1_ID 线的电压就为 0,当 ID 线为 0 的时 候就表示 OTG 工作在主机模式。
方案二:USB OTG 用一个端口既可以作为主机(HOST),也可以作为从机(DEVICE)。
在这里插入图片描述
当 OTG 作为从机(DEVICE)的时候 USB 线接入 此接口。当 OTG 作为主机的时候需要使用 Type-C OTG 线。
从机(DEVICE)模式: R111 这一个 49.9K 的电阻,默认将 USB_OTG1_ID 线拉高,当 ID 线为高的时候就表示 OTG 工作在从机模式。此时由于 USB_OTG1_ID 为高电平,因此 MOS1(SI2302)导通,因此 MT9700HT5 的 EN 脚就接地,此时 MT9700HT5 的 OUT 引脚就没有输出,所以 USB_OTG_VBUS 电压关闭。在 OTG 做从机的时候,OTG 就不需要向外界提供 USB_OTG_VBUS 电源了。这里使用 MT9700HT5 这个芯片来实 VBUS 电源的 开关控制。
主机(HOST)模式:如果要使用 OTG 的 HOST 功能,那么必须要使用到 Type-C OTG 线。 Type-C OTG 线会将 CC1 和 CC2 拉低,因此 USB_OTG1_ID 线也会被拉低,当 ID 线为 0 的时候就表示 OTG 工作在主机模式。此时由于 USB_OTG1_ID 为低,因此 MOS1(SI2302)不导通, ,因此 MT9700HT5 的 EN 脚就会被 R31 这个 10K 电阻上拉到 5V,所以 MT9700HT5 的 OUT 引脚就会输出 5V 电压,也就是说 USB_OTG_VBUS 此时是 5V,可以向外部设备提供 5V 电源。

USB协议

USB的协议包含描述符、数据包类型、传输类型和枚举等。十分复杂,有需要深入研究的时候再自行搜索学习。

后续

后期如果有对USB进一步学习的需求的话会继续更新此文章,希望对此方向感兴趣的伙伴能一起评论交流!!!!

参考文献

  1. 个人专栏系列文章
  2. 正点原子嵌入式驱动开发指南
  3. 对代码有兴趣的同学可以查看链接https://github.com/NUAATRY/imx6ull_dev

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

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

相关文章

ubuntu监测硬盘状态

安装smartmontools smartctl -l error /dev/sdk smartctl -i /dev/sda lshw -class disk smartctl -H /dev/sd 结果1: 结果2:PASSED,这表示硬盘健康状态良好 smartctl -a /dev/sdb sdk lsblk blkid 测试写入速度 time dd if/dev/zero of…

华为云联合中国信通院发布首个云计算智能化可观测性能力成熟度模型标准

2024年12月3日,由全球数字经济大会组委会主办,中国信息通信研究院(以下简称“中国信通院”)、中国通信企业协会承办的2024全球数字经济大会云AI计算国际合作论坛在北京成功召开。本次会议中,华为云联合中国信通院等单位…

Stable Diffusion 提示词语法

1.提示词基础 1.提示词之间用英文逗号,分隔 2.提示词之间是可以换行的 3.权重默认为1,越靠前权重越高 4.数量控制在75个单位以内 2.提示词各种符号的意义 2.1 ()、[]、{}符号 权重值()小括号[]中括号{}大括号默认1111层()1.1[]0.9{}1.052层(()) 1.121.21[[]]0.920.81{{}}1.…

CMake 保姆级教程(上)

整理自 视频 【CMake 保姆级教程【C/C】】 https://www.bilibili.com/video/BV14s4y1g7Zj/?p5&share_sourcecopy_web&vd_source6eb8f46d194c5ef9f89d3331f623a9c3 1、cmake简介 源文件(.cpp / .c)要经过 工具链 1.1 工具链 1、预处理&#…

[计算机网络]唐僧的”通关文牒“NAT地址转换

1.NAT:唐僧的通关文牒 在古老的西游记中,唐僧师徒四人历经九九八十一难,终于取得了真经。然而,他们并不是一开始就获得了通关文牒,而是经过了重重考验,最终得到了国王的认可,才顺利通过了各个关…

vscode设置终端代理

转载请标明出处:小帆的帆的博客 设置终端代理 修改项目的.vscode/settings.json {"terminal.integrated.env.windows": {"http_proxy": "http://127.0.0.1:7890","https_proxy": "http://127.0.0.1:7890"}, }…

java后端环境配置

因为现在升学了,以前本来想毕业干java的,很多java的环境配置早就忘掉了(比如mysql maven jdk idea),想写个博客记录下来,以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…

云计算HCIP-OpenStack03

书接上回: 云计算HCIP-OpenStack02-CSDN博客 10.KeyStone keystone-Openstack,IAM服务(统一身份认证)-云服务 建议先去了解Hadoop(大数据生态系统)中的kerberos(LDAPkerberos的鉴权机制&#xf…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…

【Flink-scala】DataStream编程模型之状态编程

DataStream编程模型之状态编程 参考: 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器 4.【Flink-scal…

Gitlab服务管理和仓库项目权限管理

Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件; gitlab-ctl stop # 停止所有 gitlab 组件; gitlab-ctl restart # 重启所有 gitlab 组件; gitlab-ctl status …

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥,为什么会有给样卷不自带解析的,对答案都没得对,故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数,需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…

学习threejs,区域光THREE.AreaLight效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.AreaLight 区域光 二…

RabbitMQ消息队列的笔记

Rabbit与Java相结合 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在配置文件中编写关于rabbitmq的配置 rabbitmq:host: 192.168.190.132 /…

VSCode,Anaconda,JupyterNotebook

文章目录 一. 下载VSCode并安装二. 下载Anaconda并安装1. anaconda介绍2. Anaconda的包管理功能3. Anaconda的虚拟环境管理4.Jupyter Notebook5. Jupyter Notebook使用简介6. Jupyter Notebook快捷键7.Jupyter notebook的功能扩展8. Jupyter notebook和Jupyter lab的区别 三. V…

动态导出word文件支持转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff…

那些不属性的C语言关键字-const

大家都知道const修饰的变量是不可变的&#xff0c;但是到底是怎么实现的那&#xff0c;有方法修改只读变量的值吗&#xff0c;今天我们结合实验代码&#xff0c;分析下const关键字的实现原理 const变量 1.const修饰局部变量 int main(){const int abc 123;printf("%d\…

【Java 数据结构】List -> 给我一个接口!!!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 什么是 List 2. List 常用的方法 3. List 的使用 1. 什么是 List 其实 List 是一个接口&#xff0c;它继承了 Collection 接口 下列为 List 接口中的各种…

【5G】5G的主要架构选项

最初&#xff0c;在3GPP讨论中考虑了所有可能的聚合和核心网络组合&#xff0c;共有八个架构选项。以下重点介绍option2、3、4和7。 1. 独立组网 (Standalone, SA) 架构选项 2 &#xff1a;Standalone architecture with 5G-core 特点&#xff1a; 5G核心网&#xff08;5GC, …

Ajax简单理解

Ajax 1 什么是ajax AJAXAsynchronous JavaScript and XML (异步的JavaScript和XML)AJAX不是新的编程语言&#xff0c;二十一种使用现有标准的新方法 AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容。 AJAX 不需要任何浏…