0

我在设备模式下使用 Synopsys OTG 内核。使用专用于该端点的周期性 FIFO 对等时 IN 高速端点 (USB 2.0) 进行编程,以实现每微帧的最大传输量(3 个 1024 字节的数据包)。它在 99+% 的时间里都有效。但有时传输会被截断。例如,前 1024 个字节将使用 DATA0 PID(而不是正确的 DATA2 PID)进入总线,其余 2048 个字节将不会被发送。由于我已经正确编程了数据包计数、多重计数、最大数据包大小和传输大小,我不确定是什么原因造成的。

显然这是一个非常具体的问题,我不太希望得到答案,但我认为在黑暗中试一试值得一试。提前致谢。

4

2 回答 2

1

同步传输不保证数据包的传递。因此,如果主机控制器有其他活动传输,它将默默地丢弃同步数据包。如果您需要保证包装交付,您应该使用批量转移(但它不会保证交付时间)。

同步是理想的应用程序,如声音或视频流,您需要恒定的传输时间,但丢失一些帧是可以的。

该规范对总线进行了限制,允许为全速总线上的定期传输(中断和同步)分配不超过 90% 的任何帧。在高速总线上,这个限制减少到不超过 80% 的微帧可以分配给定期传输。(c) http://www.beyondlogic.org/usbnutshell/usb4.shtml

于 2012-04-26T17:02:33.023 回答
0

回答我自己的问题,以防它可以帮助别人。这个 OTG 控制器似乎有一个错误,即 TX FIFO 并不总是正确清空。我发现一个成功的解决方法是在每次 TX 之后刷新 FIFO。它很快,截断症状消失了。

于 2020-03-02T20:45:13.260 回答