正点原子imx6ull-mini-Linux驱动之Linux USB 驱动实验

USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、USB 摄像 头等,我们在实际开发中也常常遇到 USB 接口的设备,本章我们就来学习一下如何使能 Linux 内核自带的 USB 驱动。注意!本章并不讲解具体的 USB 开发,因为 USB 接口很复杂,不同的 设备其协议也不同,这不是简简单单一章内容就能说完的,USB 驱动开发本身就是一门复杂的 课程。所以,如果想要学习如何编写代码开发一个全新的 USB 设备那就可以跳过本章。

1:USB 接口简介

关于 USB 详细的协议内容请参考《USB2.0 协议中文版.pdf》和《USB3.0 协议中文版.pdf》, 这两份文档已经放到了开发板光盘中,存放在“4、参考资料” 中。

1.1:什么是 USB?

USB 全称为 Universal Serial Bus,翻译过来就是通用串行总线。由英特尔与众多电脑公司 提出来,用于规范电脑与外部设备的连接与通讯。目前 USB 接口已经得到了大范围的应用,已 经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。比如最新的智能手机均 采用 USB Typec 取到了传统的 3.5mm 耳机接口,苹果最新的 MacBook 只有 USB Typec 接口, 至于其他的 HDMI、网口等均可以通过 USB Typec 扩展坞来扩展。

按照大版本划分,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 接口,比 如 STM32 和 ALPHA 开发板所使用的 I.MX6ULL。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 标准的命名,USB-IF 公布了最新的 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 的雷电 3 接口上改进 而来。USB4.0 的速度将提升到了 40Gbps,最高支持 100W 的供电能力,只需要一根线就可以 完成数据传输与供电,极大的简化了设备之间的链接线数,期待 USB4.0 设备上市。 如果按照接口类型划分的话 USB 就要分为很多种了,最常见的就是 USB A 插头和插座, 如图 67.1.1.1 所示:

使用过JLINK调试器的朋友应该还见过USB B插头和插座,USB B插头和插座如图67.1.1.2 所示:

USB 插头在不断的缩小,由此产生了 Mini USB 接口,正点原子的 I.MX6ULL-ALPHA 开 发板使用的就是 Mini USB,Mini USB 插头和插座如图 67.1.1.3 所示:

比 Mini USB 更小的就是 Micro USB 接口了,以前的智能手机基本都是 Micro USB 接口的, Micro USB 插头和插座如图 67.1.1.4 所示:

现在最流行的就是 USB Typec 了,USB Typec 插头和插座如图 67.1.1.5 所示:

1.2:USB 电气特性

由于正点原子 I.MX6U-ALPHA 开发板使用的 Mini USB 接口,因此我们就以 Mini USB 为 例讲解一下 USB 的基本电气属性。Mini USB 线一般都是一头为 USB A 插头,一头为 Mini USB 插头。一共有四个触点,也就是 4 根线,这四根线的顺序如图 67.1.2.1 所示:

如图 67.1.2.1 所示,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 是一种支持热插拔的总线接口,使用差分线(D-和 D+)来传输数据,USB 支持两种供 电模式:总线供电和自供电,总线供电就是由 USB 接口为外部设备供电,在 USB2.0 下,总线 供电最大可以提供 500mA 的电流。

1.3:USB 拓扑结构

USB 是主从结构的,也就是分为主机和从机两部分,一般主机叫做 Host,从机叫做 Device。 主机就是提供 USB A 插座来连接外部的设备,比如电脑作为主机,对外提供 USB A 插座,我 们可以通过 USB 线来连接一些 USB 设备,比如声卡、手机等。因此电脑带的 USB A 插座数量 就决定了你能外接多少个 USB 设备,如果不够用的话我们可以购买 USB 集线器来扩展电脑的 USB 插口,USB 集线器也叫做 USB HUB,USB HUB 如图 67.1.3.1 所示:

图 67.1.3.1 是一个一拖四的 USB HUB,也就是将一个 USB 接口扩展为 4 个。主机一般会 带几个原生的 USB 主控制器,比如 I.MX6ULL 就有两个原生的 USB 主控制器,因此 I.MX6ULL 对外提供两个 USB 接口,这两个接口肯定不够用,正点原子的 ALPHA 开发板上有 4 个 HOST 接口,其中一路是 USB1 的 OTG 接口,其他的三路就是 USB2 通过 USB HUB 芯片扩展出来 的,稍后我们会讲解其原理图。 虽然我们可以对原生的 USB 口数量进行扩展,但是我们不能对原生 USB 口的带宽进行扩 展,比如 I.MX6ULL 的两个原生 USB 口都是 USB2.0 的,带宽最大为 480Mbps,因此接到下面的所有 USB 设备总带宽最大为 480Mbps。

USB 只能主机与设备之间进行数据通信,USB 主机与主机、设备与设备之间是不能通信的。 因此两个正常通信的 USB 接口之间必定有一个主机,一个设备。为此使用了不同的插头和插座 来区分主机与设备,比如主机提供 USB A 插座,从机提供 Mini USB、Micro USB 等插座。在 一个 USB 系统中,仅有一个 USB 主机,但是可以有多个 USB 设备,包括 USB 功能设备和 USB HUB,最多支持 127 个设备。一个 USB 主控制器支持 128 个地址,地址 0 是默认地址,只有在 设备枚举的时候才会使用,地址 0 不会分配给任何一个设备。所以一个 USB 主控制器最多可以 分配 127 个地址。整个 USB 的拓扑结构就是一个分层的金字塔形,如图 67.1.3.2 所示(参考自 USB2.0 协议中文版.pdf):

图 67.1.3.2 中可以看出从 Root Hub 开始,一共有 7 层,金字塔顶部是 Root Hub,这个是 USB 控制器内部的。图中的 Hub 就是连接的 USB 集线器,Func 就是具体的 USB 设备。 USB 主机和从机之间的通信通过管道(Pipe)来完成,管道是一个逻辑概念,任何一个 USB 设备一旦上电就会存在一个管道,也就是默认管道,USB 主机通过管道来获取从机的描述符、 配置等信息。在主机端管道其实就是一组缓冲区,用来存放主机数据,在设备端管道对应一个 特定的端点。

1.4:什么是 USB OTG?

前面我们讲了,USB 分为 HOST(主机)和从机(或 DEVICE),有些设备可能有时候需要做 HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。如果一 个 USB 接口既可以做 HOST 又可以做 DEVICE 那就太好了,使用起来就方便很多。为此,USB OTG 应运而生,OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值