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