目录
USB传输的三个核心包
USB的每一次数据传输(Transaction)由三个包组成,像接力赛一样分步骤完成,确保数据正确传输和确认。
1. 令牌包(Token)
- 功能:类似“快递单”,告诉接收方接下来要做什么。
- 包含传输类型(如数据发送或请求)、方向(主机→设备或设备→主机)、目标设备的地址和端点编号。
- 谁发送?:主机(电脑或控制器)。
- 作用:
- 通知设备即将发生的数据传输方向和内容。
- 例如:主机发送一个“OUT Token”表示要给设备发数据,或发送“IN Token”表示要从设备取数据。
2. 数据包(Data Packet)
- 功能:实际的“包裹”,包含要传输的数据。
- 数据可以是文件、指令、传感器数据等。
- 方向:
- OUT方向:主机→设备(如电脑给打印机发送文件)。
- IN方向:设备→主机(如键盘向电脑发送按键信息)。
- 谁发送?
- OUT方向:主机发送数据包。
- IN方向:设备发送数据包。
3. 握手包(Handshake)
- 功能:类似“签收单”,确认传输是否成功。
- 常见类型:
- ACK:接收成功(“已收到”)。
- NAK:暂时无法接收(“请稍后再试”)。
- STALL:错误或拒绝(“有问题,停止”)。
- 常见类型:
- 谁发送?:接收方(OUT方向时是设备,IN方向时是主机)。
- 作用:告诉发送方数据是否正确接收,确保可靠性。
两种典型传输流程示例
场景1:主机→设备(OUT传输)
- OUT Token:主机发送令牌包,告诉设备:“我要给你发数据,地址是X,端点是Y”。
- Data Packet:主机发送实际数据(例如文件内容)。
- Handshake:设备收到数据后回复ACK(成功)或NAK(失败)。
场景2:主机←设备(IN传输)
- IN Token:主机发送令牌包,告诉设备:“请给我发送数据”。
- Data Packet:设备发送数据(例如传感器读数)。
- Handshake:主机收到数据后回复ACK(成功)或NAK(失败)。
为什么需要这三个包?
- 令牌包:明确传输意图,避免混乱(比如快递员先敲门说“我来送包裹”)。
- 数据包:实际传输内容(包裹本身)。
- 握手包:确认传输结果,确保数据没丢或出错(签收确认)。
总结
USB传输就像寄快递:
- 快递单(Token):说明要寄什么、给谁。
- 包裹(Data Packet):实际物品。
- 签收单(Handshake):确认是否收到。