如何使用Vivado 2022.1版本工具链实现ZCU102 USB启动(上)

描述

本文作者:赛灵思工程师 Zhao Gaofeng

本文依据  Vivado 2022.1 版本工具链的特性,对 UG1209( 最新版本为 2020.1 )中介绍的 USB BOOT 启动步骤做了修改,此外,介绍了 WINDOWS 10 中 DFU 工具的使用。

Step1 VIVADO 操作:

新建 VIVADO 工程 。

( 图片截自 UG1209,路径和工程名可自定,下同 )

赛灵思

新建 Block Design。

赛灵思

添加 Zynq UltraScale+ MPSoC IP,并使用 run block automation 应用 board preset。

需要注意的是,要在 board preset 的基础上减少外设的使用以防启动镜像过大,原因会在镜像制作阶段说明。这里去掉了 PCIE、SATA、DP、CAN 外设以及两个 AXI HPM FPD 接口。

赛灵思

 

赛灵思

完成配置后,依次进行 Validate Design, Create HDL wrapper, Generate Output Product (OOC) , Export Hardware。因为这里没有用到PL端,所以不用生成比特流。

Step 2 制作第一个启动镜像:

创建 FSBL 工程。

赛灵思

配置 FSBL,在 src 目录下找到 xfsbl_config.h,修改其中的宏定义如下:

赛灵思

修改完成后保存、编译。

打包 fsbl.elf 和 pmufw.elf,USB boot 的第一个启动镜像会被加载到 256KB OCM 中,为了满足 size 要求,第一个启动镜像只包含 fsbl.elf 和 pmufw.elf,如果使能过多外设会导致最终的 pmufw 过大。当 OCM 被写满时,USB 启动就会失败。打包方式如下图所示,注意 pwufw 的 partition type 要指定为 pmu(loaded by bootrom)。

赛灵思

Step 3 制作第二个启动镜像:

使用  Vivado 2022.1 版本的 ZCU102 BSP 创建 PETALINUX 2022.1 工程。

赛灵思

配置 PETALINUX 工程:

1.选中 Subsystem AUTO Hardware Settings, 选中 Memory Settings ,设置 System Memory Size 为 0x6FFFFFFF。

2.返回主菜单. 选择 Image Packaging Configuration, 设置 root file system type 为 INITRAMFS。

3.将 INITRAMFS/INITRD Image name 由默认的 petalinux-intramfs-image 为 petalinux-image-minimal,默认配置下ROOTFS 会放在 SD 卡的 EXT4 分区,这是 PETALINUX 2021.1之后版本的新特性,修改后 ROOTFS 在 DDR 中,就无需插 SD卡了。

4.返回主菜单,选择 ARM Trusted Firmware Configuration,配置如下:

赛灵思


默认情况下,ATF 运行在 COM 中,但是在本设计中 OCM 的空间非常紧张,ATF 在 OCM 运行可能会因为内存不足卡死,所以改为在 DDR 中运行,同时使能 atf debug 方便调试。

5.修改设备树:
编辑 ./project-spec/meta-user/recipes-bsp/device-tr ee/ files/system-user.dtsi 如下:

赛灵思

6.编译: petalinux-build

回到 Vitis IDE 制作启动镜像,如下图所示,注意 bl31.elf 的excpetion level=el3 并且使能 trust zone,system.dtb 的 load属性设为 0x00100000(在2021.1后u-boot.elf 不再包含system.dtb),u-boot.elf 的 exception level=el2。

赛灵思

 

赛灵思

详细的测试过程,请参考“如何使用 Vivado 2022.1 版本工具链实现 ZCU102 USB 启动(下)”

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分