前面的两篇文章介绍和分析了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

[参考资料]

[USB波形分析] 全速USB波形数据分析(三)的更多相关文章

  1. [USB波形分析] 全速USB波形数据分析(一)

    在之前的文章一次CAN波形分析之旅里,根据示波器采集的波形数据,详细地分析了CAN通信.今天来分析USB数据,还是同样的流程,但是这次使用matplotlib来协助分析. USB基本波形 USB通过一 ...

  2. [USB波形分析] 全速USB波形数据分析(二)

    在上一篇文章全速USB波形数据分析(一)介绍了全速USB的数据包(Packet)的组成,数据的类型等基本知识.这篇文章介绍USB的几种传输方式 事务(Transaction) USB协议定义了三种不同 ...

  3. USB HOST与 USB OTG的区别及工作原理

    在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 转自USB HOST与 ...

  4. 快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)

    一.上模块          二.功能分析 l  芯片:CH340N l  输入接口:USB.TYPE-C l  输出接口:TTL(5V\3.3V\GND\TX\RX) l  指示灯:电源.TX.RX ...

  5. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  6. USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】

    本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...

  7. PIC32MZ 通过USB在线升级 -- USB CDC bootloader

    了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...

  8. usb host和usb device

    S3C2440的数据手册将USB功能分为两章--usb host和usb device.具体什么意思呢? usb host: 微处理器作为usb主设备,可以挂接U盘之类的从属设备. usb devic ...

  9. USB C和USB 3.1傻傻分不清?这篇文章可以帮你

    USB Type-C接口以及USB 3.1标准的到来,理应为消费者提供更多便利.然而就目前来看,似乎这些新标准非但没有为消费者提供了更好的使用体验,反而带来了诸多隐患.Google的工程师Benson ...

随机推荐

  1. Kafka从入门到放弃(三)—— 详说消费者

    之前介绍了Kafka以及生产者,包括它的一些特性和参数,这回写一下消费者. 之前没看得可以点击链接阅读. Kafka从入门到放弃(一) -- 初识Kafka Kafka从入门到放弃(二) -- 详说生 ...

  2. CF34A Reconnaissance 2 题解

    Content 有 \(n\) 士兵站成一个环,第 \(i\) 个士兵的身高为 \(h_i\),试求两个士兵身高差最小的两个人的编号,如果有多组解,输出任意一组即可. 数据范围:\(2\leqslan ...

  3. CF1473B String LCM 题解

    Content 如果一个字符串 \(s\) 由若干个字符串 \(t\) 拼接而成,则我们说 \(s\) 能被 \(t\) 整除.定义 \(s_1,s_2\) 的最短公倍串为可以同时被 \(s_1,s_ ...

  4. 【LeetCode】5686. 移动所有球到每个盒子所需的最小操作数 Minimum Number of Operations to Move All Balls to Each Box

    作者: 负雪明烛 id: fuxuemingzhu 公众号:负雪明烛 本文关键词:LeetCode,力扣,算法,算法题,交替合并字符串,Merge Strings Alternately,刷题群 目录 ...

  5. 【.NET 遇上 GraphQL】 ChilliCream 平台介绍

    ChilliCream ChilliCream 是一个开源免费的 GraphQL 平台, 提供了构建.管理, 和访问 GraphQL API 的端到端的解决方案. https://chillicrea ...

  6. Python 英语单词本

    python pymysql re requests socket库的简单运用 要考试了,这里用所学的知识做一个实例 pymysql库 这个库是用来连接数据库的,使用数据库语句在python里创建表和 ...

  7. ZOJ 3785:What day is that day?(数论)

    What day is that day? Time Limit: 2 Seconds Memory Limit: 65536 KB It's Saturday today, what day is ...

  8. 【python】PyQt5 QAction 添加点击事件

    def test(): #your function ui.yourQActionName.triggered.connect(lambda:test()) #添加lambda: 就不报错了

  9. 设置div背景透明的两种方法

    实现div背景透明的两种方法 1.使用opacity属性 background-color:#000; opacity: 0.5; 这样做可以设置div内部所以区域的透明度,但是也会影响里面的文字,效 ...

  10. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 常见的分布式事务解决方案 基于 MQ 实现的分布式事务 本地消息表-最终一致性 MQ事务-最终一致性 RocketMQ中如何处理事务 Kafka中如 ...