[PCFG_INIT])

FSBL

FSBL主要初始化更多的外设(如DDR)、初始化PL部分和加载SSBL或裸机程序等。

主要过程如下:

① 初始化MIO、PLL、CLK等,ps7_init()中所做

② 根据vivado(或XPS)中设置完成PS端初始化

③ 判断启动设备(决定于寄存器slcr.BOOT_MODE)并从中扫描并加载.bit和SSBL或裸机程序

④ 用.bit配置PL部分(FSBL通过PCAP控制器配置PL部分)

⑤ 加载SSBL或裸机程序到DDR中

⑥ 跳转到SSBL或裸机程序中执行

对于FSBL程序通常使用SDK中自带模板,但是不同于BootROM不可改变,FSBL可以手动修改实现一些自定义的内容。而且可以像裸机程序一样调试排错(在fsbl_debug.h中定义宏FSBL_DEBUG_INFO(#define FSBL_DEBUG_INFO)可以查看FSBL打印的调试信息)

注意:由于OCM大小为256KB,而在BootROM阶段OCM高64KB(OCM 从0x0000_0000开始192KB,从0xffff_0000开始64KB)用于存储BootROM头信息和变量,在BootROM执行完成后才可用于FSBL,所以FSBL大小要小于192KB。

其它说明:

•  当从外部器件中启动为非加密模式时,才能使用JTAG进入调试模式

•  直接在NOR or Quad-SPI中运行的FSBL必须为非加密模式

•  FSBL大小要小于192KB,但是直接在flash器件(NOR or Quad-SPI)中直接运行的情况没有这个限制

•  AES一次只能解密1Byte,所以PCAP在4个时钟周期内只能发送一个32bit数据(加密配置时)

SSBL

通常SSBL就是裸机程序,对于linux启动来说就是u-boot之类的bootloader。

对于没有使用PL部分的设计,即只把zynq当做普通ARM来使用,则完全可以不用FSBL,而通过BootROM直接加载裸机程序并运行(使用方式和注意事项请看“zynq的三种启动方式(JTAG,SD,QSPI)”)。

以上内容主要来源为UG585

关于嵌入式技术就介绍完了,您有什么想法可以联系小编。