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驱动源码

相关推荐
韩楚风2 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学2 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO2 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu72 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我2 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、2 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程2 小时前
Linux中环境变量
linux
我是哈哈hh3 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈3 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -3 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记