USB理论学习之四-----USB数据通信结构

2019-04-13 15:51发布

一、协议简介 1.主要内容: USB整体通信模型:星型拓扑(以USB主机为核心,建立USB主机与USB设备之间的数据通信),机械层,电气层; USB数据通信协议:以差模串行信号为载体传送二进制代码来传输信号;数据包作为最基本的完整信息单元,包含了一系列数据信息; 软硬件结构:包括主机、Hub与设备架构; 主机与设备通信流程、步骤; 软硬件设计的方法等 2.结构概况 包:令牌包、握手包、数据包 域:同步序列域、包标识域、地址域、端点域、帧号域、数据域、CRC校验域 以包为基础,USB定义了四种传输类型:控制传输、中断传输、批量传输和同步传输   3.二进制数中位的发送顺序 大端:高地址存储低字节,低地址存储高字节 小端:小小大大 USB一般是首先发送LSB,然后发送近邻的下一位,最后发送MSB,即是大端发送 二、域 1、同步域SYNC
  • 用于本地时钟与输入信号的同步,代表一个包的起始;
  • 长度为8位,最后两个位为标志位,标明标志域PID的开始;
  • 它的数值固定为00000001;
  • 同步域位于每个包的最开始处
  2、标识域PID
  • 位于同步域的后面,作用时标明包的类型和格式,并作为包的检测手段的一种;
  • 由于同步域是由硬件来处理的,所有USB软件机制最先收到并处理的是标识域;
  • USB主机和设备都要首先对收到的标识域进行解码,如果出现错误或是该标识域指明的类型或方向不被支持,那么这个包就会被忽略;
  • 标识域有4位标识符加上这四位的反码组成(由此知道USB可以定义的包的类型总共有16种);
  3、地址域ADDR
  • 存放设备在主机上的地址,具有唯一性,并且地址由主机分配
  • 地址域由7位二进制位组成
  • 明显,最大地址容量为128个,地址0000000命名为零地址,是任何一个设备第一次连接到主机时在主机配置、枚举前的缺省地址,因此也知道一个主机最多能连接127个设备的原因
  4、端点域ENDP(也叫端点号)
  • 从硬件的角度,端点其实就是一系列实际的物理数据缓冲区;
  • 发送和接收的数据都放在这里;
  • 每一种传输方式都有特定的端点;
  • 端点一般都由USB接口芯片来提供;
  • 端点域由四位二进制数组成,所有每个USB设备可以有16个端点,但是有特殊的情况,如低速设备只能有0和1两个端点;
  • 除了0端点,其他端点都能定义为输入端点或输出端点,因此全速设备可以定义16+16=32个端点;
  • 很多USB接口芯片已经确定了端点的数量和属性
  5、帧号域
  • USB协议中,1帧即是1ms;
  • USB总线上,一帧是一个独立的单元,包含了一系列的总线动作;
  • USB将1帧分为好几份,每一份是USB的一个传输动作;
  • 帧号域由11位二进制数组成,所以帧号的最大值为0x7FF,到这个数后,下一个是回到0
  6、数据域
  • 数据长度为0-1023字节;
  • 对于不同传输类型中,数据域的长度各不相同;
  • 必须为整数个字节的数据;
  7、校验域(循环冗余检验域)
  • 用来对令牌包和数据包中的PID域进行校验的一种方法;
  • 对于令牌包,USB采用5位的CRC校验法;
  • 对于数据包,USB采用16位的CRC校验法;
