在USB中,定义了这四种类型包
USB底层协议
USB它是串行总线,所以数据在总线上是一位一位传输的,先传输最低位数据,最后传输最高位数据。对于多个字节的数据传输呢,采用的是小端格式,即先传输低字节数据,最后传输高字节数据。
在USB中,数据是以包为单位进行传输的,所有的包都必须以SYNC字段开始,以EOP(End-of-Packet)结尾。在SYNC字段之后,紧跟着的是包标识符(PID),PID为一个字节,其中4位用于定义包的类型,另外4位是用来校验PID的,PID格式如下:
在USB中,定义了四种类型的包,令牌包、数据包、握手包和特殊包,包类型详细定义如下:
在令牌包的PID字段之后,还包含地址域,地址就包括设备地址和端点地址,设备地址共7位,总共可寻址128个地址,但是地址0是作为默认设备地址的,所以说,USB系统中,最多只能同时连接127个设备。端点地址共4位,可寻址16个端点。
在USB包最后,还包含5位的CRC检验码,CRC校验码只对PID后面的数据进行校验,不对PID进行校验,因为PID本身就包含4位校验码。
包格式
令牌包格式
令牌包格式定义如下:
这里的令牌特指IN、OUT、SETUP令牌,而SOF包格式定义如下:
令牌包实例如下:
数据包格式
数据包包含包标识符(PID)和0到多个字节的数据,数据包类型总共四种,DATA0、DATA1、DATA2和MDATA。数据包格式定义如下:
数据包实例如下:
上图为SETUP请求数据包,用于读取设备的设备描述符。
握手包格式
握手包有三种ACK、NAK和STALL,其中ACK表示数据传输完成并且无错误,NAK表示设备不能接收数据或者没有数据上传,STALL表示设备不能进行数据传输。而NYET和ERR握手包只针对高速设备,表示设备没有准备好或者出错。握手包格式定义如下:
ACK握手包实例如下:
- 从1.8V到USB的多轨电压转换和管理(08-17)
- 具USB OTG和过压保护的紧凑型电源管理器(08-17)
- USB供电的单节镍氢电池开关模式充电器电路设计(02-12)
- 具有USB OTG和过压保护的紧凑型电源管理器的实现(10-17)
- 低导通损耗的USB电源开关的设计(12-01)
- 一种满足USB规范的电源开关设计方案(02-13)