前言
Zynq啟動流程和ARM處理器類似,PS部分是啟動和配置過程的主設備,芯片引導必須由處理器驅動,系統上電復位后會讀取設備模式引腳來決定從什么設備啟動芯片。如下表Boot Devices條目所示,其中黃色代表該條目下的默認設置,比如Boot Devices默認設置是SD Card,默認從SD卡啟動芯片
下圖中的JP7-JP11的5個條線帽就是用於設置設備模式引腳電平的
啟動步驟
PS確定好從什么設備啟動后,接着的啟動過程分為以下三個階段
0. Stage-0 執行BootROM代碼,不可修改
- Stage-1 執行FSBL(first boot loader)代碼,用戶可修改。
如果是裸機程序也可以不需要這個階段直接跳到下一階段。 - Stage-2 執行用戶裸機程序或者操作系統的啟動引導程序SSBL(second boot loader)
關於BootROM:位於Zynq片內,功能是初始化L1 cache和基本的總線系統,以及從指定的外部存儲器加載Stage-1的FSBL代碼到片內存儲器(OCM)。但是要使Stage-0之后的代碼被Stage-0的BootROM識別,還需要為Stage-0之后的代碼(可能是Stage-1的FSBL,
也可能是Stage-2的裸機程序,因為沒有調用BSP函數的裸機程序是可以不需要FSBL的)添加一個頭部,制作成引導鏡像。可以使用SDK的BootGen工具為裸機程序elf文件創建引導鏡像Boot.bin,將其復制到SD卡中,並且設置板子從SD卡啟動就可以執行程序。
使用SDK工具創建SD卡啟動鏡像
BOOT.BIN= f(FSBL.elf+PL.bit+PS.elf)
PL.bit和PS.elf
采用vivado 創建PS工程中生成的PL.bit和PS.elf。
制作FSBL.elf
新建Zynq FSBL工程
等待工程建立完畢,FSBL.elf就在工程文件夾的Debug文件夾下
制作BOOT.BIN
使用SDK的Create Boot Image
選擇好output路徑放置生成的BOOT.BIN和output.bif。依次添加FSBL.elf、PL.bit、PS.elf,FSBL.elf文件的Partition type選擇bootloader,其余兩個文件選擇datafile。最后Create image
啟動
將BOOT.BIN復制到SD卡,設備模式引腳設為SD卡啟動,板子上電之后就可以觀察到程序運行
下圖沒有接usb線,只接了電源線,這是從SD卡啟動了