三、包 数据包:USB 总线上数据传输的最小单位,包括SYNC、数据及EOP 三个部分。其中数据的格式针对不同的包有不同的格式。但都以8 位的PID 开始。PID 指定了数据包的类型(共16 种)。令牌包即指PID 为IN/OUT/SETUP 的包。   令牌包:指定数据包去向或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌包作出响应。   握手包:表示了传输的成功与否。 四、四种传输类型 1、事务 在介绍USB传输类型之前,请允许我先简答介绍一下USB事务。 事务一般由令牌包、数据包(可选)、握手包组成。
  • 令牌包:用来启动一个事务,总是由主机发送。
  • 数据包:可以从主机到设备,也可以由设备到主机,方向由令牌包决定。
  • 握手包:通常情况,数据的接收者发送握手包(ACK或者NAK)。
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。下面简答介绍一下这四种传输类型及其注意事项。   2、控制传输 2.1. 控制传输分为三个过程:建立过程、数据过程(可选)、状态过程。 建立过程: a. 主机发送令牌包:SETUP b. 主机发送数据包:DATA0(8个字节,有确定的结构) c. 设备返回握手包:ACK或不应答,注意:设备不能返回NAK或STALL,即设备必须接收建立事务的数据。 数据过程(可选): 一个数据过程可以包含多个数据事务,但所有数据事务必须是同一方向的。若数据方向发生了改变,则认为进入状态过程。数据过程的第一个数据包必须为DATA1,然后每次正确传输一个数据包后就在DATA0和DATA1之间交替。 状态过程: 状态过程只使用DATA1包,并且传输方向与数据过程相反。 2.2. 控制传输的应用场合:主要应用于设备的枚举过程和对数据准确性要求较高的场合。   3、同步传输
  • 同步传输的应用场合:主要用在数据量大,对实时性要求较高的场合。如视频设备、音频设备等。
  4、批量传输
  • 批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据我阶段、握手包阶段。
  • 批量传输分为批量读和批量写,批量读使用批量输入事务,批量写使用批量输出事务。注意:不论输入还是输出都是以主机为参考的。
  • 批量传输的应用场合:主要用在数据量大、对数据实时性要求不高的场合,例如USB打印机、扫描仪、大容量存储设备等等。
  批量输出流程: 1) 主机发送OUT令牌包。     说明:令牌包中包含设备地址、端点号。 2) 设备处理令牌包。
  • 令牌包正确:设备等待接收数据包。
  • 令牌包错误:设备既不接收、处理数据包,也不返回握手包,让主机等待超时。
注:令牌包的正确与否包括设备地址和端点号是否匹配。 3) 主机发送数据包,然后切换到接收模式,等待接收设备返回的握手包。     说明:数据包中包含一个DATA(具体是什么类型的DATA,取决于数据切换位)。 4) 设备处理数据包。
  • 数据包正确,并有足够的空间保存数据:设备返回ACK握手包或NYET握手包(只有告诉模式才有NYET握手包,它表示本次数据接收成功,但是没有能力接收下一次传输)。
  • 数据包正确,但是没有足够的空间保存数据:设备返回NAK握手包。主机收到NAK,延时一段时间后,再重新进行批量输出事务。
  • 数据包正确,但端点处于挂起状态:设备返回一个STALL握手包。
  • 数据包错误:设备不返回任何握手包,让主机等待超时。
批量输入流程: 1) 主机发送IN令牌包,然后切换到接收数据状态,等待设备返回数据。     说明:令牌包中包含设备地址、端点号。 2) 设备处理令牌包。
  • 令牌包正确,且有数据需要返回:设备将一个数据包放到总线上。
  • 令牌包正确,但没有数据需要返回:设备返回NAK握手包。主机收到NAK,延时一段时间后,再重新进行批量输入事务。
  • 令牌包正确,但端点处于挂起状态:设备返回一个STALL握手包。
  • 令牌包错误:设备不做任何响应,让主机等待超时。
3) 主机接收并处理数据包。
  • 数据包正确:主机发送一个ACK握手包。
  • 数据包错误:主机不做任何响应,让设备等待超时。
注:USB协议规定,不允许主机使用NAK握手包来拒绝接收数据包。 PING事务:
  • PING事务只有令牌包和握手包。
  • PING事务是USB2.0高速模式特有的,全速模式和低速模式没有。
  • PING事务作用:主机探测设备是否有空间接收数据
  5、中断传输
  • 中断传输是一种保证查询频率的传输。
  • 中断端点在端点描述符中报告它的查询间隔,主机会保证在不小于这个时间间隔的范围内安排一次传输。
  • 中断传输可以用来不断检测某个状态,当条件满足后,再使用批量传输来传送大量的数据。
  • 中断传输和批量传输的结构基本上一样(除了对端点查询策略)。
  • 中断传输的应用场合:主要用在数据量小,但对时间要求严格的场合。如人机接口设备(HID)中的鼠标、键盘、轨迹球。
五、数据流模型 1.端点
  • 实际上就是设备硬件上具有一定大小的数据缓冲区;
  • 每个端点具有唯一的地址;
  • 主机通过端点和设备进行通信;
  • 分类:IN事务端点、OUT事务端点、SETUP事务端点;
  • 除了端点0,其他端点必须在设备被主机配置后才可以使用;
  2.管道
  • 包括数据流管道(没有定义好的数据格式)和消息管道(有定义好的数据格式);
  • 与端点0的特殊性相配合---控制管道,通过该管道,主机可以获取描述USB设备的完整信息
  • 管道一般只有在设计PC端的驱动程序和用户程序的编写时需要涉及;
  3.数据传输过程