现象:把USB设备接到PC

1. 右下角弹出"发现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设备接入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有新设备接入。下面的全速设备和低速设备区别在于上拉电阻接在D+还是D-端。在usb
device端,这时就有高速低速设备的区别了,高速设备:d+ 接一个1.5kohm的上拉电阻,d-不接;低速设备则相反。

其他概念:

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总线驱动程序的作用

a. 识别USB设备

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

c. 提供USB读写函数(只是收发送信,不知道信的内容)

USB总线驱动程序已经有了读写函数,能不能让应用程序直接使用这些函数来访问(跨过设备驱动程序)。USB总线驱动程序里面有libusb(里面封装了接口函数)

USB驱动程序框架:





app:   

-------------------------------------------

          USB设备驱动程序      // 知道数据含义

内核 --------------------------------------

          USB总线驱动程序      // 1. 识别, 2. 找到匹配的设备驱动, 3. 提供USB读写函数 (它不知道数据含义)

-------------------------------------------

           USB主机控制器

           UHCI OHCI EHCI

硬件        -----------

              USB设备





UHCI: intel阵营规范(主硬件),     低速(1.5Mbps)/全速(12Mbps)

OHCI: microsoft阵营规范(主软件)  低速/全速

EHCI:            高速(480Mbps)

USB 主机控制器有 3 种规格:

OHCI
(Open Host Controller Interface)、

UHCI (Universal HostController Interface)

EHCI
(Enhanced Host Controller Interface)。

##################################################

OHCI驱动程序用来为非 PC 系统上以及带有 SiS 和 ALi 芯片组的 PC 主板上的 USB 芯片提供支持。

##################################################

UHCI 驱动程序多用来为大多数其他 PC 主板(包括 Intel 和 Via)的的 USB 芯片提供支持。

##################################################

EHCI 由 USB
2.0 规范所提出,

它兼容于 OHCI 和 UHCI。 UHCI 的硬件线路比 OHCI 简单,所以成本较低,但需要较复杂的驱动

程序, CPU 负荷稍重。本节将重点介绍嵌入式系统中常用的 OHCI 主机控制器驱动。

转自:http://blog.csdn.net/qingkongyeyue/article/details/53363090

USB驱动程序之概念介绍学习笔记的更多相关文章

  1. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)

    简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中.接着,在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)一文中举例子说明了如何在 ...

  2. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序(老罗学习笔记2)

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文 ...

  3. 时间序列算法(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)的模型以及需要的概念基础学习笔记梳理

    在做很多与时间序列有关的预测时,比如股票预测,餐厅菜品销量预测时常常会用到时间序列算法,之前在学习这方面的知识时发现这方面的知识讲解不多,所以自己对时间序列算法中的常用概念和模型进行梳理总结(但是为了 ...

  4. 在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)

    这里,我们不会为真实的硬件设备编写内核驱动程序.为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写.想起我们第一次学习程序语 ...

  5. sql优化详细介绍学习笔记

    因为最近在面试,发现sql优化这个方面问的特别特别的多.之前都是零零星星,不够全面的了解一点,刚刚在网上查了一下,从 http://blog.csdn.net/zhushuai1221/article ...

  6. mysql之数据库基本概念(mysql学习笔记一)

    数据库系统   数据库管理系统(DBMS)+数据库(DATABASE)(+数据库管理员) DBS=dbms+db 定义: 大量信息进行管理的高效解决方案,按照数据结构来组织.存储和管理数据的仓库 关系 ...

  7. lua中的闭包概念的学习笔记

    1.闭包的由来: 个人理解,lua中之所以出现闭包的概念,完全是因为lua中允许函数的嵌套定义,并且在内嵌函数中使用了外包函数中定义的局部变量,例如c.c#就不允许函数的嵌套定义(但是允许函数的嵌套调 ...

  8. 2019-11-7:sql注入防御,webshell概念,学习笔记

    sql注入防护GPC,magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特 ...

  9. 2019-4-8 zookeeper集群介绍学习笔记2

    构建高可用ZooKeeper集群原理介绍 ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/ ...

随机推荐

  1. vue.js 源代码学习笔记 ----- 工具方法 perf

    import { inBrowser } from './env' export let mark export let measure if (process.env.NODE_ENV !== 'p ...

  2. NorFlash、NandFlash、eMMC比较区别

    快闪存储器(英语:Flash Memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器.这种科技主要用于一般性数据存储,以及在电脑与其他数字产品间交换传输数据,如储存 ...

  3. objc/runtime.h 相关

    Objecitve-C的重要特性是Runtime(运行时),在Interacting with the Runtime(交互运行)中,运行时函数部分,苹果给出了/usr/lib/libobjc.A.d ...

  4. SQL Server 批量插入数据

    请看代码: 创建表值参数类型: 请看代码:

  5. Uncaught TypeError: jQuery.i18n.browserLang is not a function

    /********************************************************************* * Uncaught TypeError: jQuery. ...

  6. JavaScript动态加载js文件

    /********************************************************************* * JavaScript动态加载js文件 * 说明: * ...

  7. Java项目中使用Log4J

    Log4J下载 官网:http://logging.apache.org/log4j/ Log4J 1.2下载地址:http://logging.apache.org/log4j/1.2/downlo ...

  8. VS2013 tips

    1.创建一个connection时会自动产生一个localdb数据库文件,可以通过Server Explorer窗口查看这个localDB,注意,是Server Explorer窗口,而不是SQL S ...

  9. 关于C++一些面试题目的总结

    众所周知,在找工作时笔试题目往往对C++有大量考察,现在我们总结一些C++中比较重要而且可能会考到的知识. 1.判断一下A,B,C,D四个表达式是否正确. int a = 4: A:a += (a + ...

  10. 关于掌握C#的内存堆栈概念

    很多时候,我们使用C#语言书写业务逻辑时,并不会太多地主动考虑到内存的占用和分配问题,但编的程序多了,就总会遇到一些性能问题.提到"性能"二字,就不得不考虑CPU和内存,而提到内存 ...