USB·

USB IN/OUT 事务中 ACK 的发送方及数据传输确认机制

Hugh

Hugh

282 0

一、IN 事务(设备 → 主机数据传输)

1. 事务流程
  1. 主机发送 IN 令牌包​:通知设备准备发送数据。
  2. 设备响应​:

    • 若数据准备好:发送数据包(DATA0/DATA1)。
    • 若未准备好:发送 NAK 握手包。
    • 若设备错误:发送 STALL 握手包。
  3. 主机确认​:

    • 成功接收数据后,向设备发送​ACK 握手包​,表示 “数据已收到”。
    • 若接收数据错误(如 CRC 校验失败),不返回任何握手包,设备需重试。
2. ACK 发送方

主机 → 设备​:主机在正确接收设备发送的数据后,向设备返回 ACK,确认数据接收完成。

二、OUT 事务(主机 → 设备数据传输)

1. 事务流程
  1. 主机发送 OUT 令牌包 + 数据包​:向设备发送数据。
  2. 设备响应​:

    • 成功接收数据后,向主机发送​ACK 握手包​,表示 “数据已接收”。
    • 若未准备好接收数据:发送 NAK 握手包。
    • 若设备错误或无法处理:发送 STALL 握手包。
  3. 主机确认​:通过设备返回的握手包判断传输结果。
2. ACK 发送方

设备 → 主机​:设备在正确接收主机发送的数据后,向主机返回 ACK,确认数据接收完成。

三、主机如何判断数据传输状态?

事务类型主机动作设备响应主机判断逻辑
IN发送 IN 令牌 → 接收数据发送数据 / NAK/STALL- 收到数据:返回 ACK,确认传输成功。- 收到 NAK:设备未准备好,稍后重试。- 收到 STALL:设备错误,需处理异常。
OUT发送 OUT 令牌 + 数据 → 等待响应发送 ACK/NAK/STALL- 收到 ACK:设备成功接收数据。- 收到 NAK:设备未准备好,稍后重试。- 收到 STALL:设备错误,需处理异常。

四、关键总结

  • ACK 的方向​: IN 事务中 ACK 由​主机 → 设备​(确认主机收数据); OUT 事务中 ACK 由​设备 → 主机​(确认设备收数据)。
  • 核心机制​: USB 通过握手包的交互实现双向确认,主机根据设备返回的握手包(IN 事务)或自己发送的握手包(OUT 事务)判断数据传输状态。
  • 异常情况​:

    • NAK:设备暂时未准备好,主机可重试。
    • STALL:设备永久错误(如端点暂停),需主机干预(如复位端点)。
    • 无响应:主机超时或数据错误,自动重试或报错。

五、扩展:高速 USB 的 NYET 握手包

在高速 USB(480Mbps)的 IN 事务中,设备若暂时无法准备数据,可返回​NYET 握手包​(仅高速支持),表示 “当前未准备好,但未来可能准备好”,主机可在短时间内重试,比 NAK 更高效。

注:来自deepseek

所属系列

从当前文章继续阅读它所在合集中的前后内容。

零基础入门USB 第 6 / 9 篇
查看合集

本作品集介绍USB基础知识,解析USB通信协议,学习USB工作原理,制作USB设备,编写USB上位机软件。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人