一、啟動流程介紹
普通的 FPGA 一般是可以從 flash 啟動,或者被動加載,但是ZYNQ不行,ZYNQ必須PS端參與
ZYNQ 的啟動是由 ARM 主導(dǎo)的,包括 FPGA 程序的加載, ZYNQ 啟動一般為3個階段,最少2個階段:
1、階段0:Stage-0 Boot (BootROM)
階段0,主要是運(yùn)行芯片內(nèi)部固化的BootROM程序,這個BootROM主要是識別啟動模式(spi/sd/nand/nor/)是哪一種?
1)、根據(jù)啟動模式,設(shè)置相應(yīng)的外設(shè),當(dāng)然有引腳復(fù)用了,還有時鐘;
2)、將FSBL從啟動介質(zhì)中搬移到OCM(On-Chip Memory)中
3)、跳轉(zhuǎn)到FSBL處執(zhí)行,將控制權(quán)交給FSBL程序
2、階段1:FSBL(First Stage Bootloader )
FSBL(第一階段引導(dǎo)加載程序)在BootROM之后啟動,這個BootROM將FSBL加載到OCM(On-Chip Memory )
FSBL負(fù)責(zé)下面的幾項(xiàng)工作:
1)、初始化PS端的配置數(shù)據(jù)(使用Xilinx硬件配置工具提供的);
完成MIO分配、時鐘PLL、DDR控制器初始化,SD、QSPI控制器初始化
2)、通過啟動模式從啟動介質(zhì)讀取bitsttream文件,并用它燒寫PL端程序
3)、加載第二階段BootLoader或者邏輯代碼到DDR內(nèi)存
4)、切換到第二階段BootLoader或者邏輯代碼運(yùn)行
下圖是一個簡單的FSBL流程圖:
3、第二階段啟動流程:Second Stage Bootloader
第二階段引導(dǎo)加載程序是可選的,并由用戶設(shè)計(jì),一般是在跑系統(tǒng)的情況下使用,比如 linux 系統(tǒng)的u-boot(用petalinux 工具制作 linux 系統(tǒng) )
二、制作FSBL第一階段的啟動代碼
1、新建一個名為 fsbl 的 APP,特別注意硬件平臺選擇我們自己配置的ps_uart_warpper_hw_platform_0 ,點(diǎn)擊next
2、在彈出的對話框選擇Zynq FSBL,點(diǎn)擊Finish
3、然后軟件會自動的進(jìn)行編譯FSBL,時間看電腦的性能
4、等編譯完成,修改代碼,添加調(diào)試宏定義 FSBL_DEBUG_INFO
這個宏可以在啟動輸出 FSBL 的一些狀態(tài)信息,有利于調(diào)試,但是會導(dǎo)致啟動時間變長。
5、修改后保存, SDK 默認(rèn)會自動編譯,生成 fsbl.elf 文件。也可以右鍵點(diǎn)擊build project手動編譯
6、我們的工程文件夾包含很多外設(shè)文件ps7_init.c, nand, nor, qspi, sd 等
7、fsbl的 main.c 中,第一個運(yùn)行的函數(shù)就是 ps7_init ,這個fsbl內(nèi)容也可以根據(jù)自己需要進(jìn)行更改,例如加點(diǎn)自己的打印信息
8、創(chuàng)建 BOOT 文件
8.1、選擇 APP (就是我們的應(yīng)用:ps_uart_hello)工程,右鍵選擇 Create Boot Image
8.2、在彈出的對話框中可以看到BIF文件和BOOT.bin的生成路徑
BIF文件是生成BOOT.bin文件的配置文件;
BOOT.bin是我們需要的啟動文件,可以燒寫到SD卡、QSPI里
8.3、在彈出的對話框,Boot image partitions 列表中有要合成的文件
第一個文件一定是 bootloader 文件,就是上面生成的 fsbl.elf 文件;
第二個文件是 FPGA 配置文件 bitstream,本實(shí)驗(yàn)沒有PL端程序,所以bitstream,不需要添加;
第三個是應(yīng)用程序,在本實(shí)驗(yàn)中為 ps_uart_hello.elf
8.4、由于沒有 bitstream,在本實(shí)驗(yàn)中只添加 bootloader 和應(yīng)用程序。點(diǎn)擊 Create Imag
8.5、在生成的目錄下可以找到BOOT.bin文件
三、SD卡燒寫及測試
1、格式化 SD 卡,只能格式化為 FAT32 格式,其他格式無法啟動
2、放入 BOOT.bin 文件,放在根目錄
3、D 卡插入開發(fā)板的 SD 卡插槽
4、啟動模式調(diào)整為 SD 卡啟動
開發(fā)板設(shè)置撥碼為【 101001(1~6 SD卡 模式)】
5、打開串口,開發(fā)板上電
6、可以看到SD卡啟動成功,紅色部分為FSBL打印信息,綠色為我們的APP打印信息
7、SD卡固化成功
四、QSPI程序固化
QSPI 燒寫有2種方式:xSDK軟件燒寫、或者Vivado軟件燒寫
五、QSPI燒寫及測試(xSDK軟件燒寫)
首先將開發(fā)板設(shè)置為JTAG模式【 010101(1~6 JTAG 模式)】
1、在 SDK 菜單 Xilinx -》 Program Flash
2、參數(shù)配置
《1》、Hardware Platform 選擇我們自己定制的平臺;
《2》、Image FIle 文件選擇要燒寫的 BOOT.bin;
《3》、FSBL file 選擇創(chuàng)龍定制的 fsbl.elf,只有用這個 fsbl 才能燒寫(我會另寫一篇博客單獨(dú)寫怎么定制fsbl.elf文件);
《4》、選擇 Verify after flash,在燒寫完成后校驗(yàn) flash
3、注意:第一次固化的時候,里面有uboot在執(zhí)行,燒寫不成功,所以要先在軟件點(diǎn)固化,然后快速給開發(fā)板上電
4、將啟動設(shè)置為QSPI【 100101(1~6 QSPI 模式)】,驗(yàn)證固化有沒有成功
5、打印的信息和我們在DUBUG的時候一致,代表我們固化成功
五、QSPI燒寫及測試(vivado軟件燒寫)
1、在 HARDWARE MANGER 下選擇器件,右鍵 Add Configuration Memory Device
2、選擇嘗試 Winbond,類型選擇 qspi,寬度選擇 x4-single,這時候出現(xiàn) w25q128
選擇紅框型號,開發(fā)板使用 MT25QL256ABA1EW9-0SIT,但是不影響燒錄
3、在彈出的對話框,提示我們是否立即燒寫,點(diǎn)擊OK
選擇ps_uart_hello/bootimage/目錄的BOOT.bin,選擇fsbl/debug/目錄下的fsbl.elf文件
4、提示我們當(dāng)前是處于QSPI模式的,如果編程失敗,請更改模式,再次重試
5、我們將啟動模式改為JTAG模式【 010101(1~6 JTAG 模式)】
6、斷電上電,再次嘗試燒寫,沒有剛才的警告信息了
7、再將啟動模式切換為QSPI模式,QSPI【 100101(1~6 QSPI 模式)】,驗(yàn)證固化有沒有成功
六、到此PS端的程序固化成功
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238 -
FlaSh
+關(guān)注
關(guān)注
10文章
1614瀏覽量
147655 -
程序
+關(guān)注
關(guān)注
116文章
3756瀏覽量
80751 -
Zynq
+關(guān)注
關(guān)注
9文章
607瀏覽量
47101
原文標(biāo)題:學(xué)員筆記精選 | ZYNQ7000系列基本開發(fā)流程 之 《PS端程序固化》篇
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論