【发布时间】:2018-06-12 14:27:39
【问题描述】:
我正在尝试了解数据包级别的 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 令牌会以数据包的重传来回答。但是,宿主如何判断是同一个数据包呢?我在任何地方都找不到解释。
是否与数据包有两个PID值(DATA0和DATA1)有关?
【问题讨论】:
标签: usb