zoukankan      html  css  js  c++  java
  • usb枚举阶段(转载)

    (注:转载自网上)

    【USB】

    1. 不但固件程序需要编写; 
    2. PC端的驱动也要编写;
    3. 而且驱动写好了还要写个上机位才能看出效果;

    这样调试起来十分困难,建议从USB的键盘,鼠标开始做,了解清楚了,再做自己的协议就比较简单了。

     

    ------------------------------------(第一)设备插入-------------------------------------------------------------

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

     

    -----------------------------------(第二)枚举过程(检测到设备插入以后)---------------------------------

    2)   主机这时候只是知道有新的设备插入了,但是不知道插进来个什么东西,所以就开始询问它是什么设备,怎么用,负荷能力怎么样。这个时侯就进入了枚举过程

    步骤1:(设备描述符)

    地址:因为刚刚插入的设备没有分配地址,就用默认地址0;

    主机:首先发送一个Get_deor(获取设备描述符)指令包;

    设备:设备接到包后就开始解析包(其实就是你在固件程序里判断处理),然后按固定格式       返回自己设备的设备描述符

    目的:这一步主要是让主机知道你的USB设备的基础属性,比如支持的传输数据长度,电流      负荷多少,支持那个USB版本,以后方便电脑找驱动的PID,VID。

    步骤2:(配置描述符)

    分配地址:主机知道设备的数据长度和电流大小后,然后就是给设备分配一个属于它的地址;

    主机:给设备一个地址后,就开始询问设备的具体配置(配置描述符)。 首先发送一个试探      性的设备配置请求Get_configuration(要求固定返回9个设备配置字)指令包;

    设备:接到指令包后就开始发送9字节的设备配置字,其中包括设备的配置字的总长度;

    主机:这样主机就知道设备的配置到底有多长,然后再发一次设备配置请求指令包;

    设备:这时设备就开始上传所有的配置字;

    主机:这个时侯主机就已经很明白你的工作方式和各种特性,然后就可以正常工作了;

    目的:配置(以后章节详细说明)要求说明自己的名字什么的,这里还要上传字符串描述符;      如果是鼠标或者键盘还要上传报告描述符。

     

    ----------------------------------------------(第三)正常数据阶段-------------------------------------------------

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

    对于USB的工作我这里做个比方:

         主机好比一个公司,你就是USB设备,要进入公司首先要面试(枚举),你到了面试现场(第一次插入设备),面试官首先了解到你的外表,性别已经你要应聘的岗位(设备描述符),然后给你一个号,以后就开始按号叫人,当你被叫到就开始问你的专业知识,性格等(配置描述符),如果你比较合适(通过了枚举)你就会录取了,并且注册一个你的信息到公司(驱动安装,并且写入注册表)。等你下次来公司,只要把工号(PID,VID)报上,就知道是你来了。

  • 相关阅读:
    UIWindow简单介绍
    关于事件的小结
    iOS事件机制(二)
    iOS事件机制(一)
    深入浅出iOS事件机制
    关于UIBarItem和UINvigationController,UITabBarController关系
    动态加载实例NSSelectorFromString
    iOS-滑动显示广告效果
    自定义的TabBar
    iOS评论页面的简单思路
  • 原文地址:https://www.cnblogs.com/ju-an/p/3261634.html
Copyright © 2011-2022 走看看