zoukankan      html  css  js  c++  java
  • 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读写函数(它并不知道数据的含义,只是给你提供读写方法,而设备驱动知道数据的含义)

  • 相关阅读:
    Byteart Retail V3 全新的面向.NET与领域驱动设计的企业应用实践案例
    算法设计和数据结构学习堆排序
    OutputCacheProvider OutputCache的一点点认识
    使用beetle简单地实现高效的http基础服务
    The IoC container
    使用Visual Studio 2010进行UI自动化测试
    PortalBasic Java Web 应用开发框架 v2.6.1(源码、示例及文档)
    发展中的 CSS3
    C#数据结构与算法揭秘十
    Sql Server Profiler跟踪查询
  • 原文地址:https://www.cnblogs.com/-glb/p/11567351.html
Copyright © 2011-2022 走看看