[米聯客-安路飛龍DR1-FPSOC] SDK入門篇連載-02 FPSoc程式固化入門

米联客(milianke)發表於2024-08-05

軟體版本: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(或者其他介質)中執行,但處於非除錯模式(例如部署到生產環境)時,則需要透過儲存介質啟動 appSoc的啟動遵循固定的流程,且支援從不同的介質中啟動。

實驗目的:

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 中的固化的程式碼,也叫bootROMbootROM 的執行流程是由啟動模式配置管腳、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 接管。APU0RPUOCM執行 FSBLFSBL 完成以下操作:DDR/PLL 初始化。若需要配置 PL,則需要判斷 Init ok 是否拉高:

init_ok =1APU/RPU bit資料讀入記憶體,經過必要的程式(解密、驗籤)後寫入 PCAP,然後等待 PL 的反饋訊號 done 拉高。

SSBL階段

以上啟動流程結束,交由使用者接管。根據使用者選擇,SSBL可以是u-bootboot 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 並啟動執行目標 CPUPS 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 的載入與執行配置。

fsblapp 等就緒之後,需要使用"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.2QSPI啟動

設定SW1模式開關QSPI模式 (設定模式開關請務必斷電完成)

為了觀察實現結果,需要開啟串列埠。如果不清楚串列埠號的,可以檢視下裝置管理器,如果發現沒裝串列埠驅動的安裝上驅動

開啟FD自帶的串列埠工具,設定好串列埠號,點選OK

開發板上電,在QSPI模式下啟動

4.4SD卡啟動

設定SW1模式開關SD卡模式(設定模式開關請務必斷電完成)

為了觀察實現結果,需要開啟串列埠。如果不清楚串列埠號的,可以檢視下裝置管理器,如果發現沒裝串列埠驅動的安裝上驅動

開啟FD自帶的串列埠工具,設定好串列埠號,點選OK

把之前產生的BOOT.bin檔案複製進SD卡,將SD卡插入TF卡槽

開發板上電,在SD模式下啟動

相關文章