• 和菜鸟一起学linux总线驱动之初识USB设备枚举


           最近要写SDKsmartcard又没有什么进展,事情还真是多啊,对于一个本科应届毕业生,是不是要求高了点,哈哈,就喜欢严,那样提高才快,不过很多时候,忙得自己连思考的时间也没有多少了,也没有实行自己的计划,很多很多没有做。想想确实应该放弃一些事情了,那样的话,至少可以再某些方面做得很好,恩,加油就行。趁着周末之际,把所有模块的SDK都小整理了下,还是把上次没有分析完的USB的枚举给分析下吧。

           每次当插上鼠标或者U盘的时候,电脑是怎么知道是什么设备的呢?那就需要枚举了,枚举,其实就是让HOST认识这个USB涉笔,并且为该设备准备资源,建立好主机和设备之间的数据传递机制。

           USB设备枚举过程可以分为8个部分:

    1、  获取设备描述符

    2、  复位

    3、  设置地址

    4、  再次获取设备描述符

    5、  获取配置描述符

    6、  获取接口、端点描述符

    7、  获取字符串描述符

    8、  选择设备配置

     

    先看一下上篇文章看的USB鼠标枚举的包吧。那样更加明显易懂。

    把枚举过程和这幅图对比下,是不是一样呢?好了,接下去就一部分一部分慢慢分析吧。

    1、  获取设备描述符

    这次传输方式是控制传输,她由5个事务组成,分别是SETUPINININOUT

    首先看第一个事务即SETUP事务的data数据,根据其数据再根据usb协议中的setup协议可以知道其含义了。下面按照自己来看协议

    a80,她表示的就是设备要发送数据给主机。

    b06就是获取描述符。

    c00 01,和bRequest对应,就是

                DEVICE,就是设备的描述符。

    d00 00zero

    e40 00,设备描述符长度

     

    然后看IN包,就是设备把她的设备描述符发给了主机。

     

     

     

    2、  复位

          

           这个没什么好讲的了。

     

     

    3、  设置地址

           简单分析下,首先是setup事务,根据所发的数据和USB的协议可以知道

    05

    02;

    然后是一个IN事务。

     

     

    4、  再次获取设备描述符

           这个是第2部分是一样的,就不再分析了。

     

     

    5、  获取配置描述符

          

           看第一行就知道了这个是GET_DESCRIPTOR,CONFIGURATION descriptor

    下面还是看下具体的事务吧。

           首先还是SETUP事务了,看数据80 06就可以知道了是设备要发描述符给主机,而02就表示configuration,就是配置描述符了,

           接着就是IN事务,设备给主机发送数据了。具体的数据含义看下图。

           最后就是OUT事务。

     

     

    6、  获取接口、端点描述符

          

     

           还是老方法,看SETUP事务,和上一个一样,是获取配置描述符,这里的配置描述符。

    具体含义,看下面的图就明白了。

     

     

     

     

     

    7、  获取字符串描述符

          

      

         这里就不多做分析了。

     

     

    8、  选择设备配置

          

     

     

           这里,SETUP事务,主要是DEVICE SET_CONFIGURATION

     

           好了,差不多USB的枚举就是这么回事了。好久没运动了,去跑步去,锻炼下身体。好歹是革命的本钱嘛。。。。。。

     

  • 相关阅读:
    with
    网编
    选课新系统大作业
    网络编程

    知识点
    Python
    学生选课大作业
    理解position与anchorPoint[转]
    毛玻璃效果的简单使用
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300052.html
Copyright © 2020-2023  润新知