USB 枚举

发布者:SereneNature最新更新时间:2016-08-25 来源: eefocus关键字:USB  枚举 手机看文章 扫描二维码
随时随地手机看文章

一,概述
现在很多的主控上都带有USB的功能,但是对于初学者来说,这方面应用还是比较棘手,因为usb的不但固件程序需要编写,PC端的驱动也要编写,而且驱动写好了还要写个上位机才能看出效果。这样调试起来十分困难,建议从USB的键盘,鼠标开始做,了解清楚了,再做自己的协议就比较简单了。
USB的概念历史啥的这里就不说了。我们先不管具体的数据包格式,这一节先从整个包的层面上简单的说,过程是这样的,


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

 

(枚举 :是 USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含该子类定义的特殊请求)。通过枚举 HOST 可以获得设备的基本描述信息,如支持的 USB 版本、PID、VID、设备分类 (Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力 (最大包长度)。HOST 根据 PID 和 VID 加载设备驱动程序,并对设备进行合适的配置。只有经过枚举的设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取 100mA 的电流。)


---------------------------------------枚举过程------------------------------------------------------------
2) 主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚举过程。因为刚刚插入的设备没有分配地址,就用默认地址0,首先发送一个Get_deor(获取设备描述符)指令包,设备接到包后就开始解析包(其实就是你在固件程序里判断处理) ,然后按固定格式返回自己设备的设备描述符,这一步主要是主机知道你的USB设备的基础属性,比如支持的传输数据长度,电流负荷多少,支持那个USB版本,以及以后方便电脑找驱动的PID,VID。
3) 这时候主机知道你(你做的设备,简称你吧)的数据长度还有电流大小后,下一步就是给你分配一个属于你的地址。
4) 给你一个地址后就开始询问你的具体配置。首先发送一个试探性的设备配置请求Get_configuration(要求固定返回9个设备配置字),你接到后就开始发送9字节的设备配置字,其中包括你的配置字的总长度,这样主机就知道你的配置到底有多长,然后再发一次设备配置请求,这时你就开始上传所有的配置字。这个时侯主机就已经很明白你的工作方式就各种特性,然后就可以正常工作了
5) 如果你在前面的某些配置(以后章节详细说明)要求要说明自己的名字什么的,这里还要上传字符串描述符。
6) 如果是鼠标或者键盘还要上传报告描述符

 

 


---------------------------------------正常数据阶段------------------------------------------------------
7) 这个时侯你已经被主机正式接受并且注册了,你可以通过自己写测驱动或通用驱动与电脑进行通讯了。

以上是简单的描述,详细的后面章节再做介绍,学习一个东西关键是首先要知道这个东西是什么,简单的工作原理。对于USB的工作我这里做个比方,
主机好比一个公司,你就是USB设备,要进入公司首先要面试(枚举),你到了面试现场(第一次插入设备),面试官首先了解到你的外表,性别已经你要应聘的岗位(设备描述符),然后给你一个号,以后就开始按号叫人,当你被叫到就开始问你的专业知识,性格等(配置描述符),如果你比较合适(通过了枚举)你就会录取了,并且注册一个你的信息到公司(驱动安装,并且写入注册表)。等你下次来公司,只要把工号(PID,VID)报上,就知道是你来了。



备注:只是在第一步,不是由主机轮回查询是否有设备插入,这个任务是由HUB完成,HUB查到有设备插入后保存这个信息,在主机的询问下再报告新设备的插入。
关键字:USB  枚举 引用地址:USB 枚举

上一篇:MP3专用特殊USB数据线的改法图解
下一篇: 用USB充电和用充电器充电有什么不同?

推荐阅读最新更新时间:2024-05-03 00:36

