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

USB基本波形

USB通过一对差分信号进行数据传输,这对差分信号叫D+和D-,用示波器抓取一段D+和D-的信号,保存成CSV格式,用matplotlib绘制该信号:

分了方便分析,我们将D+和D-分别绘制:

标记数据包(Packet)的组成:

进一步细化数据包(Packet)的内容

USB数据分析

起始帧数据包(FRAMEPACKET)

全速USB会每隔1毫秒发送一包起始帧数据包(FRAME PACKET),由PID,FRAME_NUMBER和CRC三部分:

PID(Packet ID)为数据包标识符,为8位长度,低4位为标识符数值,高4位值为低4位数值按位取反。起始帧数据包对应的PID为1010 0101(最左侧为最高位,下同)

这里需要注意,USB数据流先传输最低字节的最低位,同时按照NRZI方式编码,即(值不变表示数据'1',值发生改变表示数据'0')。

令牌数据包(TOKEN PACKET)

令牌数据包由PID,ADDR,ENDP和CRC四个段组成。一共有三种令牌:

  • IN
  • OUT
  • SETUP

令牌IN对应的PID为0110 1001

令牌OUT对应的PID为1110 0001

令牌SETUP对应的PID为0010 1101

数据包(DATA PACKET)

数据包由PID,PAYLOAD,CRC三个段组成,

DATA1对应的PID为0100 1011

握手包(HANDSHAKE PACKET)

握手包只包含PID段,全速USB一共有3种握手状态

        • ACK

报告数据已经被成功收到。

      • NAK

报告设备临时无法发送或接收数据。也用于在中断事务期间通知主机没有要发送的数据。

      • STALL

设备发现自己处于需要主机干预的状态(端点停止,或者不支持控制管道请求)

ACK状态对应的PID为1101 0010

NACK状态对应的PID为0101 1010

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

[参考资料]

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

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

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

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

    前面的两篇文章介绍和分析了USB的一些基本知识,结合前面的介绍,今天用实例介绍USB的枚举过程. 1 | 概况 硬件基于EK-TMC123GXL开发板,软件是TI提供的USB批量传输的简单例子,在PC ...

  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. usb host和usb device

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

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

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

  7. 读取USB HDD(USB移动硬盘信息)序列号的代码

    读取USB HDD(USB移动硬盘)序列号的代码,型号及分位. 使用Visual Studio 2010编译成功. 代码使用了CrystalDiskInfo中的代码smartata.c中相关代码: 例 ...

  8. STM8学习 无法仿真原因Starting debug session... -> Emulator reset (usb://usb)... ** Connection error (usb://usb): swim error [30200]: st-link connection error

    刚调试程序时,STlink总是连不上,一直提示: Starting debug session...-> Emulator reset (usb://usb)...** Connection e ...

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

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

随机推荐

  1. Python第三周 函数详解

    def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...

  2. table中tr、td标签设置只读,不能修改(readonly属性)

    在不能修改的位置加上代码:onselectstart="return false" οnselect="document.selection.empty()" ...

  3. sigslot之简化版

    1.关于 1.1 基于原版sigslot做了部分修改.原版的信号支持最多支持8个参数,改进后,最多支持1个参数,这样肯定不能满足日常需求,但是,我们可以将信号的一个参数改为类型指针,比如信号定义时的模 ...

  4. codeforce364(div1.C). Beautiful Set

    C. Beautiful Set time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. python-mysql-replication原理分析

    源码地址:https://github.com/noplay/python-mysql-replication 文件解析: ├── binlogstream.py ├── bitmap.py ├── ...

  6. CHARINDEX 用法

    CHARINDEX 返回字符串中指定表达式的起始位置. 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数 expre ...

  7. 【转】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?

    在 GitHub 上混久了,经常听到 Pull Request,在 GitLab 上混久了,则经常 提起 Merge Request ,然而它们之间有不同吗?为什么要用两个不同的名称? 要追溯这两个名 ...

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

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

  9. Proximal Algorithms 5 Parallel and Distributed Algorithms

    目录 问题的结构 consensus 更为一般的情况 Exchange 问题 Global exchange 更为一般的情况 Allocation Proximal Algorithms 这一节,介绍 ...

  10. Spring企业级程序设计 • 【第4章 Spring持久化层和事务管理】

    全部章节   >>>> 本章目录 4.1 配置数据源资源 4.1.1 JdbcTemplate介绍 4.1.2通过ComboPooledDataSource创建数据源 4.1. ...