博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINUX USB驱动开发(2)-USB驱动体系分析
阅读量:2435 次
发布时间:2019-05-10

本文共 2699 字,大约阅读时间需要 8 分钟。

一.日常USB现象:

1.将USB设备接入电脑上,右下角弹出“发现android phone”

2.跳出对话框。提示你安装驱动程序

问题1:既然没有安装驱动,为何能知道设备是“Android phone”

答1:windows里已经有了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总线上的每一个USB设备都有自己的编号(地址)
每一个USB设备接入PC时,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摄像头

3.USB传输的对象:端点(endpoint)

我们说“读U盘”、“写U盘”、可以细化为:把数据写到U盘的端点1,从U盘的端点2里读出数据

除端点0外,每一个端点只支持一个方向的数据传输
端点0用于控制传输,既能输出也能输入

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

5.术语里、程序里说的输入(IN)、输出(OUT)“都是”基于USB主机的立场说的

比如鼠标的数据是从鼠标传到PC机,对应的端点称为“输入端点”

6.USB总线设备驱动程序的作用:

1.识别USB设备

2.查找并安装对应设备驱动程序
3.提供USB读写函数/不了解数据含义
USB驱动程序框架

app:--------------------------------------------------------------------------------USB设备驱动程序//知道数据含义--------------------------------------------------------------------------------USB总线设备驱动程序 //1识别.2.找到匹配的设备驱动,3.提供USB读写函数--------------------------------------------------------------------------------USB主机控制器UHCI OHCI EHCI --------------------------------------------------------------------------------

硬件 USB设备

UHCI:intel,低速/全速USB设备
OHCI:micrsoft 低速/全速
EHCI :全速

三.USB总线设备驱动程序的作用:

1.识别USB设备

1.1分配地址,

1.2并告诉USB设备地址(set address)
1.3发出命令获取描述符usb_device_descriptor
描述符的信息可以在\include\linux\usb\Ch9.h看到

2.查找并安装对应设备驱动程序

3.提供USB读写函数/不了解数据含义

将USB插入开发板

usb 1-3.3: new high speed USB device number 6 using s5p-ehci
[17009.531552] usb 1-3.3: New USB device found, idVendor=04e8, idProduct=6860, bcdDevice=0400
[17009.538377] usb 1-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[17009.545701] usb 1-3.3: New USB device Class: Class=0, SubClass=0, Protocol=0
[17009.552682] usb 1-3.3: Product: SAMSUNG_Android
[17009.557190] usb 1-3.3: Manufacturer: SAMSUNG
[17009.561443] usb 1-3.3: SerialNumber: 357c9909
拔掉: usb 1-3.3: USB disconnect, device number 6
在内核目录下搜:
grep “USB device using”* -nR
kernel/driver/usb/core/hub.c:2897:”%s %s speed %sUSB device number %d using %s\n”
kernel/driver/usb/core/hub.c:3011: “%s SuperSpeed USB device number %d using%s\n”,
kernel/driver/usb/core/hub.c
USB总线调用关系
当USB设备插入主机后,由于硬件电路使主机感知到设备接入,主机产生一个中断

这里写图片描述

你可能感兴趣的文章
小程序DES加解密
查看>>
Vue 路由 导航守卫(全局守卫、路由独享守卫)
查看>>
ajax图片上传
查看>>
小程序数组去重
查看>>
微信小程序生成分享海报
查看>>
值得收藏的 CSS 形状
查看>>
H5屏幕宽度大小自适应方式
查看>>
中秋诗歌两首
查看>>
计算机学科一些重要算法的列表
查看>>
进站画面:1q84音乐电台
查看>>
回复旦
查看>>
二十世纪计算机十大著名算法
查看>>
MFC程序更换XP皮肤
查看>>
SkinSharp使用方法
查看>>
盘点2010年电子书市场
查看>>
How Computers Know What We Want — Before We Do
查看>>
About Recommender Systems
查看>>
jason数据格式
查看>>
金山快盘的安全性太差了
查看>>
KDD Cup2011
查看>>