tb一下 发表于 2021-8-30 10:17:22

【Zynq】zynq固化原理

Zynq中有五种可能的启动源:NAND、NOR、SD卡、Quad-SPI和JTAG。前四个启动源用于主启动方法,在主启动方法中,CPU将外部启动映像从非易失性内存加载到PS中。而JTAG是从引导模式,仅支持非安全引导。外部主机作为主机,通过JTAG连接将引导映像加载到OCM中。通常为了使开发板在断电重新上电后自动运行某个程序,我们需要对其进行固化,也就是通过前四种方式。


zynq芯片在上电后,首先会运行PS端,随后PS端加载.bit文件至PL端,配置相应寄存器。zynq在启动时大致分为以下三个流程:


阶段0:BOOT ROM
该阶段会自动运行一段厂家预定好的代码BOOT ROM,主要通过读取启动引脚寄存器完成对启动方式的判定。该阶段用户不可编辑,在上电后,zynq会自动运行该部分代码。在确定好了启动方式后,便会加载First Stage Bootloader (FSBL)或用户代码到On ChipMemory(OCM)的RAM上,进行下一步。
阶段1:FSBL(First Stage Bootloader)
第一阶段引导程序(First Stage Boot Loader,FSBL)启动,开始执行BOOT.bin文件:首先继续配置PS,PS初始化好后,再配置PL,最后还可以加载阶段2的代码。BOOT.bin 其实就是由FSBL.elf+该工程.bit+该工程.elf 构成(其中该工程.bit和该工程.elf在程序编译完成后便已产生 )。在这一阶段用户需要使用SDK工具一步步生成FSBL代码和可执行文件。该阶段完全由用户控制,.elf文件为连接文件,参与程序的连接与执行;.bit文件则是我们较为熟悉的配置文件,该阶段在配置PL时,也是依靠该文件。该阶段主要完成如下工作:
[*]初始化CPU,初始化串口;
[*]Processor System (PS) 一些控制器的初始化,如 MIO, PLL, CLK,DDR;
[*]使用比特流文件对PL进行配置;
[*]将应用程序加载到DDR或者加载 Second-Stage Boot Loader(SSBL);

阶段2:完成Linux系统启动过程(U-BOOT)
该阶段为可选阶段,通常是系统软件。该阶段可以直接运行基于BSP的裸机程序(不带任何操作系统),也可以读取第二阶段引导加载程序(second Stage Boot Loader,SSBL),对于Linux而言该阶段运行的就是uboot。该阶段完全由用户控制,在不使用到操作系统的场合一般会跳过该阶段。
在实际工程应用时,用户只需在SDK中一步步生成好工程代码和可执行文件后固化到开发板即可,在系统断电重启后便会自动运行固化好的程序。

页: [1]
查看完整版本: 【Zynq】zynq固化原理