笔记本连接高功耗USB设备如USB硬盘的问题
现在很多笔记本直接连接外接大功耗USB设备都无法正常使用。最典型常用的是USB硬盘。 这是因为兼顾节能方面的要求,笔记本电脑的USB接口被设计成为仅保证支持一些低功耗设备如鼠标、键盘、游戏控制器等。USB总线标准规定,USB接口为设备提供额定电压+5V的直流电源供应,额定工作电流不大于500毫安。USB移动硬盘一般使用笔记本专用硬盘,正常工作电流都远大于500毫安(只要取出硬盘,可以在硬盘盘体的标签上读到该硬盘工作参数),在USB接口额定输出功率无法改变的情况下,接入超出额定功率的设备将导致USB总线工作电压被拉低(参考公式P=U×I)进而造成USB总线传输的数据发生紊乱,最终结果就是设备无法正常工作。同时,USB接口电路长时间处于
[嵌入式]
基于DDS与USB技术的通信对抗教学演示系统中硬件的设计与实现
1概 述 扩展频谱通信具有抗干扰能力强、隐蔽性好等优点,已成为通信对抗与反对抗中最重要的技术手段,在军事通信中日益受到重视,跳频电台就是扩频通信在军事领域中的重要应用。在通信对抗中如何有效地对抗跳频电台是目前的一个热点问题。在通信对抗的教学中为了以实验的形式向人们展示跳频通信中干扰与抗干扰的原理,并能对跳频通信进行侦察和实施多种干扰的效果进行比较,为科研中寻找对跳频通信的最有效干扰方式提供有效的数据和参考,本文给出了一种基于DDS与USB技术的通信对抗教学演示系统中硬件方案的设计与实现。 2 系统整体结构设计及原理说明 系统主要由控制计算机、发射机、电子侦察模块、电子干扰模块和接收机等五部分组成,如图1所示。计算机主要是用于
[嵌入式]
USB的NRZI编码
1.网络上一个比较详细的解释 首先,USB 的数据是串行发送的,就像 UART、I2C、SPI 等等,连续的01 信号只通过一根数据线发给接受者。 但是因为发送者和接收者运行的频率不一样,信号的同步就是个问题,比如,接受者接收到了一个持续 一段时间的低电平,无法得知这究竟是代表了5个0 还是1000个0。 一个解决办法,就是在传输数据信号的同时,附加一个时钟信号,用来同步两端的传输,接受者在时钟 信号的辅助下对数据信号采样,就可以正确解析出发送的数据了,比如 I2C 就是这样做的,SDA 来传 输数据,SCL 来传输同步时钟: 虽然这样解决了问题,但是却需要附加一根时钟信号线来传输时钟。有没有不需要附加的时钟信号,也 能保持两
[嵌入式]
嵌入式Linux下高速USB主控制器的设计与实现
  在嵌入式系统的发展历程中,Linux操作系统的源码公开,结构清晰,功能强大,可移植性强等特点使其在嵌入式领域应用越来越广泛。USB接口的热插拔,即插即用,数据传输可靠,扩展方便,成本低等优点使其逐渐成为嵌入式系统的必备接口之一。随着嵌入式系统应用领域的不断扩展,人们对其性能的要求不断提高,特别是USB设备的读写速度受到越来越多的关注。然而。目前多数嵌入式系统仅支持基础的USB低速或全速外设,不能满足人们对高速数据传输的要求。为此,基于AT91RM9200平台完成了高速USB的硬件设计和Linux操作系统下主机端驱动程序的开发。    1 高速USB硬件接口设计   目前的嵌入式系统设计中,USB接口的外扩主要采用微处理
[嵌入式]
STM32F USB中断分析
有时候总在想,怎么样的学习才是最好的?就像学习USB,到底只要学到会应用就可以了,还是要深入到协议内容和驱动底层呢?经常对别人说自己会某某东西,其实自己也只是一知半解的,只会些应用去糊弄别人。于是总在安慰自己:我只要会做些应用就可以了!!! 下面介绍STM32 USB工程的usb_endp.c文件和usb_istr.c两个文件。 首先是usb_endp.c,这个文件很简单,就是定义了结果几个端点输入输出函数,我的工程只有。 uint8_t USB_Receive_Buffer ; //端点接收数据的缓存 REPORT_COUNT=64 uint8_t USB_Send_Buffer ; //端点发送数据的缓存 volatile
[单片机]
USB安全钥在电子商务中的应用
传统的身份认证 在目前的电子商务模式中,身份认证大致可以通过两种方法来实现:一是交易双方通过协商选定一个协议,用来在网络上确认对方的身份。最简单的方法便是使用密码(Password)。二是交易双方请求第三方机构代为确定对方的身份。这个第三方机构必须具有足够的权威性。各种商业银行都可以充当这一角色。 不论采用何种方式,安全性和方便性都是不可缺少的。但是在目前的电子商务模式中,这两项要求都没有得到很好的满足。 国内的网络终端大多是PC机,运行WINDOWS操作系统。然而WINDOWS系统并不是一个足够安全的系统,系统级的缺陷使得在它上面运行的应用软件都可以被很容易地跟踪、破解。为了克服这一缺点,用户不得不在PC上安装尽可能
[应用]
STM32f429开发中USB读写文件涉及到的库移植
第一步 USB_HID移植(原创 http://blog.csdn.net/xbl1986/article/details/17577685#comments ) ├── STM32_USB_Device_Library USB从设备库 │ │ ├── Class │ │ │ └── hid │ │ │ ├── inc │ │ │ │ └── usbd_hid_core.h │ │ │ └── src │ │ │ └── usbd_hid_core.c │ │ └── Core │ │ ├── inc │ │ │ ├
[单片机]
嵌入式Linux下高速USB主控制器的设计与实现
在嵌入式系统的发展历程中,Linux操作系统的源码公开,结构清晰,功能强大,可移植性强等特点使其在嵌入式领域应用越来越广泛。USB接口的热插拔,即插即用,数据传输可靠,扩展方便,成本低等优点使其逐渐成为嵌入式系统的必备接口之一。随着嵌入式系统应用领域的不断扩展,人们对其性能的要求不断提高,特别是USB设备的读写速度受到越来越多的关注。然而。目前多数嵌入式系统仅支持基础的USB低速或全速外设,不能满足人们对高速数据传输的要求。为此,基于AT91RM9200平台完成了高速USB的硬件设计和Linux操作系统下主机端驱动程序的开发。   1 高速USB硬件接口设计   目前的嵌入式系统设计中,USB接口的外扩主要采用微处理器芯片自带的
[单片机]
嵌入式Linux下高速<font color='red'>USB</font>主控制器的设计与实现
小广播
热门活动
换一批
更多
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved