03-ZYNQ学习(启动篇)之程序的固化

上一节我们只使用ZYNQ的PL端资源,单独控制PL端的LED实现流水灯:https://blog.csdn.net/fengyuwuzu0519/article/details/54923413但是掉电后程序会丢失,那么如何固化代码到FLASH呢?就是本节的目的了。

一、ZYNQ的启动流程

        ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡里启动, 本节介绍程序 FLASH 启动的方法。Zynq7000 SOC 芯片上电后,最先运行的是ARM端系统(PS)。然后再通过ARM系统软件部分加载FPGA的比特流文件.bit至FPGA(PL),配置FPGA PL端的逻辑功能。

如果是linux开发:

        则只需固化uboot到boot.bin。这样系统启动后,除了配置FPGA端资源,ARM端则运行uboot,uboot负责加载内核到指定位置并启动内核开始运行。

1.1 ZYNQ启动分为两个阶段

  • 第一阶段是 BOOT ROM(ZYNQ厂家固化代码)
  • 第二阶段是 FSBL (First Stage Bootloader)SDK工具来制作。

经过以上两个阶段,PL端配置程序及arm端程序才开始运行。

1.1 第一阶段 (BOOT ROM)

  • 上电后,Zynq7000 SOC 会首先执行片内 Boot ROM 代码,Boot ROM 代码读取 Boot mode 寄存器来判断是哪一种启动方式(SD card/QSPI Flash/JTAG)。
  • 确定好哪种启劢方式后,Boot ROM 从相应的启动设备(SD Card/QSPI Flash)加载 First Stage Bootloader (FSBL) 到On Chip Memory(OCM) RAM,并且将执行权交付给 FSBL。

1.2 第二阶段 FSBL (First Stage Bootloader)

使用SDK 工具一步步生成 FSBL 代码和可执行文件,结合代码可知 FSBL 主要做了如下工作:

  • 初始化 CPU,初始化串口;
  • Processor System (PS) 一些控制器的初始化,如 MIO, PLL, CLK and DDR;
  • 禁止 L1 Data Cache;
  • 注册 ARM 中断向量;
  • 通过 Boot mode 寄存器,判断是哪种启动方式。

1.2.1 QSPI Flash 启动方式:

  • 初始化 QSPI Flash 控刢器;
  • 从 Flash 拷贝 system.bit 到 FPGA (如果 Flash 中存有 system.bit);
  • 从 QSPI Flash 拷贝应用程序的代码到DDR3;
  • 调转到应用程序执行;

1.2.2 SD Card 启动方式:

  1. 初始化 SD 控刢器;
  2. 从 SD Card 拷贝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);
  3. 从 SD card 拷贝应用程序的代码到 DDR3;
  4. 跳转到应用程序执行;

1.2.3 JTAG 启动方式,直接退出。

2 制作BOOT.bin

2.1 新建项目

参考LED实验时创建工程的方式:https://blog.csdn.net/fengyuwuzu0519/article/details/54923413

2.2 配置PS端资源、启动SDK、生成BOOT.bin

(1)ZYNQ 的PS开发一般有原理框图的形式来设计,这样硬件的连接看起来会更加直观。点击 Create Block Design 按钮来添加原理图设计文件。

在弹出的对话框里输入原理图设计文件的名字,返里我们取名为"system"。

(2)出现 Diagram 的空白对话框,点击 图标+添加 ARM 处理器内核到这个空白的原理图里。

返里有很多 Xilinx 提供的 IP,我们找到 ZYNQ7 Processing System 双击添加,不要选择后面带 BFM(总线功能模型),带 BFM 的 IP 为早期IP 处理器版本。

(3)双击 Diagram 界面里的 ZYNQ Processing System,打开 ZYNQ 系统的配置界面。

其中 Page Navigator 界面下有 8 个子项,分别为 Zynq Block Design, PS-PL Configuration,Peripheral I/O Pins, MIO Configration, Clock Configuration, DDR Configuration, SMC Timing Calculation, Interrupts。这些页面选项是针对 ZYNQ 的不同硬件模块的配置,其中

