第四章 MIZ701 ZYNQ制作UBOOT固化程序


 

4.0難度系數★☆☆☆☆☆☆

4.1是什么是固化

我們前幾章將的程序都是通過JTAG先下載bit流文件,再下載elf文件,之后點擊Run As來運行的程序。JTAG的方法是通過TCL腳本來初始化PS,然后用JTAG收發信息,可用於在線調試。但是這樣只要一斷電,程序就丟失了。還得全部重新來過。

本章介紹通過制作鏡像文件,將鏡像文件拷貝到SD卡,然后將撥碼開關撥到SD啟動,那么每次斷電之后程序都會自動從SD啟動,程序就別固化,而不會掉電丟失了。

4.2固化的流程

wps3864.tmp

4.3固化准備

第三章中的實驗其實就是一個最簡單的“PS + PL”運用的體現。如果我們想固化這個程序,及為這個程序做一個鏡像文件,制作改鏡像需要哪些材料呢?

首先,想到的兩個文件就是PL部分需要的bit文件,以及PS需要的elf文件。但是僅僅是這兩個文件是遠遠不夠的。我們還需要一段代碼吧bit文件以及elf文件安置好。那么這段代碼就是大名鼎鼎的FSBL.elf。

所以要制作這樣一個鏡像文件我們需要:FSBL.elf、bit、elf。

最后得到一個等式就是:BOOT.bin = FSBL.elf+該工程.bit+該工程.elf。該工程的bit文件和elf文件在我們的程序編譯完之后都有了,關鍵是這個FSBL.elf這么那里找?不用擔心,FSBL.elf文件xilinx找就為我們准備好了,我們可以利用SDK生成它。再次之前,我們先簡單了解一下zynq的啟動的過程。

4.4 zynq的從SD卡的啟動的過程

和大多數arm啟動過程一樣,這個啟動過程也分為3個階段,這三個階段分別稱之為階段0、階段1和階段2。

階段 0:即傳統的BootROM過程,zynq芯片里有個rom里面固化了一段不可修改的程序,只有zynq一上電,這段程序就會執行,它將對zynq的NAND、NOR、SD等基本外設控制器進行初始化。把SD卡這類易失的存儲器件初始化好了之后,就會把其中的程序拷貝到zynq的OCM(On-chip memory),那么這個被拷貝到片上RAM執行的程序就是我們今天要制作的文件——BOOT.bin。

階段 1:BOOT.bin加載到OCM上就開始執行了,之前說過BOOT.bin其實就是由FSBL.elf+該工程.bit+該工程.elf構成。而階段1要做的就是:首先配置PS部分,PS完成初始化后,會去配置PL部分,最后還可以去加載階段 2的代碼。

階段 2:這一階段是可選的,主要是為了完成Linux系統啟動過程。我們這次是還是裸奔,所以暫時不需要。

4.5 zynq啟動模式位的選擇

這里有個疑問,眾所周知zynq具有多種啟動方式:NOR, NAND, Quad-SPI, SD Card 以及JTAG 。zynq如何判斷到底從哪里啟動呢?事實上,當上電后,zynq 會根據模式管腳的設定選用boot的方式。而這個管腳的設定是通過MiZ701按鍵旁的撥碼開。

SD卡啟動模式選擇撥碼開關1-2-5-6 為ON  接到GND     3-4 為OFF 上拉到VCC

wps3874.tmp

QSPI FLASH啟動模式選擇撥碼開關1-2-3-5-6為ON  接到GND   4 為OFF 上拉到VCC

wps3885.tmp

MiZ701模式選擇通過撥碼開關來實現,當撥碼開關ON狀態接通到GND 否則接通到3V3.

wps3886.tmp

MiZ701通過撥碼開關設置MIO的電平狀態

我們的開發板MiZ701默認撥碼的順序,就是默認的SD卡啟動,具體參看模式位應該如何選擇:

· MIO[2]/Boot_Mode[3]設置JTAG模式

· MIO[5:3]/Boot_Mode[2:0] 選擇Boot模式

· MIO[6]/Boot_Mode[4] 使能內部PLL

· MIO[8:7]/Vmode[1:0] 用於配置

wps3896.tmp

4.6 增加QSIP和SD硬件驅動

Step1:本章內容仍然是基於第三章的程序上做一些修改,主要增加QSPI FLASH  SD卡接口 I2C接口,具體配置如下圖所示。

wps3897.tmp

Step2:右擊 system 選擇Generate Output Products

wps38A8.tmp

Step3:右擊 system 選擇 Create HDL Wrapper

wps38A9.tmp

Step4:產生bit之后導入到SDK,並且啟動SDK(如果SDK工程的硬件描述重復了,可以刪除,然后重新導入)

4.7 BOOT.bin制作過程詳解

Step2:新建一個應用工程

wps38AA.tmp

Step3:填寫工程名,點擊Next

wps38BB.tmp

Step4:現在工程類型為Zynq FSBL

wps38BC.tmp

Step5:按下快捷鍵Ctrl + B編譯工程就能得到我們夢寐以求的FSBL.elf。這個文件可以到我們剛剛設置的工作空間的Debug目錄下找打,我這邊具體目錄是:D:\MiZ701\FSBL\FBLS\Debug。

wps38BD.tmp

Step6:單擊SDK的工具欄處的Xilinx Tool->Creat Zynq Boot Image

wps38CD.tmp

Step7:依次添加FBLS.elf,design_1_wrapper.bit,以及emio.elf,請務必按順序添加。

wps38CE.tmp

Step9:點擊add,添加FSBL.elf

wps38CF.tmp

Step10:點擊add,添加system_wrapper.bit

wps38E0.tmp

Step11:點擊add,添加EMIOTest.elf文件

wps38E1.tmp

wps38E2.tmp

Step12:三個文件添加完畢之后,點擊Creat Image生成BOOT.bin

在之前設定的文件夾下找到,BOOT.bin並且將其拷到SD卡中,再把SD卡插到MiZ701,打開電源,和上次工程出現的現象重現了,這次斷電之后,程序也不會消失了~~

最后提醒下放大SD卡的bin文件,一定得叫BOOT.bin,不然不識別。

4.8 從Quad-SPI啟動

Step1:設置配置模式

正確設置模塊開關跳線,也就是把MIO5切換到OFF(上拉為H)其他全部切換到ON(短接到GND)

wps38F2.tmp

Step2:給開發板通電,同時連接串口到PC(不是必須的可以不連接)

Step3:選擇Xilinx Tools > Program Flash

wps38F3.tmp

Step4:下載過程,需要幾分鍾時間

wps38F4.tmp

Step5:下載過程,輸出的情況

wps38F5.tmp

Step6:下載完成后斷電重啟,就能看到從QSPI FLASH加載了

4.9 本章小結

本章詳細講解了SD卡下UBOOT的制作過程和如果編程QSPI FLASH。這樣固化后程序就不容易丟失了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM