• USB的传输总是低位在前,高位在后。
  • USB的传输方向:从设备到主机的数据为输入;从主机到设备的数据叫做输出。

1. 包结构

以同步域开始,紧跟着一个包标识符PID(Packet Identifier),最终以包结束符EOP(End of Packet)结束这个包。

  • 同步域

    • 作用:① 通知USB串行接口引擎数据要开始传输;② 同步主机和设备之间的时钟。
    • 格式:① 全速/低速设备的同步域为00000001;② 高速设备的同步域为31个0,后面跟1个1;注意:这是对发送端的要求,接收端在解码时,0的个数可以少于这个数。
  • 包标识符PID
    • 包标识符PID是用来标识一个包的类型。
    • PID共有8位,目前USB协议仅使用4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。
    • 传输的顺序为PID0,PID1,PID2,PID3,...,PID7。
  • 包结束符EOP
    • 全速/高速模式的EOP是一个约为2个数据宽度的SE0;
    • 高速模式的EOP是通过故意的位填充错误实现的。
    • 单端0(SE0):D+和D-同时保持低电平。
    • 单端0的用处:① 包结束;② 复位信号(USB集线器对USB设备的复位操作,就是将总线设置为SE0约10ms)。
    • Q: 如何一个位填充错误是EOP还是传输错误?A: 通过CRC校验,即如果CRC正确,则说明这个位填充是EOP;否则说明传输错误。

2. 包分类

根据包标识符PID的不同,包可以分为四种包:令牌包(token packet, PID1~0为01)、数据包(data packet, PID1~0为11)、握手包(handshake packet, PID1~0为10)、特殊包(special packet, PID1~0为00)。

2.1 令牌包

令牌包用来启动一次USB传输。由于USB是主从结构的拓扑结构,所以所有的数据传输都是主机发起的(唯一的例外是支持远程唤醒的设备能够主动改变总线的状态,让集线器感知到设备的唤醒信号,但是这一过程并不发送数据,只是改变总线的状态)。

令牌包分4种:输出(OUT)、输入(IN)、建立(SETUP)、帧起始(SOF)。

  • 输出令牌包:主机将要向设备发送一个数据包。
  • 输入令牌包:主机将要从设备读取一个数据包。
  • 建立令牌包:与输出令牌包几乎相同,不同之处是建立令牌包只使用DATA0,并且发送到设备的控制端点,设备必须接收建立令牌包。
  • 帧起始令牌包:在每帧(或微帧)开始时发送,并且以广播的形式发送,使得总线上的所有USB全速/高速设备都可以接收到SOF令牌包。
同步域 8位标识符PID 7位地址 4位端点号 5位CRC5校验 EOP

OUT、IN、SETUP令牌包结构图

同步域 8位标识符PID 11位帧号 5位CRC5校验 EOP

SOF令牌包结构图

2.2 数据包

同步域 8位标识符PID 字节0 字节1 字节n 16位CRC16校验 EOP

数据包的结构图

  • 数据包类型不匹配主要发生在握手包。

2.3 握手包

同步域 8位标识符PID EOP

握手包结构图

  • ACK:正确接收数据,并且有足够的空间容纳数据。主机和设备都可以使用ACK来确认,而NAK、STALL、NYET只有设备才能够返回,主机不能使用这些握手包。
  • NAK:① 没有数据需要返回;② 数据接收正确,但是没有足够的空间容纳数据。
  • STALL:设备无法执行这个请求或者设备已挂起。设备返回STALL,需要主机干预才能解除这种STALL状态。
  • NYET:只在USB2.0高速设备输出设备中使用,表示设备本次数据成功接收,但是没有足够的空间来接收下一次的数据。主机在下一次输出数据前,将使用PING令牌包来探测设备是否有足够的空间接收数据,以免浪费不必要的带宽和时间。

2.4 特殊包

暂不介绍。

USB的包结构及包分类的更多相关文章

  1. USB协议-USB的包结构及包的分类

    USB是串行总线,所以数据是一位一位地在数据线上传送的.既然是一位一位地传送,就存在着一个数据位先后的问题.USB使用的是LSB在前的方式,即先出来的是最低位数据,接下来是次低位,最后是最高位(MSB ...

  2. 文档:网络通讯包结构(crc校验,加解密)

    一直想把这个流程整理一下. 包结构: 包 对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到 对(数据内容)进行crc计算而得到 协议号 数据内容的字节长度 ...

  3. 【Java基础】Jar包结构结构分析和操作具体解释

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 一 ...

  4. vue证明题三,vue项目的包结构和配置

    用vue-cli创建的项目带有自动配置好的包结构,包结构都是固定的. 关于详细的解释,网上多得是,只说下最重要的内容 1.vue项目包结构和端口号配置 这里笔者下了个HBuilderX来写代码. 2. ...

  5. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  6. USB2.0协议学习笔记---USB数据包结构

    USB包类型和传输过程  USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...

  7. JDK源码包结构分类

    最近查看JDK源码时,无意间发现几个类在陌生包里:com.sun.*.sun.*.org.*,google了一把总结了下以备他人搜索,如内容有误欢迎指正!   Jre库包含的jar文件(jdk1.6) ...

  8. Node.js入门:包结构

        JavaScript缺少包结构.CommonJS致力于改变这种现状,于是定义了包的结构规范(http://wiki.commonjs.org/wiki/Packages/1.0 ).而NPM的 ...

  9. 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构

    本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...

随机推荐

  1. 面向对象(java菜鸟的课堂笔记)

    类:相同的东西放在一起 分为属性和动作: 把一组或多组事物相同的特性的描述==>类   属性和动作被称为成员: //声明类的属性信息 public class **{ String name: ...

  2. 基于TF-IDF的新闻标签提取

    基于TF-IDF的新闻标签提取 1. 新闻标签 新闻标签是一条新闻的关键字,可以由编辑上传,或者通过机器提取.新闻标签的提取主要用于推荐系统中,所以,提取的准确性影响推荐系统的有效性.同时,对于将标签 ...

  3. File字节流

    1.    File f = new File("文件路径")      注意:相对路径:非web项目的相对都是以项目为起点.(src/a/txt(建议)      绝对路径:f: ...

  4. HTML5 客户端存储数据的两种方式

    HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前,这些都是由 coo ...

  5. python网络爬虫之scrapy 工程创建以及原理介绍

    执行scrapy startproject XXXX的命令,就会在对应的目录下生成工程 在pycharm中打开此工程目录:并在Run中选择Edit Configuration 点击+创建一个Pytho ...

  6. ionic中应用sass

    在学习ionic过程中看到sass,总结了一下基本用法和问题解决办法1.首先需要一个ionic项目,并执行下面的命令ionic start CustomSass blank && cd ...

  7. document事件及例子

    一.关于鼠标事件:onclick:鼠标单击触发 ondbclick:鼠标双击触发 onmouseover:鼠标移上触发 onmouseout:鼠标离开触发 onmousemove:鼠标移动触发 二.关 ...

  8. CSS动画属性性能详细介绍

    CSS动画属性会触发整个页面的重排relayout.重绘repaint.重组recomposite Paint通常是其中最花费性能的,尽可能避免使用触发paint的CSS动画属性,这也是为什么我们推荐 ...

  9. Transparent Application Failover 透明应用切换

    官方文档地址 http://docs.oracle.com/cd/E11882_01/network.112/e41945/advcfg.htm#NETAG455 About Transparent ...

  10. 【Android Developers Training】 51. 序言:打印内容

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...