[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
[参考资料]
- https://www.beyondlogic.org/usbnutshell/usb5.shtml#DeviceDescriptors
- http://www.usbmadesimple.co.uk/ums_5.htm
[USB波形分析] 全速USB波形数据分析(三)的更多相关文章
- [USB波形分析] 全速USB波形数据分析(一)
在之前的文章一次CAN波形分析之旅里,根据示波器采集的波形数据,详细地分析了CAN通信.今天来分析USB数据,还是同样的流程,但是这次使用matplotlib来协助分析. USB基本波形 USB通过一 ...
- [USB波形分析] 全速USB波形数据分析(二)
在上一篇文章全速USB波形数据分析(一)介绍了全速USB的数据包(Packet)的组成,数据的类型等基本知识.这篇文章介绍USB的几种传输方式 事务(Transaction) USB协议定义了三种不同 ...
- USB HOST与 USB OTG的区别及工作原理
在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 转自USB HOST与 ...
- 快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)
一.上模块 二.功能分析 l 芯片:CH340N l 输入接口:USB.TYPE-C l 输出接口:TTL(5V\3.3V\GND\TX\RX) l 指示灯:电源.TX.RX ...
- 【转】Android实战技巧之四十九:Usb通信之USB Host
零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...
- USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】
本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...
- PIC32MZ 通过USB在线升级 -- USB CDC bootloader
了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...
- usb host和usb device
S3C2440的数据手册将USB功能分为两章--usb host和usb device.具体什么意思呢? usb host: 微处理器作为usb主设备,可以挂接U盘之类的从属设备. usb devic ...
- USB C和USB 3.1傻傻分不清?这篇文章可以帮你
USB Type-C接口以及USB 3.1标准的到来,理应为消费者提供更多便利.然而就目前来看,似乎这些新标准非但没有为消费者提供了更好的使用体验,反而带来了诸多隐患.Google的工程师Benson ...
随机推荐
- CF808A Lucky Year 题解
Content 年份中有不超过 \(1\) 个非 \(0\) 数字的年份是幸运年份.现给出当前年份 \(n\),求到下一个幸运年份还要等多久. 数据范围:\(1\leqslant n\leqslant ...
- 再识requests
高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...
- AcWing 466. 回文日期
题目: 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期. 显然:一个日 ...
- SpringBoot项目使用Nacos作为配置中心
前置条件:jdk.SpringBoot项目.Nacos.Linux服务器(可无) 具体版本:jdk11.SpringBoot 2.3.5.RELEASE.Nacos 2.0.3.Centos 6 目标 ...
- C++基础之虚析构函数原理
结论 虚函数表指针 + 虚函数表 共同实现 演示 VS2017(32位) 基类有析虚构函数 一段代码演示 #include <iostream> #include <memory&g ...
- 《Java必须知道的300个问题》读书总结
这本书是在图书馆随便逛的时候找到的书.花了一下午看完了,感觉有用的地方不是很多,大部分都是些概念,并没有太大用途.不过里边有些东西还是可以看一看的,总结如下. Java语言基础 1.表达式3-2.6= ...
- 【LeetCode】950. Reveal Cards In Increasing Order 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟 日期 题目地址:https://leetcod ...
- 【LeetCode】129. Sum Root to Leaf Numbers 解题报告(Python)
[LeetCode]129. Sum Root to Leaf Numbers 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/pr ...
- 「ARC096C」Everything on It
Solution 容斥,钦定 \(i\) 个数 \(\leq 1\) 次. \[Ans=\sum_{i=0}^n (-1)^i\binom{n}{i}F(i) \] 其中 \(F(i)\) 表示有 \ ...
- 编写Java程序,使用Swing事件处理机制实现用户登录和英雄信息显示
返回本章节 返回作业目录 需求说明: 使用Swing事件处理机制实现用户登录和英雄信息显示 实现思路: 创建LoginView类,该类用于显示登录界面,为登录按钮添加ActionListener事件, ...