跳转到主要内容

使用PCIE更新ZYNQ的QSPI Flash参考设计

<font color="#FF8000">作者:Jackie Gao,AMD工程师;来源:AMD Xilinx开发者社区</font>

<strong>简介</strong>

ZYNQ-7000的S_AXI端口提供了外设访问PS内部外设控制器的接口,这其中包括4个S_AXI_HP端口以及两个S_AXI_GP端口。一般来说,可以访问的内部资源包括DDR控制器,QSPI控制器,OCM,IIC,SPI等。

本教程提供一个最小的参考设计,使上柆机可以通过PCIE端口,通过S_AXI_GP0端口访问ZYNQ内部的QSPI控制器,用来更新Flash的启动分区。

软件方面,移植了embeddedsw的相关驱动代码至xdma平台,并提供了一个简单的上位机测试程序,用来烧写启动镜像至Flash分区。

教程中所有涉及的设计及代码均在Windows和Linux(Ubuntu20.04)平台下作了验证。

<strong>系统设计</strong>

1. 系统设计框图参考如下。在设计实例化了一个XDMA IP,通过其M_AXI端口连接至ZYNQ的S_AXI_GP0,以访问PS QSPI控制器。
<center><img src="https://cdn.eetrend.com/files/2023-11/wen_zhang_/100576066-325035-tu1xi…; alt=""></center>

2. BD中需要分配XDMA的M_AXI地址如下,可以用Vivado的自动地址分配工具完成。
<center><img src="https://cdn.eetrend.com/files/2023-11/wen_zhang_/100576066-325036-tu2fe…; alt=""></center>

3. 如果有访问其它外设的需求,详细的地址可以参考UG585的Table 4‐1: System-Level Address Map

<strong>环境需求</strong>

硬件环境

<li>ZC706开发板</li>
<li>Windows10/11或者Ubuntu20.04主机</li>

软件环境

<li>Vivado Design Suite 2022.2</li>
<li>Petalinux 2022.2</li>
<li>CMake > 2.15</li>
<li>Windows + Visual Studio或者Linux + GCC</li>

<strong>代码结构</strong>

硬件
<li>hw文件夹里面里面包含vivado工程,直接用vivado 2022.2打开</li>

固件
<li>此参考设计用petalinux制作系统启动镜像,完整的petalinux工程位于fw目录下。</li>
<li>执行petalinux-build可以编译</li>
<li>执行petalinux-package –boot –u-boot –force –fpga XXX.bit 生成BOOT.BIN文件</li>

软件
<li>qspi 的驱动软件移植自embeddedsw,主要的改动包括修改xil_io.c文件,用xdma的驱动替换默认的Xil_In32和Xil_Out32的实现。</li>
<li>软件支持windows和Linux的主机,采用cmake环境。如果在windows下,可以选择Visual Studio作为编译工具。编译过程如下:</li>

1.cd sw
2.mkdir build
3.cmake .. && make

<strong>测试结果</strong>

<li>在petalinux下生成的BOOT.BIN文件放在生成的上位机软件目录下,执行后可以看到更新flash的进度条在变化,说明FLASH被正常少烧写。</li>
<li>完成后切换到QSPI FLASH启动模式,上电观察启动过程。</li>
&nbsp;