基于Xilinx Zynq系列的PS端裸机与FreeRTOS案例开发(工程编译、程序加载与固化法)

2021-10-12 14:18:55 浏览数 (1)

前 言:本文主要介绍PS端(ARM CPU0)的裸机与FreeRTOS案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx SDK 2017.4。

本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC评估板,处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源,评估板由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

TLZ7x-EasyEVM-S评估板

评估板接口资源丰富,引出千兆网口、双路CAMERA、USB、Micro SD、CAN、UART等接口,支持LCD显示拓展及Qt图形界面开发,方便快速进行产品方案评估与技术预研。

想要获取本案例的详细内容或更多案例,欢迎私聊或评论区留言,感谢关注!

下面继续讲解第一章节的第三小节↓

1.3基于下载器固化程序

1.3.1设置XSDK环境变量

请在Windows中添加XSDK环境变量XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ,并设置其值为50000000,此环境变量会将QSPI时钟设置为50MHz。

图 25

如不设置环境变量,可能会发生如下错误,或显示固化成功但无法正常启动。

图 26

1.3.2固化程序到SPI FLASH

SPI FLASH中一般固化FSBL(BOOT.BIN)、U-Boot(u-boot.bin)、PL端程序(Bitstream-xxx.bin)、PS端裸机/FreeRTOS程序(xxx.elf)四个程序镜像。程序启动顺序为:FSBL -> U-Boot -> PL端程序 -> PS端裸机/FreeRTOS程序。ZYNQ的FSBL(First Stage Bootloader)为一级Bootloader程序,U-Boot为二级Bootloader程序。

此四个程序在SPI FLASH中的分区说明见下表。

表 1

固化内容

文件名

固化地址

地址范围

容量大小

FSBL

BOOT.BIN

0x0

0x0-0x40000

256KByte

U-Boot

u-boot.bin

0x40000

0x40000-0xc0000

512KByte

PS端裸机/FreeRTOS程序

xxx.elf

0x100000

0x100000-0x200000

1MByte

PL端程序

xxx.bin

0x200000

0x200000-0x1000000

14MByte

备注:地址范围0xc0000-0x100000(256KByte)用于保存U-Boot环境变量。

固化过程中,需使用FSBL的.elf格式可执行文件fsbl.elf辅助固化,fsbl.elf、BOOT.BIN位于产品资料“4-软件资料LinuxFSBLimageembeddedsw-gdea7f98-v1.1”目录下。fsbl.elf与BOOT.BIN为同一套FSBL源码编译生成的两种不同格式的可执行文件,fsbl.elf主要用于固化时对SPI FLASH等外设进行初始化。u-boot.bin位于产品资料“4-软件资料LinuxU-Bootimageu-boot-2017.01-g979d5b2-v2.0”目录下。请将fsbl.elf、BOOT.BIN、u-boot.bin三个文件拷贝至Windows非中文路径下。

请将评估板拨码开关设置为010101(1~6),此档位为JTAG模式,再将评估板上电。打开PS端工程,点击工具栏的“Program Flash”按钮。

图 27

首先在弹出的界面中确认Device能否被正常检测,可点击“Select...”查看,然后选择待固化文件BOOT.BIN,设置BOOT.BIN固化地址为0x0,选择Flash Type为qspi_single,最后选择fsbl.elf文件并点击Program。

图 28

等待固化完成,提示“Flash Operation Successful”则表示固化成功。

图 29

若Console控制台打印如下信息,在Program Flash界面取消勾选Device选项的“Auto Detect”,手动选择设备,然后重新固化即可。

图 30

图 31

按上述步骤,再依次把u-boot.bin、PS端裸机/FreeRTOS程序以及PL端程序固化至对应地址上。u-boot.bin固化地址为0x40000,PS端裸机/FreeRTOS程序固化地址为0x100000,PL端程序固化地址为0x200000。

