一.日常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设备插入主机后,由于硬件电路使主机感知到设备接入,主机产生一个中断

LINUX USB驱动开发(2)-USB驱动体系分析相关推荐

  1. Linux驱动开发1:驱动开发与裸机开发的区别

    Linux驱动开发1:驱动开发与裸机开发的区别 1.裸机驱动开发回顾: 裸机驱动开发是非常底层的,跟寄存器打交道,有些MCU为了方便我们开发,提供了一些库,让我们通过调用API函数来间接的实现利用寄存 ...

  2. <Linux开发>驱动开发 -之-platform 驱动

    <Linux开发>驱动开发 -之-platform 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: < ...

  3. <Linux开发>--驱动开发-- 字符设备驱动(3) 过程详细记录

    <Linux开发>–驱动开发-- 字符设备驱动(3) 过程详细记录 驱动开发是建立再系统之上的,前面作者也记录了系统移植的过程记录,如果有兴趣,可进入博主的主页查看相关文章,这里就不添加链 ...

  4. Linux 设备驱动开发 —— platform设备驱动应用实例解析

    前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 -- platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...

  5. Linux驱动开发—内核I2C驱动详解

    Linux驱动开发--内核I2C驱动 I2C驱动文件结构 I2C数据传输过程 i2c_transfer i2c_msg I2C通讯常用的接口函数(老版本) 快速读写接口函数:(连续读写) 常用的读操作 ...

  6. Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)

    文章目录 全系列传送门 1. 在/arch/arm/boot/dts/imx6q-pinfunc.h查找 2. 在设备树配置文件中添加设备节点定义以及其引脚定义 3. 修改设备树文件添加配置 4. d ...

  7. STM32MP157驱动开发——4G通信模块驱动

    STM32MP157驱动开发--4G通信模块驱动 一.简介 二.驱动开发 1.高新兴 ME3630 驱动开发 驱动修改 添加 ECM 支持程序 配置 Linux 内核 ppp拨号功能测试 ECM 联网 ...

  8. STM32MP157驱动开发——蜂鸣器设备驱动

    STM32MP157驱动开发--蜂鸣器设备驱动 0.相关知识 一.驱动程序开发 1.设备树修改 2.启动程序编写 3.测试程序编写 二.编译及运行测试 0.相关知识   蜂鸣器常用于计算机.打印机.报 ...

  9. STM32MP157驱动开发——platform设备驱动(中)

    STM32MP157驱动开发--platform设备驱动(中) 0.前言 一.platform设备模块--设备信息解析 二.platform驱动模块--加载设备 三.测试App 四.编译及运行 相关文 ...

  10. bdd行为驱动开发 java_行为驱动开发(BDD)如何与领域驱动设计(DDD)结合?

    BDD是从TDD发展过来的,也属于DDD中一种描述业务的无处不在的统一语言,它的描述格式是: As a [Role] I want [Feature] so that [benefit] 用中文的意思 ...

最新文章

  1. Apache Solr schema.xml及solrconfig.xml文件中文注解
  2. matlab字符衔接,matlab字符串连接(多个字符串)的经验,matlab字符串
  3. ajax mysql项目 react_React视频教程来啦,每周末都有前端视频教程学
  4. 网页前端套java数据_【java】网页/移动前端需要的数据,最好一个接口包含所有数据么?...
  5. 三十、开始前端Vue.js的学习之路
  6. Vue——prop双向绑定解决方案
  7. [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
  8. php将get传参解析成数组,php解析url (parse_url) 参数成数组 (parse_str)
  9. Pyecharts绘制22种超实用精美图表
  10. HDU 2457 DNA repair(AC自动机 + DP)题解
  11. 北大青鸟c语言课后答案,北大青鸟C语言实现.ppt
  12. 云计算就业指南是什么 该如何做好自我介绍
  13. 记一次“香山杯”得WP
  14. 2020北京邮电大学计算机学院复试经验分享
  15. Spark中组件Mllib的学习16之分布式行矩阵的四种形式
  16. Vue+nodejs+express天天生鲜超市购物商城平台
  17. mysql_slow_详解MySQL中SlowLog的配置方法(图文)
  18. 报错解决:Before you can run VMware, several modules must be compiled ...
  19. 如何预防AV终结者病毒
  20. 03_项目-基于Docker Swarm的高可用Web集群

热门文章

  1. C#实现倒计时的功能
  2. W3C DOM 事件模型(简述)
  3. 关于补码1.0000的真值为什么是-1的解答
  4. 统计 | 统计功效 | R语言
  5. [1179]hive的lateral view用法
  6. 教程系列 - 用模板快速生成《客户意见反馈表》
  7. crt是什么意思 windows编程_[转]CRT与Windows的关系
  8. 实习笔记:空间分析+地形分析+水文分析
  9. Python开发GUI实战:图片转换素描画工具!
  10. Orecal数据库的基本使用