引入:当我们把一个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读写函数(它并不知道数据的含义,只是给你提供读写方法,而设备驱动知道数据的含义)

USB驱动程序涉及的概念及框架的更多相关文章

  1. USB驱动程序之概念介绍学习笔记

    现象:把USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能 ...

  2. 驱动07.USB驱动程序

    1 了解USB识别的过程 eg:在Windows系统下的一个现象:把手机的USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱 ...

  3. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  4. 【转】Linux设备驱动--块设备(一)之概念和框架

    原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念   块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时 ...

  5. 用DriverStudio开发USB驱动程序

    很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的.但是,现在也有不少人都开始借助一些辅助工具.笔者去年开始接触到DriverStudio,发现它 ...

  6. usb驱动程序小结(六)

    title: usb驱动程序小结 tags: linux date: 2018/12/20/ 17:59:51 toc: true --- usb驱动程序小结 linux中为usb驱动也提供了一套总线 ...

  7. 获取 Google USB 驱动程序

    获取 Google USB 驱动程序       另请参阅 安装 USB 驱动程序 使用硬件设备 使用任何 Google Nexus 设备进行 ADB 调试时,只有 Windows 需要 Google ...

  8. USB2.0学习笔记连载(三):通用USB驱动程序解析

    对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔 ...

  9. USB驱动程序之USB设备驱动程序1简单编写

    1.驱动编写分析 (1)usb总线驱动程序在我们接入USB设备的时候会帮我们构造一个新的usb_device.注册到总线里面来.左边这一块已经帮我们做好了,我们要做的是右边这一块.我们要构造一个usb ...

随机推荐

  1. Salesforce 开发整理(十一) 自定义放大镜查找效果

    有时候在自定义的visualforce页面上,需要实现系统标准的查找样式,当不能使用标准的style的时候,我们只能选择自定义实现,下面分享一个demo,预览效果如下: 实现代码,Visualforc ...

  2. git拆分仓库

    1.git filter-branch拆分当前分支 修改仓库目录,改成拆分后的结构 创建一个当前分支的拷贝分支 git filter-branch -f --tag-name-filter cat - ...

  3. innodb部分内部操作

    tab_node_t* tab_create_graph_create( /*====================*/ dict_table_t* table, /*!< in: table ...

  4. 小i机器人

    //机器人回复 function xiaoirobot($openid, $content) { //定义app $app_key = ""; $app_secret = &quo ...

  5. json data转匿名对象C#

    using Newtonsoft.Json.Linq; 代码如下: static void Main(string[] args) { Console.WriteLine("Test 4.8 ...

  6. Java中调用存储过程

    dao层: import java.util.Map; public interface AppGthdDao { public String gthd(Map map); } mapper层 < ...

  7. Docker底层原理介绍

    1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...

  8. C++分治策略实现二分搜索

    问题描述: 给定已排好序的n个元素组成的数组,现要利用二分搜索算法判断特定元素x是否在该有序数组中. 细节须知: (1)由于可能需要对分治策略实现二分搜索的算法效率进行评估,故使用大量的随机数对算法进 ...

  9. 深入浅出 REST(转)

    文章讲的不错,更具体一些,对实践的指导意义更强 原文:https://www.infoq.cn/article/rest-introduction/ 不知你是否意识到,围绕着什么才是实现异构的应用到应 ...

  10. 《 .NET并发编程实战》阅读指南 - 第7章

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.