当固化非.bin格式文件时,需手动输入文件路径,再重新选择fsbl.elf文件(相当于刷新),方可点击Program。

图 32

图 33

如无需加载PL端程序,则可跳过下图步骤。

图 34

1.3.3从SPI FLASH启动程序

请将评估板拨码开关设置为100101(1~6),此档位为SPI FLASH启动模式。请将SD卡取下,评估板上电启动,并快速按下键盘空格键进入U-Boot命令行。执行如下命令,设置启动方式为appboot,并保存设置好的环境变量。

appboot环境变量用于引导PS端裸机或FreeRTOS程序。当评估板启动时,首先从SD卡中加载PL端程序和PS端裸机/FreeRTOS程序,然后运行。如果运行不成功(无法从SD卡中找到对应程序),再从SPI FLASH中加载PL端程序和PS端裸机/FreeRTOS程序,然后运行。

U-Boot# setenv bootcmd 'run appboot'

U-boot# saveenv

图 35

评估板重启后,即可看到评估底板的LED2进行闪烁,说明程序从SPI FLASH加载并运行成功。

图 36

1.4基于SD卡启动程序

BOOT.BIN位于产品资料“4-软件资料LinuxFSBLimageembeddedsw-[Git系列号]-[版本号]”目录下,u-boot.bin位于产品资料“4-软件资料LinuxU-Bootimageu-boot-2017.01-[Git系列号]-[版本号]”目录下。

请将BOOT.BIN、u-boot.bin、PS端裸机/FreeRTOS程序(xxx.elf),以及PL端程序(Bitstream-xxx.bin)(xc7z010对应xx_xc7z010.bin,xc7z020对应xx_xc7z020.bin),拷贝至系统启动卡BOOT分区或另外一张FAT32格式的SD卡。

图 37

将评估板拨码开关设置为101001(1~6),此档位为SD卡启动模式。评估板上电启动,并快速按下键盘空格键进入U-Boot命令行。

图 38

执行如下命令,指定待加载的PL端程序。PL端程序名请根据实际情况修改,如无PL端程序则无需执行此命令。

U-boot# setenv bitstream_image axi_gpio_led_demo_xc7z010.bin

执行如下命令,指定待加载的PS端程序。PS端程序名请根据实际情况修改。

U-boot# setenv app_image axi_gpio_led_demo_a9.elf

执行如下命令,设置启动方式为appboot,并保存设置好的环境变量。

appboot环境变量用于引导裸机或FreeRTOS程序。评估板启动时,首先从SD卡中加载PL端程序、裸机/FreeRTOS程序,然后运行。如果运行不成功(无法从系统启动卡找到对应程序),再从SPI FLASH中加载PL端程序、裸机/FreeRTOS程序,然后运行。

U-boot# setenv bootcmd 'run appboot'

U-boot# saveenv

图 39

评估板重启后,即可看到评估底板的LED2进行闪烁,说明程序从SD卡加载并运行成功。

图 40

如需运行Linux系统,请执行如下命令恢复为默认环境变量。

U-boot# env default -a

U-boot# saveenv

图 41

由于案例幅度篇章过长,本文仅分享了工程编译、程序加载与固化方法中下载器固化程序与SD卡启动程序的讲解,感谢关注,后续还有以下相关章节↓↓↓可以关注或点击账户查看!

2 裸机案例

2.1 led-flash案例

2.1.1 案例功能

2.1.2 操作说明

2.1.3 关键代码

2.2 key-led-demo案例

2.2.1 案例功能

2.2.2 操作说明

2.2.3 关键代码

2.3 uart-echo案例

2.3.1 案例功能

2.3.2 操作说明

2.3.3 关键代码

2.4 qspi-flash案例

2.4.1 案例功能

2.4.2 操作说明

2.4.3 关键代码

想要获取本案例的详细内容或更多案例,欢迎私聊或评论区留言,感谢关注!

0 人点赞