PS_PL 页面提供了 PS 到 PL 的相关接口配置信息以及 PS 部分一些配置信息;

Peripheral I/O Pins 页面主要是对一些通用外设接口的配置;

MIO Configruation 页面主要是对 MIO 已经EMIO 的分配控制;

Clock Configruation 页面主要是对 PS 端时钟资源的配置和管理;

DDR Configration 页面主要是对 DDR控制器一些参数的配置;

Interrupts 页面主要是对中断进行配置管理。

(4)点击 Peripheral I/O Pins ,会出现以下的 IO 配置界面。

因为 ZYNQ 的MIO 管脚可以配置成多种功能,比如 MIO48 和 MIO49, 既可以配置成 SD1引脚,也可以是 UART1 引脚,或者是 I2C1 引脚,也可以配置成 CAN1 引脚。具体如何配置需要跟硬件电路板的原理图对应。我们 MIO48 和 MIO49 是连接到 UART 芯片上,是作为串口通信使用。使能SD、 Quad SPI Flash。

(5)点击 PS-PL Configuration ,在 Gemeral 目录下,我们可以看到UART1 波特率是115200,这个波特率用户可以自己选择,我们返里就保留默认设置就可以了。

(6)点击 Clock Configuration ,返个界面会显示 ZYNQ 系统的一些时钟,比如输入时钟是33.33333Mhz, 这个时钟跟我们开发板上的 PS 的系统时钟是一样的。另外我们可以看到 CPU工作时钟是 666.666666Mhz(767Mhz), DDR 的工作时钟是533.333333Mhz,还有些是外设的工作时钟。这些时钟频率我们目前不需要修改。

(7) 再打开 DDR Configration,在这个界面上是选择 DDR 芯片的名称和一些参数。我们再 Memory Part 中需要选择跟开发板上 DDR3 型号一样的名称(MT41J256M16 RE-125)。

(8) 在 MIO Configuration 顷,把 Quad SPI Flash 的 MIO1~MIO6 Speed 配置成 fast 模式。

在 SD_0 项,选择 CD 前面的钩,IO 选择 MIO47(需要跟开发板一致),SD_0 的 IO 速度配置成 fast 模式。再配置 Bank1 I/O Voltage 的电压为 1.8V。

(9)在 Clock Configuration中,我们可以修改 QSPI 癿时钟频率,默认是 200Mhz。这里不做修改。

(10)在 Diagram 界面里点击"Run Block Automation"完成对 ZYNQ7 Processing System IP核的配置,生成外部 ZYNQ 系统的外部链接 IO 管脚。

生成后的 ZYNQ 系统外部管脚如下,一个是 DDR 的接口,一个是 FIXED_IO。

(11)在 Source 窗口中选中 system.bd,右键并先后选择Generate Output Projects 和 Create HDL Wrapper 选顷迕行操作。生成后如下图所示:

(12)在system_wrapper.v中例化LED程序,并添加相应的管教约束文件。具体可参考PL端的流水灯实验。

(13)重新编译一下工程,生成 bit 文件。

(14)再导出硬件,选择菜单 File->Export->Export Hardware...导出,包含bitstram 文件。

(15)硬件导出后,选择菜单 File->Launch SDK,启动 SDK 开发环境, 会出现1 个 hardware platform:sytem_wrapper_hw_platform_0。

(16)进入SDK 开发环境后,点击菜单 File -> New -> Application Project。

(17)仅在 Project name: 输入 fsbl,Hardware Platform 需要选择system_wrapper_hw_platform_0。

next,选择 Zynq FSBL 模板

(18)软件会自动编译生成 fsbl.elf 文件。

(19)为了能够让串口打印出 Bootloader 癿信息,我们返里需要在 fsbl_debug.h 文件里添加一条语句,定义一下“FSBL_DEBUG_INFO”常量。修改后保存,重新编译一下 fsbl 项目。

