zoukankan      html  css  js  c++  java
  • [USB波形分析] 全速USB波形数据分析(三)

    前面的两篇文章介绍和分析了USB的一些基本知识,结合前面的介绍,今天用实例介绍USB的枚举过程。

    1 | 概况

    硬件基于EK-TMC123GXL开发板,软件是TI提供的USB批量传输的简单例子,在PC端用命令行通过USB发送字符串,开发板通过USB返回应对的字符串(发送的是大写字母,返回小写字母,反之亦然)

     

    2 | 枚举过程

     由于整个枚举过程很长,现有示波器没法捕获这个枚举过程,改用逻辑分析仪来分析:

    2.1 | 获取描述符(GET_DEVICE_DESCRIPTOR)

    主机发起控制传输的SETUP阶段,地址为0,端点为0

     

     

     

     

    主机发起控制传输的DATA阶段,设备返回设备描述符

     

    对应的解析如下

     

    主机发起控制传输的STATUS阶段

     

    2.2 | 复位(RESET)

    获取完设备描述符以后,支持对设备进行了复位操作

     

    2.3 | 设置地址(SET_ADDRESS)

    主机发起控制传输的SETUP阶段,地址为0,端点为0,设置设备的新地址为1

     

    主机发起控制传输的STATUS阶段,地址为0,端点为0(这里没有DATA阶段)

     

     

     2.4 | 获取设备描述符(GET_DEVICE_DESCRIPTOR)

    主机用新设置的地址(下同),发起获取设备描述符传输,传输过程和返回值和2.1相同

     

    2.5 | 获取配置描述符(GET_CONFIGURATION_DESCRIPTOR)

    主机发起控制传输的SETUP阶段,地址为1,端点为0

    主机发起控制传输的DATA阶段,设备返回配置描述符

    解析如下

    主机发起控制传输的STATUS阶段,地址为1,端点为0

    2.6 | 获取字符串描述符(GET_STRING_DESCRIPTOR)

    主机发起控制传输的SETUP阶段,地址为1,端点为0, 字符串索引为3

     

     

    主机发起控制传输的DATA阶段,设备返回索引为3的字符串描述符

    主机发起控制传输的STATUS阶段,地址为1,端点为0

    2.7 | 获取字符串描述符(GET_STRING_DESCRIPTOR)

    主机发起控制传输的SETUP阶段,地址为1,端点为0, 字符串索引为0

     

     

    主机发起控制传输的DATA阶段,设备返回索引为0的字符串描述符

     

    主机发起控制传输的STATUS阶段,地址为1,端点为0

     2.8 | 获取字符串描述符(GET_STRING_DESCRIPTOR)

    主机发起控制传输的SETUP阶段,地址为1,端点为0, 字符串索引为2,传输过程2.6相同。

     

    2.9 | 再次获取描述符

    主机再次获取设备描述符,配置描述符。发生这种情况的原因可能多种多样,例如堆栈中的不同驱动程序各自出于自身目的询问相同的问题。

     

    2.10 | 获取状态(GET_STATUS)

     主机发起控制传输的SETUP阶段,地址为1,端点为0

    主机发起控制传输的DATA阶段,设备返回状态值

    主机发起控制传输的STATUS阶段,地址为1,端点为0

    2.11 | 设置配置(SET_CONFIGURATION)

    主机发起控制传输的SETUP阶段,地址为1,端点为0

     

     

     

    主机发起控制传输的STATUS阶段,地址为1,端点为0

    3 | 数据过程

    PC端软件发送字符串"HELLO,USB!",将返回字符串"hello,usb!"

     3.1 | 发送(OUT)

    主机发起OUT事务,地址为1,端点为1

     

    3.2 | 接收(IN)

    主机发起IN事务,地址为1,端点为1,设备返回数据

     

    4 | 总结

    枚举是主机用端点0,通过控制传输(Control Transfer),获取设备信息的过程。设备将信息以描述符的形式返回给主机。USB设备都有一个描述符层次结构如下图,

     

     

    -----------------------------------------------------------------------------------END

    [参考资料]

  • 相关阅读:
    [转]K/3加密控制规则
    修改Delphi2009的界面风格
    [转]软件版本号讲解: 什么是Alpha, Beta, RC
    百度程序题目连续数问题
    得到正整数a的16进制表示
    四舍五入至某小数位后返回数字串
    返回相同宽度数字型字符串
    百度程序题目连续数问题 另解
    求二进制表示中1的个数
    六支筷子取其二,恰为一双的概率
  • 原文地址:https://www.cnblogs.com/mr-bike/p/11715243.html
Copyright © 2011-2022 走看看