前言:
前面我們都是使用JTAG方式下載比特流文件,然后下載elf文件,最后點擊Run as或者Debug as來運行程序。JTAG方式是通過tcl腳本來初始化PS,然后用JTAG收發信息,優點是可以在線調試,缺點是斷電后程序就丟失了。為了解決程序丟失的問題,可以制作鏡像文件燒寫到sd卡或者flash中,上電即可加載程序。
ZYNQ有兩大類啟動模式:從BootROM主動啟動,從JTAG被動啟動。
在沒有外部JTAG的情況下,處理系統(PS)與可編程邏輯(PL)都必須依靠PS來完成芯片的初始化配置。即借助CPU來完成配置,這也是ZYNQ系列的不同之處。
板子依然使用的是zc702.
啟動模式設置:
zynq 具有多種啟動方式: NOR, NAND, Quad-SPI, SD Card以及 JTAG 。 zynq 如何判斷從哪里啟動呢? 上電后, zynq 會根據模式管腳的設定選用 boot 的方式。 而這個管腳的設定是通過核心板上的撥碼開關實現的。zc702的撥碼開關是sw16。
The ZC702 board supports these configurationoptions:
? PS Configuration: Quad SPI flash memory
? PS Configuration: Processor System Boot from SD Card (J64)
? PL Configuration: USB JTAG configuration port (Digilent module)
? PL Configuration: Platform cable header J2 and flying lead header J58 JTAG configurationports
JTAG啟動:
配置界面如下:
設置完之后點擊Apply-->Debug即可開始調試,Run as類似。
通過制作鏡像文件在外設控制器中啟動,也稱之為固化。固化需要三個文件:FSBL.elf、該工程的bit文件、該工程的elf文件,由此三個文件制作一個BOOT.bin文件。
那么通過外設啟動的過程是怎樣的呢?
分為三個階段,大多數的ARM都是這個啟動過程。
階段0:即傳統的 BootROM 過程, zynq 芯片里有個 rom 里面固化了一段不可修改的程序, 只有 zynq 一上電, 這段程序就會執行, 它將初始化CPU和 NAND、 NOR、 SD卡等基本外設。初始化好,BootROM讀取存儲器中的程序代碼,并將FSBL拷貝到OCM(On-chip memory)里 , 這個被拷貝到片上 RAM 執行的程序就來自于我們要制作的文件——BOOT.bin。
階段1:第一階段引導程序(First Stage Boot Loader,FSBL)啟動,BOOT.bin開始執行:首先繼續配置PS,PS初始化好后,再配置PL,最后還可以加載階段2的代碼。
階段2:開始執行PS端代碼,也可以是第二階段引導程序(Second Stage Boot Loader,SSBL)。完全在用戶的控制之下,是可選的。
啰嗦第二遍:
BootROM負責:
1.上電復位以后,PS端即開始進行配置。在不使用JTAG的情況下,ARM將在片上的BootROM中開始執行代碼。BootROM中的代碼對NAND、NOR、Quad-SPI、SD與PCAP的基本外設控制器進行初始化,使得ARM核可以訪問、使用這些外設。(而DDR等其他外設將在階段1或者之后進行初始化。)
2.BootROM讀取MIO[2..8]的引腳設置來確定啟動設備,將選定設備的頭192Kbyte內容,也就是FSBL,復制到OCM中,并將控制權交給FSBL。
FSBL啟動時可以使用整塊256Kb的OCM,當FSBL開始運行后,器件就正式由由用戶控制了。
FSBL負責:
1.根據Vivado中的配置,完成PS端的初始化。
2.使用比特流文件對PL進行配置
3.加載第二階段引導程序(SSBL)或者裸跑程序(直接在ARM上運行無操作系統程序)到內存空間。
4.跳轉執行SSBL或者裸跑程序。
關于PS配置:
Ps7_init.c和ps7_init.h,用于初始化CLK,DDR和MIO。Ps7_init.tcl完成的初始化和ps7_init.c代碼完成的初始化是相同的。
由于不是通過JTAG運行,所以沒有運行p7_init.tcl,直接在裸機程序開始處調用ps7_init()。
Xilinx為我們寫好了一個FSBL程序,沒有特殊要求可以直接使用。
制作BOOT.bin文件:
1.Vivado那邊完成之后,打開sdk,新建應用工程
工程名設為FSBL
點擊next選擇自帶的FSBL程序,右邊是FSBL功能介紹
點擊Finish會自動編譯,在Debug目錄下可以找到FSBL.elf文件
2.點擊Xilinx Tools ->Create zynq Boot Image
一般 該添加的文件它都會幫你添加好。
需要添加的文件如下:
在FSBL文件夾下新建一個bootImage文件,點擊Browse,將輸出指向這里
點擊add,先添加FSBL.elf文件,作為bootloader
再添加hw_platform下的.bit文件,這是PL部分的
最后添加裸機程序.elf文件
都添加完如下圖:
以上三個文件的添加順序不可變,點擊Create Image,就可以生成BOOT.bin文件了,默認的輸出路徑在bootImage下。
SD卡啟動
1.將生成的BOOT.bin文件拷貝到SD卡中,2.啟動模式設置為SD卡啟動,上電,程序就可以運行了。
我這里的現象led閃爍,斷電再上電,程序依然在,從SD卡加載的。
Flash啟動
1.啟動模式設置為QSPI啟動,
2.開發板上電,
3.點擊Xilinx tool-->Program Flash
4.點擊Program
下載好后程序就固化了,斷電后重啟,程序從QSPI Flash加載。
如果你使用已經存在的bsp文件時出現這種情況:
右鍵那個bsp工程,點擊Board Support Pacage Setting,勾選這兩個庫
總結:
主流的下載方式就這三種,基本可以滿足你的一切需要了。
編輯:hfy
-
FlaSh
+關注
關注
10文章
1621瀏覽量
147754 -
cpu
+關注
關注
68文章
10825瀏覽量
211150 -
JTAG
+關注
關注
6文章
398瀏覽量
71600 -
Zynq
+關注
關注
9文章
608瀏覽量
47128
發布評論請先 登錄
相關推薦
評論