Linux-USB驱动笔记

Posted 一只青木呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-USB驱动笔记相关的知识,希望对你有一定的参考价值。

1、前言

USB的驱动非常的复杂,一下子去看源码也是一头雾水,下面记录下学习USB驱动的过程,后续也会有几篇笔记连续起来。

2、USB简介

USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。

USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、USB1.1、USB2.0、USB3.0等,以及正在即将到来的USB4.0。,USB2.0,USB3.0目前应用比较广泛了。

由于USB是主从模式的结构,设备与设备之间、主机与主机之间不能互连,为解决这个问题,扩大USB的应用范围,出现了USB OTG(ON The Go)。USB OTG 同一个设备,在不同的场合下可行在主机和从机之间切换。

3、USB版本速率对比

USB版本最大传输速率
USB 1.01.5Mbps(192KB/s) 低速(Low-Speed)
USB 1.112Mbps(1.5MB/s) 全速(Full-Speed)
USB 2.0480Mbps(60MB/s) 高速(High-Speed)
USB 3.0(USB 3.1 Gen 1)5Gbps(500MB/s) 超高速(Super-Speed)
USB 3.1 Gen 210Gbps(1280MB/s) 超高速+(Super-speed+)

USB1.0:USB 规范于 1995 年第一次发布,由 Inter、IBM、Microsoft 等公司组成的 USB-IF(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.0HS 速度为 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 标准的命名,USB-IF 公布了最新的 USB 命名规范,原来的 USB3.0 和 USB3.1 命名将不会采用,所有的 3.0 版本的 USB 都命名为 USB3.2,以前的 USB3.0、USB3.1 和 USB3.2 分别叫做 USB3.2 Gen1、USB3.2Gen2、USB3.2 Gen 2X2。

USB4.0:目前还在标准定制中,目前还没有设备搭载,据说是在 Inter 的雷电 3 接口上改进而来。USB4.0 的速度将提升到了 40Gbps,最高支持 100W 的供电能力,只需要一根线就可以完成数据传输与供电,极大的简化了设备之间的链接线数,期待 USB4.0 设备上市。

4、USB总线

4.1、USB2.0

USB2.0总线采用4芯的屏蔽线,一对差分线(D+, D-)传输信号,另一对(VBUS, 电源线) 传输+5v的直流电。

针脚名称颜色
1VCC
2D-
3D+绿
4GND


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 的时候会先供电,然后再接通数据线。拔出的时候先断开数据线,然后再断开电源线。

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

4.2、USB3.0

USB3.0设计了9条内部线路,除了VBUS、电源线、屏蔽线之外,其余3对都是数据传输线路。其中保留了D+与D-这两条兼容USB2.0的线路,新增了SSRX与SSTX专用的USB3.0所设的线路

针脚名称颜色
1VCC
2D-
3D+绿
4GND
5SSRX-
6SSRX+
7GND_GRAIT
8SSTX-
9SSTX+

5、USB控制器类型

USB类型接口标准
USB1.0OHCI 、UHCI
USB2.0EHCI
USB3.0xHCI
  • OHCI( Open Host Controller Interface ) 这是一种 USB 控制器标准,厂商在设计 USB控制器的时候需要遵循此标准,用于 USB1.1 标准。OHCI 不仅仅用于 USB,也支持一些其他的接口,比如苹果的 Firewire 等,OHCI 由于硬件比较难,所以软件要求就降低了,软件相对来说比较简单。OHCI 主要用于非 X86 的 USB,比如扩展卡、嵌入式 USB 控制器。

  • UHCI 全称是 Universal Host Controller Interface,UHCI 是 Inter 主导的一个用于 USB1.0/1.1的标准,与 OHCI 不兼容。与 OHCI 相比 UHCI 硬件要求低,但是软件要求相应就高了,因此硬件成本上就比较低

  • EHCI全称是 Enhanced Host Controller Interface,是 Inter 主导的一个用于 USB2.0 的 USB控制器标准。兼容 EHCI 标准。EHCI 仅提供USB2.0 的高速功能,至于全速和低速功能就由 OHCI 或 UHCI 来提供。

  • xHCI( eXtensible Host Controller Interface ),是最新的USB3.0的接口标准,它在速度、节能、虚拟化等方面都比前面3中有了较大的提高。xHCI 支持所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed)。xHCI的目的是为了替换前面三种(UHCI/OHCI/EHCI)。

以上是关于Linux-USB驱动笔记的主要内容,如果未能解决你的问题,请参考以下文章

usb 枚举流程

USB原理及驱动框架介绍编写

macusb网卡要驱动吗

USB2.0学习笔记连载:USB设备驱动的安装

学习Linux下s3c2440的USB鼠标驱动笔记

USB摄像头驱动