在USB(通用串行总线)通信中,Token包(令牌包)是非常重要的控制包,用于启动事务并指定数据传输的方向、设备地址和端点。本文将对Token包进行详细解析,包括其结构和具体作用。
一、Token包的结构
Token包的结构如下:
同步字段(Sync):8位,用于同步接收方的时钟。
PID(Packet ID):8位,标识包的类型。对于Token包,PID可以是OUT、IN或SETUP。
地址字段(Address):7位,标识目标设备的地址。
端点字段(Endpoint):4位,标识目标设备的端点。
CRC5(Cyclic Redundancy Check):5位,用于校验Token包的完整性和正确性。
二、PID字段
PID字段用于标识Token包的类型,主要有以下几种:
OUT:表示主机向设备发送数据。
IN:表示主机请求从设备读取数据。
SETUP:用于控制传输,通常用于设置设备的状态或请求设备的状态。
三、具体作用
Token包的主要作用是启动USB事务,并提供必要的控制信息。具体来说,Token包有以下几种用途:
1、启动事务
OUT Token包:主机发送OUT Token包,表示主机即将向设备发送数据。设备接收到OUT Token包后,会准备接收数据。
IN Token包:主机发送IN Token包,表示主机请求从设备读取数据。设备接收到IN Token包后,会准备发送数据。
SETUP Token包:主机发送SETUP Token包,用于控制传输,通常用于设置设备的状态或请求设备的状态。设备接收到SETUP Token包后,会准备接收后续的控制数据。
2、指定设备地址
地址字段:7位的地址字段用于标识目标设备的地址。每个USB设备在连接到主机时都会被分配一个唯一的地址(0到127)。主机通过这个地址字段指定要与哪个设备进行通信。
3、指定端点
端点字段:4位的端点字段用于标识目标设备的端点。每个USB设备可以有多个端点,每个端点负责不同的数据传输任务。主机通过这个端点字段指定要与设备的哪个端点进行通信。
4、校验完整性
CRC5:5位的CRC5字段用于校验Token包的完整性和正确性。接收方在接收到Token包后,会计算CRC5校验码并与包中的CRC5字段进行比较,如果一致则表示包没有错误,否则表示包有错误。
四、Token包的传输过程
以下是一个典型的USB事务的传输过程,展示了Token包的具体作用:
主机发送Token包:OUT Token包:主机发送OUT Token包,指定目标设备的地址和端点。
同步字段:8位
PID:0100(OUT)
地址字段:7位
端点字段:4位
CRC5:5位
设备响应:
设备接收到OUT Token包后,准备接收数据。
主机发送Data包:
主机发送Data包,包含实际的数据。
同步字段:8位
PID:0000(DATA0)或0001(DATA1)
数据字段:0到1023字节
CRC16:16位
设备发送Handshake包:
设备接收到Data包后,发送Handshake包确认数据的接收状态。
同步字段:8位
PID:0010(ACK)、0101(NAK)、0111(STALL)或1011(NYET)
Token包在USB通信中起着至关重要的作用,用于启动事务、指定设备地址和端点、以及校验包的完整性。通过理解Token包的结构和具体作用,可以更好地设计和调试USB设备。