首页 文章

USB如何处理重传?

提问于
浏览
0

我试图了解数据包级别的USB协议 . 特别是,我对USB在发生错误时如何处理批量传输的重传感兴趣 . 以供参考:

https://www.beyondlogic.org/usbnutshell/usb3.shtml https://www.beyondlogic.org/usbnutshell/usb4.shtml#Bulk

我们先讨论从外设到主机的正常传输:主机向外设发送一个IN令牌 . 外设以数据包响应 . 然后主机发送ACK . 由于ACK,外围设备知道主机正确接收了数据,并且外围设备将使用新的数据包来回答下一个IN令牌 .

现在考虑出现问题 . 假设数据包已损坏 . 因此主机丢弃数据包并且不发送ACK . 当外围设备接收到下一个IN令牌时,它只是再次发送先前的数据包 . 那是对的吗?

现在考虑数据包正确到达主机的更棘手的情况,但是主机发送的ACK已损坏 . 因此主机正确接收数据,但外设不知道它,因为没有正确接收到ACK . 据我所知,主机永远不会重传ACK .

我相信主机发送的下一个IN令牌通过重传数据包来应答 . 但是,主机如何判断它是相同的数据包?我在任何地方都找不到解释 .

是否与数据包(DATA0和DATA1)有两个PID值有关?

1 回答

  • 0

    你的第一个问题的答案是肯定的;如果获得ACK数据包,则设备仅认为要成功发送批量IN数据包 .

    对于你的第二个问题,你猜对了:数据切换位在0和1之间切换,所以如果主机连续两次获得相同的数据包,它可以告诉第二个应该被忽略,因为它会有与之前相同的数据切换值 .

    有关更多信息,请参阅USB 2.0规范中的第8.6节“数据切换同步和重试” .

相关问题