本答复记录将介绍在 Vivado 2016.4 - 2017.2 工具中,在 PetaLinux 和独立操作系统下如何使用 MPSoC 器件运行 USB2.0 标准接口。
使用 Zynq UltraScale+ MPSoC,该 USB 接口就有两个 USB 2.0/3.0 控制器(USB0 和 USB1)。
USB0 和 USB1 都可以在 USB 2.0 中工作,无需使用 USB 3.0 外部 PHY 硬件,也无需在 SoC 处理器配置向导 (PCW) 中更新内部 GTR 设置。
启动 USB 2.0 标准接口,不强制 Vivado 软件启用 USB 3.0 处理器配置向导 (PCW) IP 设置。
这就意味着如果 USB0/1 接口没有使用物理 USB 3.0 接口,就可以禁用 GTR。
在 Vivado 2016.4、2017.1 和 2017.2 版本中,在处理器配置向导 (PCW) IP 设置中禁用或不从 PCW GUI 中选择 USB3.0 GTR 时,USB2.0 就不起作用。
这个问题与 Vivado 软件针对 USB3.0 和 USB2.0 禁用 PIPE3 时钟并将硬件设计 (HDF) 导出至 SDK 软件有关。
这是一个 Vivado 软件设置问题,在 2017.3 版 Vivado 软件中已修复。
解决方法::
要解决 Vivado 2016.4、2017.1 和 2017.2 中的这个问题,请按照以下步骤进行操作:
Step 1:
在 Zynq UltraScale+ MPSoC IP 向导中打开 Vivado 并选择 USB 2.0 接口。不要选择 USB 3.0。
Step 2:
在生成比特流之后,将硬件定义文件导出至 SDK 软件。
为导出的 HDF 文件生成 SDK FSBL 源代码,然后将下面的源代码添加到函数 XFsbl_HookBeforeHandoff:
XFsbl_Out32 (0XFE20C200, 0x02417); /* USB3_0_XHCI_GUSB2PHYCFG_OFFSET= 0XFE20C200*/ XFsbl_Out32 (0xFF9D007C, 0x1); /*disable usb3.0 pipe3 clock and enable usb2.0 clock XFsbl_Out32 (0xFF9D0080, 0x1); /*Pipe power present*/ XFsbl_Out32 (0xff5e00a8, 0x01000602); /*LPD switch to active the clock*/
注意:ULPI PHY RESETB 信号不是 USB SoC 的一部分,所以用户需要从它们的一端来管理。RESETB 可能是 MIO 或 EMIO 或 GPIO 的一部分。
请确保已在 FSBL 或 U-BOOT 阶段释放,这样才能在 Linux 操作系统端正常运行。
如果这在 FSBL 端完成,就应该在 XFsbl_HookBeforeHandoff 函数中提到相应的代码。
例如,使用 ZCU102 时,我已经使用了带 PS_POR_B 的 MODE_1 配置信号逻辑 ANDed。
该源代码可能会在文件“xfsbl_board.c”中看到
查看 (UG1087):
https://china.xilinx.com/html_docs/registers/ug1087/ug1087-zynq-ultrasca...
第 3 步:PetaLinux OS 设置。
禁用 DT (system-user.dtsi) 中的串行解串器并使用与 USB 模式、外设或主机相同的模式。
* 如果 USB0 用于支持外设应用,DT 看上去就像:
&dwc3_0 { status = "okay"; dr_mode = "peripheral"; snps,dis_u2_susphy_quirk; snps,dis_u3_susphy_quirk; maximum-speed = "high-speed"; } ; &usb0 { status = "okay"; /delete-property/clocks; /delete-property/clock-names; clocks = <0x3 0x20>; clock-names = "bus_clk"; }; &serdes{ status = "disabled"; };