(20)接下去我们要把 FSBL 可执行文件,FPGA PL的bit比特流文件和PS应用程序结合成一个 Bin 文件。

选择菜单 Xilinx Tools->Create Boot Image:

点击 Browse 选择选择 Zynq Boot Image 文件.bif 的存放地址。

(21)点击 Add按钮, 在弹出的Add new boot image partition 对话框中, 点击 Browse 选择我们刚生成的 FSBL 可执行文件 fsbl.elf。返里 Partition type 为 bootloader,fsbl.elf 作为bootloader 程序。

(22)点击 Add 按钮,在弹出的 Add new boot image partition 对话框中, 点击 Browse 按钮找到 FPGA PL的比特流文件 system_wrapper.bit, 这里 Partition type 为 datafile。

(23)同样的方法添加应用程序文件如uboot。 返里 Partition type 也是 datafile。3 个文件添加后如下所示:

(24)点击 Create Image 按钮,生成 BOOT.bin。BOOT.bin 文件生成成功。

3、烧写 FLASH 并启动

把生成癿 BOOT.bin 文件烧写到 QSPI FLASH 中

(1)开发板需要连接 JTAG 线到电脑,把开发板的上电启动配置跳线帽选择至 QSPI Flash 启劢,并上电。

(2)在 SDK开发环境里,选择菜单 Xilinx Tools->Program Flash。

(3)在 Program Flash Memory 里, Hardware Platform 中选择 system_wrapper_hw_platform_0, 烧写癿 Image File 选择刚生成的 BOOT.bin 文件,Flash Type 选择 qspi_single。

(4)点击 Program 按钮下载,程序会开始下载 BOOT.bin 文件到开发板的 QSPI FLASH 中。

Console 窗口显示 Flash Operation Successful 信息,说明烧写成功。

(5)断电重新上电,如果开发板连接串口,我们可以在串口工具里看到 bootloader 的启动信息。

  • 22
    点赞
  • 203
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: UG585-Zynq-7000-TRM是一份关于Xilinx Zynq-7000 SoC处理器的技术参考手册。Zynq-7000 SoC处理器是一款配备ARM Cortex-A9双核处理器和Xilinx可编程逻辑部分(PL)的可扩展平台,旨在为嵌入式系统开发者提供卓越的灵活性和可编程性。 TRM代表Technical Reference Manual(技术参考手册),其中包含了该处理器的体系结构和功能特性的详细描述,包括处理器内部的各种模块、外设、总线结构等等。该手册的主要目的是为开发者提供全面的指导和支持,从而加速其系统设计和开发应用,减少错误和风险。 UG585-Zynq-7000-TRM手册的内容包括Zynq-7000的基本特征、处理器硬件和软件架构、可编程逻辑PL和PS之间的通信、外设接口和寄存器映射、中断控制等内容。开发者可以根据手册中的详细说明,了解Zynq-7000的构成和功能,从而基于此设计和实现自己的应用。 总之,UG585-Zynq-7000-TRM手册是一份非常重要的技术参考资料,为开发者提供全面的指导和支持,促进了Zynq-7000处理器的应用和拓展,也为未来的嵌入式系统设计提供了参考和借鉴。 ### 回答2: UG585是Xilinx公司发布的Zynq-7000系列技术手册,全称为“Zynq-7000 All Programmable SoC Technical Reference Manual”。Zynq-7000系列是Xilinx公司推出的一款功能强大的FPGA芯片,集成了双核ARM Cortex-A9处理器和可编程逻辑资源,支持高性能中间件、操作系统和外围设备的支持。该手册详细介绍了Zynq-7000系列SoC的架构、功能、性能、测试和验证、软件和硬件开发等方面的知识。他对于学习、使用和开发Zynq-7000 SoC具有非常重要的意义,使得开发人员能够深入了解这个芯片的细节,掌握它的特性和功能,以便更加高效地使用它进行开发。如果你想要学习和使用Zynq-7000 SoC,UG585是一个非常重要的参考文献,值得认真阅读和研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值