Zynq UltraScale+ MPSoC — 在 Vivado 2016.4、2017.1 和 2017.2 工具中,在 PetaLinux OS 和独立操作系统下如何使用 MPSoC 器件运行 USB2.0 标准接口

描述

本答复记录将介绍在 Vivado 2016.4、2017.1 和 2017.2 工具中,在 PetaLinux OS 和独立操作系统下如何使用 MPSoC 器件运行 USB2.0 标准接口。

解决方案

已知问题:

使用 Zynq UltraScale+ MPSoC,该 USB 接口就有两个 USB 2.0/3.0 控制器(USB0 和 USB1)。

USB0 和 USB1 均可在 USB2.0 下发挥作用,无需在 SoC 处理器配置向导 (PCW) 下设置 USB3.0 外部 PHY 硬件及内部 GTR。

要运行 USB 2.0 标准接口,不一定要从 Vivado 软件中启用 USB 3.0 处理器配置向导 (PCW) IP 设置。

也就是说,如果物理 USB3.0 接口不用于 USB0/1 接口时,可禁用 GTR。

在 Vivado 2016.4、2017.1 和 2017.2 版本中,在处理器配置向导 (PCW) IP 设置中禁用或不从 PCW GUI 中选择 USB3.0 GTR 时,USB2.0 就不起作用。

该问题与 PIPE3 时钟有关,其不仅可针对 USB3.0 和 USB2.0 从 Vivado 软件中禁用,同时还可将硬件设计 (HDF) 导出至 SDK 软件中。

这是一个 Vivado 软件设置问题,在 2017.3 版 Vivado 软件中已修复。

解决方法:

要解决 Vivado 2016.4、2017.1 和 2017.2 中的这个问题,请按照以下步骤进行操作:

Step 1:

打开 Vivado 并在 Zynq UltraScale+ MPSoC IP 向导中选择 USB2.0 接口,别选 USB3.0。

Step 2:

在生成比特流之后,将硬件定义文件导出至 SDK 软件。

为导出的 HDF 文件生成 SDK FSBL 源代码,然后将以下源代码添加至函数 XFsbl_HookBeforeHandoff 中:
XFsbl_Out32 (0XFE20C200, 0x02147); /* USB3_0_XHCI_GUSB2PHYCFG_OFFSET= 0XFE20C200*/

XFsbl_Out32 (0xFF9D007C, 0x1); /*disable usb3.0 pipe3 clock and enable usb2.0 clock

XFsbl_Out32 (0xFF9D0080, 0x1); /*Pip*e power present*/

XFsbl_Out32 (0xff5e00a8, 0x01000602); /*LPD switch to active the clock*/

注意:如果 USB_PHY_RESETB 与 MIO 或 GPIO 一起使用,请确保它已在 FSBL 中发布。在 XFsbl_HookBeforeHandoff 函数中应提及适当的代码。

例如,使用 ZCU102 时,我已经使用了带 PS_POR_B 的 MODE_1 配置信号逻辑 ANDed。

我从 FSBL 驱动 USB_PHY_RESETB 信号。

在文件“xfsbl_board.c”中可见该源代码

查看 (UG1087): https://china.xilinx.com/html_docs/registers/ug1087/ug1087-zynq-ultrasca...

第 3 步:PetaLinux OS 设置。

在 DT 中禁用串行解串器 (system-user.dtsi)。