Linux之 USB驱动框架-基础知识整理(1)

一、usb 总线驱动框架图

二、usb 总线发展历程

  1. USB 1.0:最初的USB规范,于1996年发布,速度为1.5 Mbps(低速)和12 Mbps(全速)。

  2. USB 1.1:1998年发布,对USB 1.0规范进行了一些修订和改进。

  3. USB 2.0:2000年发布,速度为480 Mbps(高速),对USB 1.x的速度进行了显著提升。

  4. USB 3.0 / USB 3.1 Gen 1:2008年发布,速度为5 Gbps(超速)。在2013年,USB 3.0被重命名为USB 3.1 Gen 1。

  5. USB 3.1 Gen 2:2013年发布,速度为10 Gbps(超速)。

  6. USB 3.2 Gen 1x1 / USB 3.2 Gen 1 / USB 3.2 Gen 1x2:2017年发布,速度为5 Gbps(超速)。

  7. USB 3.2 Gen 2x1 / USB 3.2 Gen 2:2017年发布,速度为10 Gbps(超速)。

  8. USB 3.2 Gen 2x2:2017年发布,速度为20 Gbps(超速)。

  9. USB4:2020年发布,速度为40 Gbps。结合了USB 3.2和Thunderbolt 3标准,提供更高的数据传输速度和更多功能。

三、usb 热插拔

四、usb 设备拓扑图

五、 usb 设备和usb 驱动如何匹配

USB设备与USB驱动怎么匹配的呢?实际上USB设备中有一个模块叫固件,是固件信息和USB驱动进行的匹配。固件是固化在集成电路内部的程序代码,USB固件中包含了USB设备的出厂信息,标识该设备的厂商ID、产品ID、主版本号和次版本号等。另外固件中还包含一组程序,这组程序主要完成USB协议的处理和设备的读写操作。USB设备固件和USB驱动之间通信的规范是通过USB协议来完成的。

六、usb四种传输方式

端点的传输方式包括控制传输、中断传输、批量传输、等时传输。

1、(control)控制传输主要用于向设备发送配置信息、获取设备信息、发送命令道设备,或者获取设备的状态报告。控制传输一般发送的数据量较小,当USB设备插入时,USB核心使用端点0对设备进行配置,另外,端口0与其他端点不一样,端点0可以双向传输。

2、(interrupt)中断传输就是中断端点以一个固定的速度来传输较少的数据, USB键盘和鼠标就是使用这个传输方式。这里说的中断和硬件上下文中的中断不一样,它不是设备主动发送一个中断请求,而是主机控制器在保证不大于某个时间间隔内安排一次传输。中断传输对时间要求比较严格,所以可以用中断传输来不断地检测某个设备,当条件满足后再使用批量传输传输大量的数据。

3、(bulk)批量传输通常用在数据量大、对数据实时性要求不高的场合,例如 USB打印机、扫描仪、大容量存储设备、U盘等。

4、(isochronous)等时传输同样可以传输大批量数据,但是对数据是否到达没有保证,它对实时性的要求很高,例如 音频、视频等设备。

7、usb 驱动分类

内核代码分析包括USB驱动框架、鼠标驱动、键盘驱动、U盘驱动:

USB驱动编写的主要框架/drivers/usb/usb-skeleton.c

USB鼠标驱动 /drivers/hid/usbhid/usbmouse.c

USB键盘驱动动 /drivers/hid/usbhid/usbkbd.c

USB Mass Storage是一类USB存储设备, U盘便是其中之一,主要分析的驱动文件是/drivers/usb/storage/usb.c

/drivers/usb/host/ :usb host control 主机控制器驱动(嵌入式otg:dwc_otg)

/drivers/usb/serial :usb 串行设备驱动(例如 usb 3G 卡、蓝牙)。

之后会对每个USB驱动进行分析源码,继续加油

8、USB OTG

现在市面上有些设备(比如MP4)既能插上电脑当U盘使用,也能接上U盘读取U盘。这就是OTG(On-The-Go),既可以做主设备也可以做从设备,传说中的雌雄同体。OTG不仅支持控制器的主从切换,在一定程度上,也支持相同设备之间的数据交换。

9、上面是usb 总线的基础知识,第二篇开始分析USB驱动源码

相关推荐
optimistic_chen6 分钟前
【Redis系列】Redis缓存
linux·数据库·redis·mysql·缓存·火山引擎
我想发发发14 分钟前
.deb格式软件包安装方式(Ubuntu 22.04为例)
linux·运维·ubuntu
cyber_两只龙宝15 分钟前
LVS-NAT模式实验配置以及详解
linux·运维·云原生·lvs
海涛高软19 分钟前
vmware虚拟机 ubuntu20.4手动设置静态IP
linux·运维·服务器
学嵌入式的小杨同学29 分钟前
【嵌入式 C 语言实战】栈、队列、二叉树核心解析:存储原理 + 应用场景 + 实现思路
linux·c语言·网络·数据结构·数据库·后端·spring
VekiSon31 分钟前
ARM架构——时钟系统与定时器详解
linux·c语言·arm开发·嵌入式硬件·架构
2501_9436953337 分钟前
中专学历如何通过数据分析晋升店长
运维·服务器
optimistic_chen42 分钟前
【Docker入门】Docker Registry(镜像仓库)
linux·运维·服务器·docker·容器·镜像仓库·空间隔离
JiMoKuangXiangQu1 小时前
Linux perf 子系统一览
linux·perf
凸头1 小时前
Nginx配置学习
运维·学习·nginx