引入:当我们把一个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. [题解向] 正睿Round435

    10.14 Link 唔,这一场打得不好.获得了\(\rm 75pts/300pts\)的得分,但是居然可以获得\(\rm 27/69\)的名次,也不至于不满意--毕竟是真不会233 \(\rm T1 ...

  2. 使用阿里云OSS上传文件

    本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...

  3. Java非侵入式API接口即文档工具apigcc

    一个非侵入的api编译.收集.Rest文档生成工具.工具通过分析代码和注释,获取文档信息,生成RestDoc文档 前言 程序员一直以来都有一个烦恼,只想写代码,不想写文档.代码就表达了我的思想和灵魂. ...

  4. Vue.js项目中使用iconfont冲突问题解决

    在开发前端项目中,字体图标变得越来越常用.一方面因为它比图片使用起来方便,可以像字体一样修改大小和颜色:另一方面是因为它可以减少请求数量,优化前端性能. iconfont的使用方法很简单,主要由三种引 ...

  5. debian系统配置

    使用腾讯docker源 sudo sed -i 's/deb.debian.org/mirrors.cloud.tencent.com/g' /etc/apt/sources.list sudo se ...

  6. Python之threading多线程,多进程

    1.threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) ...

  7. Unity调用windows系统dialog 选择文件夹

    #region 调用windows系统dialog 选择文件夹 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public ...

  8. 使用spring jpa hibernate框架时报错:javax.validation.UnexpectedTypeException: HV000030

    错误信息: [#%&*^]20190521121942:497.!react:all.,RctJobExecutor-1#D9AA5167921A464CA9DDA14943545426%NA ...

  9. nginx报错111: Connection refused

    最近遇到了nginx疯狂抛错,access.log一天一共5W多条,但error.log中有大概9K多条,基本都是111: Connection refused,这到底是为什么呢? 从日志看起 我们还 ...

  10. select into 与 insert into select

    1.select into select into 语句把一个表中的数据插入到另一个表中. 不需要创建临时表,在运行过程中自动创建. 基本语法: select * into #table_Name f ...