Other Parts Discussed in Thread: TM4C129XKCZAD
器件型号: TM4C1294NCPDT
说明: 我报告了在执行大型 HID 控制传输(通过 EP0 进行 GET_REPORT)时、TM4C1294 USB 控制器上存在潜在的硬件/固件状态机同步问题。
观察到的行为: 当通过端点 0 传输大数据负载(例如 4032 字节)时、USB 控制器间歇性地出现故障 SETEND (0x1A) 两种方法。 USB_O_CSRL0寄存器保持卡在0x1A (SETEND + DATAEND + TXRDY) 位置、端点停止。
主要发现:
-
完整数据包约束: 当总传输长度是其的倍数时、问题始终会出现 64 字节 (例如 4,032,4096 字节)。 在这些情况下、最后一个数据包是“完整数据包“。
-
短数据包权变措施: 如果长度更改为 64 的非倍数(例如 4000 或 4095 字节)、则问题消失、其中最终数据包为“短数据包“。
-
USB 1.1 与 2.0:
-
USB 1.1 主机: 传输方式 稳定 阈值保持固定。
-
USB 2.0(支持高速)主机: 。 SETEND 完整数据包经常出现错误。
-
根本原因分析: 这似乎是器件的TXRDY清除逻辑和主机的状态阶段转换之间的竞态条件。
-
在 USB 2.0 主机上、从数据阶段确认到状态阶段 (EOP) 的转换速度明显快于 USB 1.1。
-
当 完整数据包 已发送、TM4C 硬件
TXRDY在收到 ACK 时似乎无法足够快地清除该位。 -
因此、当主机的状态输出数据包到达时、设备仍具有
TXRDY=1。 硬件会将其检测为协议违例、从而触发 SETEND 、并冻结 CSR0 寄存器。 -
指定 短数据包 在某些情况下、硬件提前识别数据段的结束、从而
TXRDY在状态阶段开始之前留出足够的时间让状态机清除。
请求: TI 能否确认这是否是在控制传输中处理完整数据包终止时 USB 0 控制器状态机的已知限制? 是否有建议的寄存器级时序配置 TXRDY可以确保在高速主机启动状态阶段之前清除?