This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:TM4C1294 USB0:在 USB 2.0 主机上传输大 HID 报告期间出现 SETEND 错误 (0x1A)

Guru**** 2777545 points

Other Parts Discussed in Thread: TM4C129XKCZAD

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1607914/tm4c1294ncpdt-tm4c1294-usb0-setend-error-0x1a-during-large-hid-report-transfer-on-usb-2-0-hosts

器件型号: TM4C1294NCPDT

说明: 我报告了在执行大型 HID 控制传输(通过 EP0 进行 GET_REPORT)时、TM4C1294 USB 控制器上存在潜在的硬件/固件状态机同步问题。

观察到的行为: 当通过端点 0 传输大数据负载(例如 4032 字节)时、USB 控制器间歇性地出现故障 SETEND (0x1A) 两种方法。 USB_O_CSRL0寄存器保持卡在0x1A (SETEND + DATAEND + TXRDY) 位置、端点停止。

主要发现:

  1. 完整数据包约束: 当总传输长度是其的倍数时、问题始终会出现 64 字节 (例如 4,032,4096 字节)。 在这些情况下、最后一个数据包是“完整数据包“。

  2. 短数据包权变措施: 如果长度更改为 64 的非倍数(例如 4000 或 4095 字节)、则问题消失、其中最终数据包为“短数据包“。

  3. 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可以确保在高速主机启动状态阶段之前清除?