USB的工做原理(转载)

本文只有部份内容,请到一牛网阅读全文:
http://www.16rd.com/blog-10894-2923.html
html

USB的工做原理及数据包格式  一 概述 对于USB的工做我这里作个比方,主机比如一个公司,你就是USB设备,要进入公司首先要面试(枚 举),你到了面试现场(第一次插入设备),面试官首先了解到你的外表,性别已经你要应聘的岗位(设备描述符),而后给你一个号,之后就开始按号叫人,当你 被叫到就开始问你的专业知识,性格等(配置描述符),若是你比较合适(经过了枚举)你就会录取了,而且注册一个你的信息到公司(驱动安装,而且写入注册 表)。等你下次来公司,只要把工号(PID,VID)报上,就知道是你来了。 USB的概念历史啥的这里就不说了。咱们先无论具体的数据包格式,这一节先 从整个包的层面上简单的说,过程是这样的,  面试

设备插入 学习

1)主机会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设置接入。主机等待100ms后发出复位请求。设备接到复位请求后将产生一个外部中断信号。  .net

枚举过程 htm

2)主机这时候只是知道有新的设备插入了,可是不知道插进来个什么东西,因此就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚 举过程。由于刚刚插入的设备没有分配地址,就用默认地址0,首先发送一个Get_descriptor(获取设备描述符)指令包,设备接到包后就开始解析 包(其实就是你在固件程序里判断处理) ,而后按固定格式返回本身设备的设备描述符,这一步主要是主机知道你的USB设备的基础属性,好比支持的传输数据 长度,电流负荷多少,支持那个USB版本,以及之后方便电脑找驱动的PID,VID。blog

 3) 这时候主机知道你(你作的设备,简称你吧)的数据长度还有电流大小后,下一步就是给你分配一个属于你的地址。资源

 4) 给你一个地址后就开始询问你的具体配置。首先发送一个试探性的设备配置请求Get_configuration(要求固定返回9个设备配置 字),你接到后就开始发送9字节的设备配置字,其中包括你的配置字的总长度,这样主机就知道你的配置到底有多长,而后再发一次设备配置请求,这时你就开始 上传全部的配置字。这个时侯主机就已经很明白你的工做方式最全最热最专业的文档类资源,文库一网打尽 就各类特性,而后就能够正常工做了 文档

5) 若是你在前面的某些配置(之后章节详细说明)要求要说明本身的名字什么的,这里还要上传字符串描述符。字符串

 6) 若是是鼠标或者键盘还要上传报告描述符  正常数据阶段 get

7) 这个时侯你已经被主机正式接受而且注册了,你能够经过本身写测驱动或通用驱动与电脑进行通信了。   以上是简单的描述,详细的后面章节再作 介绍,学习一个东西关键是首先要知道这个东西是什么,简单的工做原理。 对于USB传输大致有个概念,下一步就来看看到底USB上传的什么东西,以什么格 式传数据,先不涉及端点的概念。  USB数据格式 各类总线的数据传输都是以固定的层次协议进行的,USB固然也不例外。

所谓的层次也只是个抽象的概念罢了,就是表达一种依附关系,上层要依赖与底层,上层以底层为基础,上层只须要关心本身的东西就好了,若是你还不明 白,那就继续看,学习一个东西不可能一两句话说的明白一个点,须要全面了解后才能清楚各个点。 要实现两个机器(机器的范围比较广,能够是电脑,交换机, 单片机)的通讯老是要有一个载体才能够,对于机器固然是电平高低为载体,具体的说机器甲要告诉机器乙一件事情(好比说一条指令),那么机器甲能够经过一根 线(串行数据总线)连到机器乙的一个IO口上,甲发送一个个的高低电平,乙固定时间检测本身的这个IO口,而后逐个记录下放到本身的缓冲里,这样乙就收到 甲送的数据了。

本文只有部份内容,请到一牛网阅读全文:
http://www.16rd.com/blog-8691-2920.html

转载于:https://my.oschina.net/cy2/blog/719659