Embedded Synopsys USB OTG控制器(2.65a)偶尔会在USB设备模式下截断同步

Embedded Synopsys USB OTG控制器(2.65a)偶尔会在USB设备模式下截断同步,embedded,usb,usb-otg,Embedded,Usb,Usb Otg,我在设备模式下使用Synopsys OTG内核。使用专用于该端点的周期性FIFO对高速端点(USB 2.0)中的同步进行编程,以实现每微帧的最大传输(3个1024字节的数据包)。它99%以上的时间都能工作。但有时传输会被截断。例如,前1024个字节将通过DATA0 PID(而不是正确的DATA2 PID)进入总线,其余2048个字节将不被发送。由于我已经正确地编程了数据包计数、多计数、最大数据包大小和传输大小,所以我不确定是什么导致了这种情况 显然,这是一个非常具体的问题,我没有太多希望得到答案

我在设备模式下使用Synopsys OTG内核。使用专用于该端点的周期性FIFO对高速端点(USB 2.0)中的同步进行编程,以实现每微帧的最大传输(3个1024字节的数据包)。它99%以上的时间都能工作。但有时传输会被截断。例如,前1024个字节将通过DATA0 PID(而不是正确的DATA2 PID)进入总线,其余2048个字节将不被发送。由于我已经正确地编程了数据包计数、多计数、最大数据包大小和传输大小,所以我不确定是什么导致了这种情况


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

等时传输不能保证数据包传递。所以,若主机控制器有其他活动传输,它将静默地丢弃同步数据包。如果您需要有保证的打包交付,您应该使用批量传输(但这样就不能保证交付时间)

等时是理想的应用程序,如声音或视频流,你需要恒定的交付时间,但一些帧的损失是可以的


该规范对总线进行了限制,允许在全速总线上为周期传输(中断和等时)分配的任何帧不超过90%。在高速总线上,这一限制降低到不超过80%的微帧可分配用于定期传输。(c)

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