我的团队在 USB 输出事务中遇到了 ACK 缺失的问题。
关于我们系统的一些信息:
* MCU 型号为 LPC5528
* SDK 版本为 26.03.00。
* 对于 USB_DeviceInit 的调用,我们将 kUSB_ControllerLpcIp3511Fs0 作为第一个参数(controllerId)提供,以便我们使用 USB 全速。
很难对模式做出太多评价。我们可以肯定的是:
* 当我们通过 USB 发送大量消息时,偶尔会出现 OUT 事务缺少 ACK 的情况。我们用Ellisys USB分析仪检测到了这个问题。我们可以看到缺少 OUT 信号,然后 PC 进行了 3 次重试,最后通过 USB RESET。
这种情况很少发生。我们编写了一个脚本,重复发送相同的简单 USB 消息(目标只是返回一些数据,没有繁重的计算等)。有时只需几次迭代,有时则需要数千次迭代才会出现错误。
我们想知道这是否是一个已知问题,或者是否有调试技巧。
我们已经检查了 LPC55S2x/LPC552x 的勘误表,没有发现任何与 USB0 全速设备输出直接对应的缺少 ACK 相关的已知问题。目前,USB勘误表主要集中在高速模式上,因此并不直接适用于您的配置。
从这种现象来看,更可能的原因是 OUT 端点在某些时刻没有及时准备接收缓冲区,导致主机发送 OUT 时设备无法响应 ACK,从而触发信号重试甚至 RESET。建议重点确认每次 OUT 完成后是否立即调用 USB_ServiceRecvRequest(),并尽量减少回调中的处理。还建议检查 USB 中断的优先级,避免长时间的关机中断。
BR
哈里