ZYNQ的上电时序主要参考的UG585。
PS_POR_B 复位引脚解除断言后,硬件立即对引导带引脚进行采样,并可选择启用 PS 时钟 PLL。
然后,PS 开始执行片上 ROM 中的 BootROM 代码以启动系统。
POR 会重置整个设备,而不会保存先前的状态。
非 POR 类型的复位也会导致 BootROM 执行,但硬件不会对引导带引脚进行采样。
非 POR 复位后,一些寄存器值会保留,设备会知道其先前的安全模式。
非 POR 复位包括 PS_SRST_B 引脚和几个内部复位源。
BootROM 是 APU 中运行的第一个软件。
BootROM 在 CPU 0 上执行,CPU 1 执行等待事件 (WFE) 指令。 BootROM 的主要任务是配置系统,将引导映像 FSBL/用户代码从引导设备复制到 OCM,然后将代码执行分支到 OCM。
(此处,FSBL是可以编辑的,这里可以参考我之前写的:ZYNQ的程序固化~AMP跑双核_zynq amp固化-CSDN博客)
(可见,脱离执行等待事件 (WFE) 指令需要CPU0为其执行一个SEV(系统事件)指令来进行唤醒(这个不是我写的):zynq双核AMP实验之cpu1唤醒代码_startcpu1();-CSDN博客)
(这里给一个实例代码,其中 Xil_Out32 向指定位置写入了CPU1需要运行的程序的地址)
#define CPU1STARTADR 0xFFFFFFF0 #define CPU1STARTMEM 0x2000000 #define sev() asm(“sev”) void StartCpu1(void) { Xil_Out32(CPU1STARTADR, CPU1STARTMEM); dmb(); //waits until write has finished sev(); }
可选地,FSBL/User 代码可以直接从非安全环境中的 Quad-SPI 或 NOR 设备执行。
PS 主引导设备包含一个或多个引导映像。
引导映像由 BootROM Header(也称为 Boot Image Header)和第一阶段引导加载程序 (FSBL) 组成。
引导设备还可以包含比特流来配置 PL 和嵌入式操作系统,但 BootROM 代码无法访问这些比特流。
用于引导的闪存设备可以是 Quad-SPI、NAND、NOR 或 SD 卡。
BootROM 执行流程受引脚带设置、BootROM Header 以及 BootROM 代码发现的有关系统的信息的影响。BootROM 可以在具有加密 FSBL/User 代码的安全环境中执行,也可以在非安全环境中执行。BootROM 执行后,FSBL/User 代码将负责系统,如 Zynq-7000 SoC 软件开发人员指南 (UG821) 中所述。
对于开发,系统可以在 JTAG 模式下启动。或者,可以在非安全闪存设备启动后启用 JTAG。JTAG 始终意味着非安全环境,但它允许访问 CPU 复合体 (APU) 中的 Arm 调试访问端口 (DAP) 控制器和 PL 中的 AMD 测试访问端口 (TAP) 控制器。
标签:引导,FPGA,引脚,代码,FSBL,时序,ZYNQ,BootROM,执行 From: https://www.cnblogs.com/VerweileDoch/p/18235122