1.ZYNQ启动流程

ZYNQ是一个可扩展处理平台,可以看成一个有FPGA外设的A9核处理器。它的启动流程自然也和传统的ARM处理器类似。 

ZYNQ支持从多种设备启动,包括JTAG,NAND,parallel NOR,Serial NOR (Quad-SPI),以及SD卡。通过几个特殊的MIO引脚的状态来确定启动设备。 

ZYNQ的启动流程如下:


  1. 在器件上电运行后,处理器自动开始Stage-0 Boot,也就是执行片内BootROM中的代码。
  2. BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码。将选定设备的头192Kbyte内容,也就是FSBL(First Stage Bootloader),复制到OCM(On Chip Memory)中,并将控制器交给FSBL。
  3. FSBL启动时可以使用整块256Kb的OCM,然后初始PS,下载bit文件(也可以以后加载),将动用的SSBL(Second Stage Bootloader),或者裸奔程序,复制到内存中。
  4. 运行SSBL。
  5. 运行Uboot,启动Linux。 

2.FSBL生成

打开一个vivado工程,进行编译和综合,生产bit文件。然后打开​​Diagram​​,并在当前界面显示,如图1所示。 

ZYNQ平台学习--(2)生成FSBL_弹出菜单


图2 工程设置

点击​​File​​-​​Export​​-​​Export Hardware...​​。勾选​​Include bitstream​​,使用默认路径,点击​​OK​​,如图2所示。 

ZYNQ平台学习--(2)生成FSBL_启动流程_02


图2 工程设置

点击​​File​​-​​Launch SDK​​,使用默认路径,点击点击​​OK​​,启动SDK,如图3所示。 

ZYNQ平台学习--(2)生成FSBL_启动流程_03


图2 工程设置

进入SDK后,点击​​File​​-​​New​​-​​Application Project​​,弹出项目新建向导,输入项目名,点击​​Next​​,如图4所示。 

ZYNQ平台学习--(2)生成FSBL_弹出菜单_04


图2 工程设置

在项目模板中选择​​Zynq FSBL​​,点击​​Finish​​,如图5所示。然后SDK就会生产对应的项目。 

ZYNQ平台学习--(2)生成FSBL_c++_05


图2 工程设置

在​​Project Explorer​​窗口中,选择FSBL项目,点击右键,在弹出菜单中选择​​Build Project​​,对项目进行编译,如图6所示。 

ZYNQ平台学习--(2)生成FSBL_弹出菜单_06


图2 工程设置

编译完成后,会在​​Debug​​文件夹中生成ELF文件,该文件既为FSBL文件。

3.FSBL打印调试信息

为了方便调试,查找问题,需要在启动的过程中,打印一些调试信息。FSBL已经提供了很多调试信息,需要进行设置后,才能打印出来。 

在​​Project Explorer​​窗口中,选择FSBL项目,点击右键,在弹出菜单中选择​​C/C++ Build Settings​​,弹出设置菜单。 在窗口的左边选择​​C/C++ Build​​-​​Settings​​,然后选择​​Tool Settings​​子窗口,在子窗口中选择​​ARM gcc compiler​​-​​Symbol​​,添加​​FSBL_DEBUG_INFO​​这个预编译选项。如图7所示,然后点击​​OK​​。 

ZYNQ平台学习--(2)生成FSBL_c++_07


图2 工程设置

然后重新编译,生产ELF文件。

在BSP中,默认使用UART0输出调试信息。如果想要从UART1输出调试信号,需要需改system.mss文件。 

在​​Project Explorer​​窗口中,选择FSBL项目的BSP,双击​​system.mss​​,打开文件,如图8所示。 

ZYNQ平台学习--(2)生成FSBL_弹出菜单_08


图2 工程设置

点击​​Modify this BSP's Settings​​,弹出配置菜单。然后配置菜单中选择​​Overview​​-​​standalone​​,将​​stdin​​和​​stdout​​的值都改为​​ps7_uart_1​​。如图9所示。 

ZYNQ平台学习--(2)生成FSBL_启动流程_09


图2 工程设置

然在​​system.mss​​上点击​​Re-generate BSP Sources​​,重新编译FSBL项目,生产ELF文件