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读写函数(它并不知道数据的含义,只是给你提供读写方法,而设备驱动知道数据的含义)
USB驱动程序涉及的概念及框架的更多相关文章
- USB驱动程序之概念介绍学习笔记
现象:把USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能 ...
- 驱动07.USB驱动程序
1 了解USB识别的过程 eg:在Windows系统下的一个现象:把手机的USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱 ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- 【转】Linux设备驱动--块设备(一)之概念和框架
原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时 ...
- 用DriverStudio开发USB驱动程序
很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的.但是,现在也有不少人都开始借助一些辅助工具.笔者去年开始接触到DriverStudio,发现它 ...
- usb驱动程序小结(六)
title: usb驱动程序小结 tags: linux date: 2018/12/20/ 17:59:51 toc: true --- usb驱动程序小结 linux中为usb驱动也提供了一套总线 ...
- 获取 Google USB 驱动程序
获取 Google USB 驱动程序 另请参阅 安装 USB 驱动程序 使用硬件设备 使用任何 Google Nexus 设备进行 ADB 调试时,只有 Windows 需要 Google ...
- USB2.0学习笔记连载(三):通用USB驱动程序解析
对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔 ...
- USB驱动程序之USB设备驱动程序1简单编写
1.驱动编写分析 (1)usb总线驱动程序在我们接入USB设备的时候会帮我们构造一个新的usb_device.注册到总线里面来.左边这一块已经帮我们做好了,我们要做的是右边这一块.我们要构造一个usb ...
随机推荐
- 4,VS常见问题解决(一闪而过、等问题)不断更新
当然入门学c可以用VS,但是深入就不应该用VS(MSVC)编译器了,毕竟VS2017还没有完全支持C99(这个从VS2017没有实现变长数组可见) 但是想看c源码,还是 1. 推荐用 *nix系统 2 ...
- 获取oracle中某张表的各个字段名称
select column_name from all_tab_columns where table_name='AT2_SSIS_CHNDB_CLIENT_INFO'
- 阿里巴巴 Java 开发手册 1.4.0
一.编程规约(一) 命名风格1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $name / name_ / name$ ...
- redis-安装卸载
1.安装service服务 redis-server --service-install [配置文件位置,如:redis.conf] (--service-name 服务名称) 2.启动service ...
- 使用Shell上传/下载文件
来源:https://www.cnblogs.com/pcyy/p/7568820.html 1,安装lrzsz工具包 yum install lrzsz 2,安装完成后 输入rz选择文件进行上传
- 100教程-100jc.cn
个人编程笔记网站(持续更新) http://100jc.cn
- asp.net core 2.1 容器中使用 System.Drawing.Common 的问题
- QT+FFMPEG实现视频播放
开发环境:MinGW+QT5.9+FFMPEG20190212 一.开发环境搭建 FFMPEG的开发环境部署比如容易,在官网下载库文件,然后在QT里面指定路径,把相关dll文件放到exe目录下就可以了 ...
- python之lambda、filter、map、reduce的用法说明(基于python2)
python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...
- Laravel框架中Echo的使用过程
今天的这篇文章中给大家分享关于laravel框架中echo的使用,文章的内容是一步一步来的,用了16步走完一个过程,过程很清晰,希望可以帮助到有需要的朋友吧.话不多说,直接看内容.官方文档推荐使用 P ...