軟體版本:Anlogic -TD5.9.1-DR1_ES1.1
作業系統:WIN10 64bit
硬體平臺:適用安路(Anlogic)FPGA
實驗平臺:米聯客-MLK-L1-CZ06-DR1M90G開發板
板卡獲取平臺:https://milianke.tmall.com/
登入"米聯客"FPGA社群 http://www.uisrc.com 影片課程、答疑解惑!
1概述
在應用的除錯過程中,我們可以直接將其下載到DDR(或者其他介質)中執行,但處於非除錯模式(例如部署到生產環境)時,則需要透過儲存介質啟動 app。Soc的啟動遵循固定的流程,且支援從不同的介質中啟動。
實驗目的:
1:熟悉FPSoc啟動模式型別和硬體設定
2:熟悉FPSoc啟動的過程
3:掌握ARM IP SD介面啟動和QSPI FLASH啟動的設定
4:利用FD製作BOOT.BIN檔案
5:完成SD卡啟動實驗
6:完成QSPI啟動實驗
2FPSoc的啟動
2.1啟動流程
DR1 系列 FPSoC 的啟動是透過 PMU 和 BSU 的協調配合實現的。
PMU(Platform Management Unit)模組是 SoC系統管理模組,主要功能如下:
- 系統初始化與啟動
- 系統時鐘復位管理
- 系統異常監控與處理
BSU(Boot Security Unit)子系統內含一個 CPU,負責 bootROM 的執行以及加密驗籤等操作。大致分為如下四個流程:
PMU 階段(固定的上電時序)
在此階段硬體將 eFUSE 中內容讀取到暫存器中,PL進入初始化階段,初始化結束後 PL 送往 PS 的init_ok 訊號拉高表示初始化結束。
PS 釋放 POR reset,對 PLL 等模組初始化,釋放外設 reset,取樣啟動模式配置管腳並將其寫入B00T_MOD 暫存器,釋放 APU/RPU/DDR/匯流排reset,最後釋放 BSU reset。
bootROM 階段
BSU reset 被釋放後,開始執行片內 ROM 中的固化的程式碼,也叫bootROM。bootROM 的執行流程是由啟動模式配置管腳、eFUSE 內容、boot header、以及 bootR0M中的內容決定的。bootROM讀取 BOOT_MOD暫存器並初始化相應的啟動裝置,之後bootR0M搜尋有效 image 並讀取 boot header(啟動頭部,其中包含描述映象屬性的一些引數,如映象偏移地址、長度、加密屬性等),根據boot header 對系統進行配置並將FSBL(First Stage Boot Loader,即第一階段啟動程式)載入到 0CM 中,在安全啟動情況下bootROM 會進行FSBL 的解密和驗籤操作,最後釋放FSBL 目標 CPU 的復位狀態, 啟動 FSBL 執行。
FSBL 階段
bootROM執行之後,系統交由FSBL 接管。APU0或RPU從OCM執行 FSBL,FSBL 完成以下操作:DDR/PLL 初始化。若需要配置 PL,則需要判斷 Init ok 是否拉高:
若 init_ok =1,APU/RPU 將bit資料讀入記憶體,經過必要的程式(解密、驗籤)後寫入 PCAP,然後等待 PL 的反饋訊號 done 拉高。
SSBL階段
以上啟動流程結束,交由使用者接管。根據使用者選擇,SSBL可以是u-boot等boot loader,也可以是使用者程式。
之後的流程中 PMU 主要在復位管理、異常監控和處理時使用:BSU 在使用者程式需要時進行加密/解密、簽名/驗籤操作。
2.1啟動模式的設定
系統啟動模式分為PS Master 啟動模式和 JTAG Slave 啟動模式。
2.1.1 JTAG Slave 啟動模式
DR1 系列 FPSOC 支援 JTAG 啟動模式,JTAG 啟動模式為非安全啟動,在該模式下允許透過 JTAG 介面訪問 PS 和 PL,主要用於使用者進行 debug。在 JTAG 模式下,bootROM 關閉系統看門狗,釋放 CPU reset並使 CPU陷入迴圈,並且使能 JTAG 介面。在非安全的PS Master 啟動模式下 JTAG介面同樣可以訪問。有關 JTAG 的詳細資訊請參考 JTAG 和系統除錯章節。
2.1.2 PS Master 啟動模式
該模式下,系統從外部Fash裝置啟動,bootROM 完成啟動裝置初始化,從啟動裝置中搜尋並讀取boot header、驗證 boot header 完整性、載入 FSBL 到 OCM 並啟動執行目標 CPU。PS Master 啟動模式可以在安全啟動或非安全啟動下使用。
2.1.3 啟動模式選擇
硬體上模式開關為SW1,原理圖如下
如下圖所示把SW1模式開關切換到ON-ON,就是設定JTAG啟動
若要SD卡啟動,如下圖所示把SW1模式開關切換到OFF-OFF,就是設定SD啟動
若要QSPI啟動,如下圖所示把SW1模式開關切換到ON-OFF,就是設定QSPI啟動
3搭建SDK工程
直接使用"01Vitis Soc開發入門"這個demo中已經建立好的工程實現。雙擊開啟FD軟體
設定好路徑,開啟sdk工程
完成載入後,我們選擇使用hello_world完成固化。
4 SOC程式固化
使用儲存介質啟動 app 時先要構建 fsbl,它的功能是為 app 準備好 SoC的初始化,例如時鐘、外設、PL 端位元流的配置等,並進行 PL 端的配置和 app 的載入與執行配置。
在 fsbl、app 等就緒之後,需要使用"Create Boot lmage"功能將這些檔案打包為 boot.bin 檔案並將其下載到儲存介質中後,將啟動模式設定為對應的儲存介質。這樣便能從儲存介質中正常啟動。
4.1建立FSBL檔案
FSBL 的本質為 app,故參照在 fd 中構建 app 工程的步驟便可,與其他 app 的區別為 fsbl 工程的template 要選擇 FSBL_V1_0。
點選build,完成FSBL檔案的編譯。編譯完成後,產生fsbl.elf檔案
4.2BOOT.BIN產生的方法
找到Create Boot Image工具,單擊選擇。
在建立BOOT.BIN檔案中我們需要設定bin檔案的路徑,我們選擇存放在uisrc/05_boot路徑下方便管理。
點選ADD依次新增
點選建立,顯示建立完成
可以看到建立的BOOT.BIN檔案
4.3QSPI的啟動
4.3.1燒錄方法
支援JTAG模式的核心板下載很便捷,首先把SW1模式開關全部設定成JTAG模式。
開啟Program Flash固化工具
按照要求配置完成,配置如下圖所示,點選Program
等待校驗完成
4.3.2從QSPI啟動
設定SW1模式開關為QSPI模式 (設定模式開關請務必斷電完成)
為了觀察實現結果,需要開啟串列埠。如果不清楚串列埠號的,可以檢視下裝置管理器,如果發現沒裝串列埠驅動的安裝上驅動
開啟FD自帶的串列埠工具,設定好串列埠號,點選OK
開發板上電,在QSPI模式下啟動
4.4SD卡啟動
設定SW1模式開關為SD卡模式(設定模式開關請務必斷電完成)
為了觀察實現結果,需要開啟串列埠。如果不清楚串列埠號的,可以檢視下裝置管理器,如果發現沒裝串列埠驅動的安裝上驅動
開啟FD自帶的串列埠工具,設定好串列埠號,點選OK
把之前產生的BOOT.bin檔案複製進SD卡,將SD卡插入TF卡槽
開發板上電,在SD模式下啟動