USB包:
USB数据传输有4种类型:
1)控制传输对总线和总线上的设备进行设置;
2)快传输通过USB设备对数据进行异步发送;
3)同步传输用来传输实时性高的数据,单向的。
4)中断传输用来在一定时间片发送数据。
一个USB包包括1个SYNC字节,1个PID(包ID),内容(数据、地址等)和1个CRC字段。
PID:用于标识包的类型,共8位。PID4~PID7 由 PID0~PID3取反得到。共有四种包:
PID0PID1 PID2PID3包类型
1000OUT令牌包
1001IN令牌包
1011SOF令牌包
1011SETUP令牌包
1100DATA0数据包
1101DATA1数据包
1110DATA2数据包
1111MDATA数据包
0100ACK握手包
0101NAK握手包
0111STALL 握手包
0110NYET握手包
0011PRE特殊包
0011ERR特殊包
0001SPLIT特殊包
0010PING特殊包
0000保留未用
USB包的数据类型:令牌、数据、握手、先导包。
① 令牌包。用于启动一次USB传输。IN 令牌包 用于通知设备返回一个数据包;
OUT令牌包用于通知设备将要输出一个数据包;
SETUP令牌包用在
控制传输中。以上三种令牌包的结构如下:
| 同步域 | 8位包标识 | 7位地址 | 4位端点号 | 5位CRC5校验 | EOP |
SOF包在每帧开始时以广播方式发送,发送帧号,不跟随数据:
| 同步域 | 8位包标识符 | 11位帧号 | 5位CRC5校验 | EOP |
②数据包。用于传输数据。当设备或主机端
成功发送或接收数据时,会
切换数据包的类型。有DATA0, DATA1, DATA2, MDATA类型。结构为:
| 同步域 | 8位包标识符 | 字节0 | 字节1 | …… | 字节N | 16位CRC16校验 | EOP |
③握手包。握手包数据结构简单, 用于表示对方是否确认传输。
| 同步域 | 包标识 | EOP |
④先导包。主要包括PRE, ERR, SPLIT, PING.
PRE : 只用在全速中,通知集线器打开低速端口。
PING : 等待设备返回ACK或NAK,判断设备是否能够进行传输;
SPLIT :通知集线器将高速数据包转化为全速或低速数据包下发;
ERR : 分裂事物中的错误表示。
物理接口:
USB线:pin 1: V
BUS +5V 红色
pin 2: D
+ 差分数据线 绿色
pin 3: D- 差分数据线 白色
pin 4:GND 电源和信号地 黑色
上行连接(Upstream): 从一个设备连回到主机—— A系列插头——DP线有上拉电阻1.5K欧姆;
下行连接(Downstream): 从主机连到设备——B系列插头——DP和DM线上都串联电阻(注意 总电阻应该为45欧姆),和下拉电阻。