zoukankan      html  css  js  c++  java
  • USB驱动程序之概念介绍学习笔记

    现象:把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 主机控制器有 种规格:

    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

  • 相关阅读:
    openfalcon源码分析之transfer
    openfalcon源码分析之hbs
    openfalcon源码分析之Judge
    kong插件官方文档翻译
    Lua 学习
    GO语言heap剖析及利用heap实现优先级队列
    GO语言list剖析
    算法之python创建链表实现cache
    杂项之rabbitmq
    杂项之python利用pycrypto实现RSA
  • 原文地址:https://www.cnblogs.com/alan666/p/8311881.html
Copyright © 2011-2022 走看看