初涉USB,初学者USB入门总结(1)枚举

[复制链接]
 楼主| arthur0561 发表于 2009-2-18 16:31 | 显示全部楼层 |阅读模式
一,概述<br />现在很多的主控上都带有USB的功能,但是对于初学者来说,这方面应用还是比较棘手,因为usb的不但固件程序需要编写,PC端的驱动也要编写,而且驱动写好了还要写个上位机才能看出效果。这样调试起来十分困难,建议从USB的键盘,鼠标开始做,了解清楚了,再做自己的协议就比较简单了。<br />USB的概念历史啥的这里就不说了。我们先不管具体的数据包格式,这一节先从整个包的层面上简单的说,过程是这样的,<br />---------------------------------------设备插入-------------------------------------------------------------<br />1)&nbsp;&nbsp;&nbsp;&nbsp;主机会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设置接入。主机等待100ms后发出复位请求。设备接到复位请求后将产生一个外部中断信号。<br />---------------------------------------枚举过程------------------------------------------------------------<br />2)&nbsp;&nbsp;&nbsp;&nbsp;主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚举过程。因为刚刚插入的设备没有分配地址,就用默认地址0,首先发送一个Get_descriptor(获取设备描述符)指令包,设备接到包后就开始解析包(其实就是你在固件程序里判断处理)&nbsp;,然后按固定格式返回自己设备的设备描述符,这一步主要是主机知道你的USB设备的基础属性,比如支持的传输数据长度,电流负荷多少,支持那个USB版本,以及以后方便电脑找驱动的PID,VID。<br />3)&nbsp;&nbsp;&nbsp;&nbsp;这时候主机知道你(你做的设备,简称你吧)的数据长度还有电流大小后,下一步就是给你分配一个属于你的地址。<br />4)&nbsp;&nbsp;&nbsp;&nbsp;给你一个地址后就开始询问你的具体配置。首先发送一个试探性的设备配置请求Get_configuration(要求固定返回9个设备配置字),你接到后就开始发送9字节的设备配置字,其中包括你的配置字的总长度,这样主机就知道你的配置到底有多长,然后再发一次设备配置请求,这时你就开始上传所有的配置字。这个时侯主机就已经很明白你的工作方式就各种特性,然后就可以正常工作了<br />5)&nbsp;&nbsp;&nbsp;&nbsp;如果你在前面的某些配置(以后章节详细说明)要求要说明自己的名字什么的,这里还要上传字符串描述符。<br />6)&nbsp;&nbsp;&nbsp;&nbsp;如果是鼠标或者键盘还要上传报告描述符<br />---------------------------------------正常数据阶段------------------------------------------------------<br />7)&nbsp;&nbsp;&nbsp;&nbsp;这个时侯你已经被主机正式接受并且注册了,你可以通过自己写测驱动或通用驱动与电脑进行通讯了。<br /><br />以上是简单的描述,详细的后面章节再做介绍,学习一个东西关键是首先要知道这个东西是什么,简单的工作原理。对于USB的工作我这里做个比方,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主机好比一个公司,你就是USB设备,要进入公司首先要面试(枚举),你到了面试现场(第一次插入设备),面试官首先了解到你的外表,性别已经你要应聘的岗位(设备描述符),然后给你一个号,以后就开始按号叫人,当你被叫到就开始问你的专业知识,性格等(配置描述符),如果你比较合适(通过了枚举)你就会录取了,并且注册一个你的信息到公司(驱动安装,并且写入注册表)。等你下次来公司,只要把工号(PID,VID)报上,就知道是你来了。<br />

评分

参与人数 1威望 +1 收起 理由
lr22409043 + 1

查看全部评分

computer00 发表于 2009-2-18 16:38 | 显示全部楼层

不错,奖励一条裤子~~~~~

  
 楼主| arthur0561 发表于 2009-2-18 16:39 | 显示全部楼层

感谢圈圈

荣幸荣幸啊,还是看圈圈的例程学习的呀,哈哈,支持圈圈
skyfight 发表于 2009-2-18 17:24 | 显示全部楼层

蛮形象的

不错啊呵呵&nbsp;
平常人 发表于 2009-2-18 18:36 | 显示全部楼层

恩,差不多是这个意思

只是在第一步,不是由主机轮回查询是否有设备插入,这个任务是由HUB完成,HUB查到有设备插入后保存这个信息,在主机的询问下再报告新设备的插入。
箫笑 发表于 2009-2-18 21:14 | 显示全部楼层

不错,很形象

很不错,我也刚开始看USB。
sz_kd 发表于 2009-2-18 21:29 | 显示全部楼层

呵呵,很形象,顶

  
lypd96 发表于 2009-2-23 14:03 | 显示全部楼层

RE:

写的不错,我喜欢这样的描述,期待下篇
cjr82123 发表于 2009-2-24 23:13 | 显示全部楼层

不错!好形象!

  
superhh 发表于 2009-2-25 11:31 | 显示全部楼层

一起学习

留个名,以后好跟踪,呵呵
essencezj 发表于 2009-2-26 09:27 | 显示全部楼层

写的很好

写的很形象,参照USB固件驱动理解起来如行云流水啊!
binghe167 发表于 2009-2-28 23:14 | 显示全部楼层

不错,学习了

numlong 发表于 2009-3-1 16:21 | 显示全部楼层
clizhi 发表于 2009-3-1 20:37 | 显示全部楼层

学习,不错啊

学习,不错啊,有时间请继续
andyrulf 发表于 2009-3-2 13:00 | 显示全部楼层

初涉USB,初学者USB入门总结(1)枚举

顶起啊,我正好做毕设,需要恶补这方面的知识
秋叶 发表于 2009-3-2 16:00 | 显示全部楼层

写得好

这位哥们写得好,我希望你能请一个USB的整个教程,一下就能普及一大堆人.太通俗易懂了.
 楼主| arthur0561 发表于 2009-3-3 09:33 | 显示全部楼层

谢谢支持

呵呵,谢谢大家支持,我也是刚学不久,深知USB的很多资料都差不多,学起来比较痛苦,所以这里写一下自己的学习感受。
酒剑愁 发表于 2009-3-3 17:58 | 显示全部楼层

谢谢支持 -

freejoe 发表于 2009-3-5 09:51 | 显示全部楼层

写的不错,我喜欢这样的描述,期待下篇

  
wyw831111 发表于 2009-3-10 18:54 | 显示全部楼层

论坛

good
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

84

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部

25

主题

84

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部