参考:Ug585
一、BootRom
硬件复位(PS_POR_B)结束后,采集boot strap pins并且配置一些参数。,然后PS执行BootRom代码。(BootRom:片上ROM,用来启动系统)
non-POR复位也会执行BootRom,但不会采集strap pins。
non-POR包括PS_SRST_B和一些内部的复位
BootRom代码是APU里运行的第一个软件代码,BootRom中的代码不可修改
BootRom在CPU0中执行,CPU1执行wait-for-event
第一个启动的软件是BootRom代码,然后是FSBL/用户代码,最后是系统代码。BootRom的主要任务是配置系统、将启动镜像FSBL/用户代码拷贝到OCM中。
FSBL:第一启动阶段引导程序,裸机应用程序想要加载到DDR中是靠FSBL引导的
如果BootRom文件头是无效的,那么它会继续查找其它的文件头,在其范围里直到查找到了一个正确的文件头。文件头查找支持QSPI、NAND、NOR,而SD卡仅支持查找一次文件头。
Bootrom头文件包含一打参数来指导bootrom运行流程,例如可以选择安全模式,即加密状态下的一个参数。头文件包含了镜像参数的长度,这个长度定义了FSBL/用户代码加载到OCM中运行的长度,该长度被限制在192KB.
二、启动镜像
PS的主启动器件可以包含一个或多个启动镜像
启动镜像由BootRom文件头和FSBL组成
如果包含了PL的程序,启动器件也可包含比特流和嵌入式操作系统
PS的主启动模式:
在主启动模式下,从flash存储器中启动系统,BootRom会配置PS来访问启动器件。
在加密模式下,总是由CPU将启动镜像拷贝到OCM中。然后,发送到AES/HMAC单元进行解密和认证。BootRom完成后,解密的启动镜像会被写回到OCM
在非加密模式下,BootRom文件头可以指示PS直接在非易失性存储器里执行(即不把它们拷贝到OCM中)。(也可以拷贝到OCM中运行)
JTAG可以访问ARM的DAP控制器和PL的TAP控制器
在JTAG启动模式下,BootRom代码配置最小系统并使能JTAG接口。然后,系统会进入空闲状态来等待DAP控制器重启CPU0.级联的JTAG模式会环回DAP和TAP控制器,这是最常规的JTAG模式。
三、ZYNQ启动过程
启动过程
PS:
- 所有寄存器复位,硬件读取MIO模式引脚(固定的几个MIO)
- JTAG、DDR等处于一个除能的状态
- 根据模式引脚的设置判断是否使能PLL,若PLL处于旁路状态,则进入下一个状态;否则,使能PLL
- Bootrom执行:对ZYNQ芯片做一些最基本的外设初始化、从一些非易失性存储器中将FSBL读到OCM。读取成功则进入下一个阶段,失败则锁定。
- FSBL对DDR等更多外设初始化,继续从启动镜像里读取比特流或裸机应用程序。 运行操作系统、裸机
PL:
- 上电状态
- 初始化状态:在安全模式下PL此时必须要上电完成
- 配置、使能状态:FSBL应用程序是可以清除、配置应用程序或使能PL的逻辑
在PS参考时钟的45个时钟周期内,硬件会采集7个启动模式引脚
FPGA bit文件:定义PL的行为
软件ELF文件:运行在PS中的程序
ZYNQ无法只固化PL的程序,固化PL的程序必须加入PS
ZYNQ中,PL可以看作是PS的一个外设,需要由PS来配置PL
PL的配置通过PCAP进行,PS启动运行之后,PL可以在任意时刻被配置
启动模式引脚
模式引脚MIO[8:2]:
前四个引脚定义启动模式
第五个引脚定义是否使用PLL
第六、七个引脚定义上电过程中bank0和bank1的电压
流程总结
- ZYNQ的启动由片上的bootrom开始,bootrom的代码会首先在片外的非易失性存储器中寻找一个头文件(头文件里定义了一些启动信息,用于配置bootrom的运行)。
- Bootrom执行之后,到了FSBL阶段(由设计者所创建)
FSBL工作内容总结:
初始化PS
如果提供了bit文件,则配置PL
加载裸机应用程序到DDR中,或者加载SSBL
开始执行裸机应用程序或SSBL
重建一个ZYNQ的启动镜像需执行以下文件:
3. Bootrom头文件:控制bootrom设置(如就地执行、加密、FSBL偏移量、镜像文件大小等)
4. FSBL
5. PL配置文件,即bit文件
6. 运行在PS上的软件应用程序
启动镜像=bootrom头文件(软件自动生成,bootrom用)+FSBL/用户代码ELF文件+PL的bit流(可选)+系统/应用程序ELF文件(可选)。