我在设备模式下使用Synopsys OTG核心。使用专用于此端点的周期性FIFO编程等时IN高速端点(USB 2.0),以实现每个微帧的最大传输(3个1024字节的数据包)。它的工作时间为99%以上。但偶尔转移会被截断。例如,前1024个字节将使用DATA0 PID(而不是正确的DATA2 PID)进入总线,并且不会发送剩余的2048个字节。由于我已正确编程了数据包计数,多数,最大数据包大小和传输大小,因此我不确定是什么导致这种情况。
显然这是一个非常具体的问题,我没有太多希望得到答案,但我认为在黑暗中拍摄是值得一试的。提前谢谢。
答案 0 :(得分:1)
等时传输不保证数据包传输。因此,如果主机控制器具有其他活动传输,它将以静默方式丢弃等时数据包。如果您需要有保证的包装递送,您应该使用批量转移(但不会保证交货时间)。
同步是理想的应用程序,如声音或视频流,您需要不断的交付时间,但丢失一些帧是可以的。
规范对总线施加限制,允许在全速总线上为周期性传输(中断和同步)分配不超过90%的帧。在高速总线上,这种限制可以减少到不超过80%的微帧可以分配给定期传输。 (c)http://www.beyondlogic.org/usbnutshell/usb4.shtml
答案 1 :(得分:0)
回答我自己的问题,以防可能对其他人有帮助。看来此OTG控制器有一个错误,即TX FIFO并不总是正确清空。我发现一个成功的解决方法是在每个TX之后刷新FIFO。快速,并且截断症状消失了。