Zynq-7000 SoC、USB — 软件重置后的第一个 SOF 可能会崩溃

描述
在 USB 重置过程中(速度协商和短促声波),如果协议引擎将 SOF 命令发送给端口控件,该端口控件将过滤掉那些 SOF。但在重置结束时(从主机返回的短促声波结束),如果协议引擎发送一个 SOF,ULPI 端口控件在发送更新 opmode 命令之前会将 SOF 发送给 PHY。这会导致在线发送无效数据包。ULPI 协议中的无效数据包很快就是一个 NOPID Tx 命令,紧接着是一个 STP 脉冲。

在 USB 重置 (usb.PORTSCx[PR] = 0) 之后,在 ULPI 后复位处理完成前,请勿启用 usb.USBCMD[RS],这可以通过读取 prtsc.pr 寄存器来检查。这可确保主机不会过早发送 SOF。

(1楼)影响: 很小。这个问题的发生取决于内部计数器启动和重置

judyzhong 在 星期四, 07/05/2018 - 17:18 发表。

影响:

很小。这个问题的发生取决于内部计数器启动和重置事件之间的具体时序。这不能由主机软件决定,因此它被认为是一个随机事件。从 USB 角度看,这个问题并不重要,因为设备应该忽略无效的数据包。

解决方法::

在 USB 重置之后,在 ULPI 后复位处理完成前,请勿启用 usb.USBCMD[RS]。

受影响的配置:

使用 USB 控制器的系统。

受影响的器件修订版本: 全部,无计划修复。请参考(Xilinx 答复 47916) - Zynq-7000 设计咨询主答复记录

要解决这个问题,在 USB 重置 (usb.PORTSCx[PR] = 0) 之后,在 ULPI 后复位处理完成前,请勿启用 usb.USBCMD[RS],这可以通过读取 usb.PORTSCx[PR] 寄存器位来检查。这可确保主机不会过早发送 SOF。

注:该解决方法可减少出现问题的可能性,但并不能完全消除问题。