學會Zynq(6)固化程式到SD卡或QSPI Flash
SDK除錯程式時都是通過JTAG,將PL的bit流檔案和應用程式的ELF檔案下載到Zynq中,執行檢視效果。除錯驗證功能後需要將程式固化到板子上,使板子上電後可以從儲存單元中載入程式,而無需SDK的除錯環境。Zynq支援多種儲存裝置,本文將介紹如何將程式固化到常用的SD卡和QSPI Flash中。
配置SD卡
首先要檢視開發板原理圖中SD卡與MIO的連線關係。以火龍果Red Pitaya開發板為例,外部的SD卡插槽通過一個SDIO埠擴充套件晶片與PS的MIO40-47相連。
配置Zynq時在外設中選擇與硬體對應的SD0,可以看到SD訊號與硬體之間保持對應關係(因為這部分硬體設計是比較固定的)。CD和WP訊號可能不是所有的開發板都有,根據硬體實際情況進行選擇。
在Peripheral I/O Pins視窗中,我們可以看到其實可以選擇3組MIO作為SD0,硬體設計時選擇其中一組用於SD卡儲存即可。
Clock Configuration的IO Peripheral Clocks中,可以看到SDIO的預設時脈頻率為100MHz。該時鐘的設定應該處於SD卡支援的範圍內。
配置QSPI Flash
同樣也要檢視開發板原理圖中QSPI Flash與MIO的連線關係。以火龍果Red Pitaya開發板為例,QSPI Flash晶片與MIO1-6相連。
配置Zynq時選中與硬體對應的QSPI Flash,訊號與硬體之間保持對應關係。
在Peripheral I/O Pins視窗中,我們可以看到QSPI Flash只能通過MIO1-6與Zynq相連,硬體設計時要特別注意。
同樣在IO Peripheral Clocks中,也可以配置QSPI的時脈頻率,應該處於QSPI Flash晶片支援的範圍內。
Zynq啟動模式的選擇
如果板子上有多種程式儲存裝置,Zynq在上電時通過一些MIO的電平狀態決定採用哪種啟動模式,具體見下表。可以看到主要與MIO3-5三個管腳有關。
米聯的MZ7XA開發板整合了QSPI和SD卡,控制啟動模式的電路圖如下:
從表中可以看到QSPI和SD卡的區別僅在於MIO4,通過一個撥碼開關控制模式間的切換,其它MIO固定拉高或拉低即可。注意這個板子的原理圖設計時MODE0-4與上表中的BOOT_MODE0-4並不對應,不要混淆。
火龍果開發板的設計要更簡潔。它將其它MIO的電平固定拉高或拉低,MIO4直接由SD卡的檢測訊號驅動,實現了SD卡和QSPI啟動模式之間的自動切換。
製作BOOT.bin
BOOT.bin就是儲存在SD卡或QSPI Flash中的程式,上電時Zynq會從外部儲存裝置將BOOT.bin讀取到片記憶體儲器中執行。製作BOOT.bin除了需要bit流檔案和ELF檔案外,還需要一個FSBL檔案。FSBL主要用於Zynq第一階段的初始化,SDK中已經提供了現成的FSBL檔案,對於絕大多數應用只要稍許修改即可使用。
為了使用現成的FSBL,先新建一個工程,使用示例工程中的Zynq FSBL工程模板。
選中要建立BOOT映象的工程,右鍵->Create Boot Image。一般情況下,SDK會自動設定BOOT.bin的輸出路徑,自動新增工程中的bit流檔案和ELF檔案,以及工作環境中存在的FSBL.elf檔案。
固化程式
將匯出的BOOT.bin檔案拷貝到SD卡中,插在開發板上接通電源,可以觀察到在沒有JTAG的情況下程式便會自動載入執行。注意Zynq的啟動模式要設定正確。
連線好JTAG並接通電源,點選Xilinx Tools->Program Flash Memory開啟如下視窗:
選擇要下載到Flash中的映象檔案,點選Program即可將BOOT.bin匯入到QSPI Flash中。將啟動模式切換為QSPI Flash啟動,在不接JTAG的情況下重新上電,也可以看到程式自動載入後執行。至此便完成了程式的固化。
一開始如果對Zynq的開發流程不是很熟,很容易出現刷進去了BOOT.bin但程式沒跑起來的情況。這時候要先確保ELF程式在JTAG模式下是已經無誤的(如果DDR3就配置錯了,就算程式碼是對的,程式也會跑不起來),然後要檢查Vivado中硬體平臺環境配置問題,相應的外設是否啟用,SD卡的時鐘是否過高等等。
相關文章
- 儲存圖片到SD卡SD卡
- 學會Zynq(10)lwIP簡介
- 學會Zynq(1)搭建Zynq-7000 AP SoC處理器
- 學會Zynq(3)Zynq的軟體開發基礎知識
- 學會Zynq(2)Zynq-7000處理器的配置詳解
- 學會Zynq(11)RAW API的TCP和UDP程式設計APITCPUDP程式設計
- 基於反熔絲FPGA、QSPI FLASH的高可靠程式儲存、啟動控制系統FPGA
- ZYNQ FLASH+EMMC手動移植LINUX啟動Linux
- 學會Zynq(8)PL中斷示例(SPI)
- 學會Zynq(7)中斷系統簡介
- 學會Zynq(9)定時器使用示例(PPI)定時器
- 蘋果新款MacBook Pro可能會有SD卡插槽蘋果MacSD卡
- arduino使用SD卡模組以及檢查SD卡資訊UISD卡
- 學會Zynq(5)GPIO中EMIO的使用方法
- 學會Zynq(4)GPIO中MIO的使用方法
- 學會Zynq(12)lwIP 1.4.1庫的配置與使用
- FPGADesigner《學會Zynq》系列目錄與傳送門FPGA
- MacBook Pro 最新預測!新款 MacBook Pro 或加入 SD 卡槽及 HDMI 介面Mac
- SD(TF)卡原理設計
- SD卡資料恢復SD卡資料恢復
- 簡單仿QQ登入介面,儲存資訊到sd卡SD卡
- 香橙派: 複製系統到新sd卡(系統備份)SD卡
- SD卡分割槽時需要注意什麼?SD卡分割槽注意事項SD卡
- 最新資訊:蘋果新款MacBook Pro可能會有SD卡插槽蘋果MacSD卡
- 相機SD卡照片恢復SD卡
- 【esp32 學習筆記】讓SD卡發光發熱~筆記SD卡
- RT-Thread Studio驅動SD卡threadSD卡
- Linux掛載隨身碟,SD卡LinuxSD卡
- 三星SD卡PRO Plus怎麼樣?三星SD卡PRO Plus詳細評測SD卡
- Xilinx-ZYNQ7000系列-學習筆記(7):解決ZYNQ IP核自動佈線後會更改原有配置的問題筆記
- 製作Linux系統SD啟動卡Linux
- Arduino+ESP32 之 SD卡讀寫UISD卡
- sd卡中的資料夾刪除了怎麼恢復,SD卡刪除的檔案如何恢復SD卡
- win10怎麼修復sd卡_win10系統sd卡受損的修復步驟Win10SD卡
- win10平板不識別sd卡怎麼辦_win10平板讀不出sd卡解決方法Win10SD卡
- 學會了ES6,就不會寫出那樣的程式碼
- sd卡防寫不能格式化win10_win10系統sd卡防寫怎麼格式化SD卡Win10
- 【Android APK】解析SD卡上的APK檔案AndroidAPKSD卡