USB驱动程序涉及的概念及框架

Posted -glb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB驱动程序涉及的概念及框架相关的知识,希望对你有一定的参考价值。

引入:当我们把一个USB设备接入PC机时,会出现什么样的现象?

现象:把USB设备接到PC
1.右下角弹出“发现android phone”
2.跳出一个对话框,提示你安装驱动程序

首先来看一下,USB驱动程序的框架:

USB驱动程序框架:
app:
------------------------------------------------
                USB设备驱动程序
内核---------------------------------------
                USB总线驱动程序(这部分不需要太关心)
------------------------------------------------
                USB主机控制器
硬件 -------------
                USB设备

技术图片

 

 

问1. 既然还没有驱动程序,为何能知道是"android phone"
答1. widows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"
提示你安装的是"设备驱动程序"

USB总线驱动程序负责:识别USB设备,给USB设备找到对应的驱动程序。

问2. USB设备种类非常多,为什么一接入电脑,就能识别出来?
答2. PC和USB设备都得遵守一些规范。
比如:USB设备接入电脑后,PC机会发出"你是什么"?
USB设备就必须回答"我是xxx",并且回答的语言必须相同。
USB总线驱动程序会发出某些命令想获取设备信息(描述符),
USB设备必须返回"描述符"给PC

问3. PC机上接有很多的USB设备,怎么分辨它们?
USB接口只有4条线:5v,GND,D-,D+
答3. 每一个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号
接在USB总线上的每一个USB设备都有自己的编号(地址)
PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址)

问4. USB设备刚接入PC时,还没有编号,那么PC怎么把"分配的编号"告诉它?
答4. 新接入的USB设备的默认编号是0,在未分配新编号前,PC使用0编号和它通信。

问5. 为什么一接入USB设备,PC机就能发现它?
答5. PC的USB口内部,D-和D+接有15k的下拉电阻,未接USB设备时为低电平。
USB设备的USB口内部,D-或D+接有1.5k的上拉电阻,它一接入PC,就会把PC USB口的D-或D+拉高,从硬件的角度通知PC有新设备接入了。

技术图片

 

 技术图片

 

 

其他概念:
1. USB 是主从结构的
所有的USB传输,都是从USB主机这边发起,USB设备没有"主动"通知USB主机的能力
例子:USB鼠标滑动一下立刻产生数据,但是它没有能力通知PC机来读数据,只能被动地等待PC机来读。

2. USB的传输类型:
a. 控制传输:可靠,时间有保证,比如USB设备的识别过程
b. 批量传输:可靠,时间没有保证,比如U盘
c. 中断传输:实时,可靠,比如USB鼠标
d. 实时传输:实时,不可靠(偶尔花屏),比如USB摄像头
注意:USB设备没有主动通知PC机的能力,那你为什么能发起中断传输,这个地方只是借助中断的概念而已,
它是没有中断能力的,它是利用查询方式来实现这个实时性的。

3. USB传输的对象:端点(endpoint)
我们说读U盘,写U盘,可以细化为:把数据写到U盘的端点1,从U盘的端点2里读出数据
除了端点0外,每个端点只支持一个方向的数据传输。
端点0用于控制传输,既能输出也能输入

4. 每一个端点都有传输类型,传输方向

5. 术语里、程序里说的输入(IN)、输出(out)都是基于USB主机的立场说的
比如鼠标的数据是从鼠标传到PC机,对应的端点称为输入端点

6. USB总线驱动程序的作用
a. 识别USB设备
b. 查找并安装对应的设备驱动程序
c. 提供USB读写函数(它并不知道数据的含义,只是给你提供读写方法,而设备驱动知道数据的含义)

以上是关于USB驱动程序涉及的概念及框架的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动之USB总线驱动程序框架简析

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

WIN10以上平台实现UCX框架的USB虚拟总线驱动(USB主机控制端驱动)

WIN10以上平台实现UCX框架的USB虚拟总线驱动(USB主机控制端驱动)

7 Linux usb驱动框架分析

Linux下USB驱动框架分析