【轉】VIVADO 2017.4 QSPI FLASH 下載說明 詳細解決FLASH沒法下載問題

 

 

 

轉載說明:轉載請標明文章來源於常州一二三/米聯電子 。html

VIVADO 2017.4 QSPI FLASH 下載說明
Xilinx VIVADO 軟件版本更新到2017之後,QSPI FLASH 下載老是遇到各類奇葩的問題,用了好長時間,也沒有找到好的辦法解決,最近官方終於給出瞭解決辦法。固然這個辦法說的也並非很清楚,須要本身猜和測試,一直對X的軟件無力吐槽。如今這個問題終於暫時解決了,下面向你們分享QSPI FLASH下載解決方法,若有不一樣意見歡迎批評指正。
一、QSPI FLASH 下載,官方說明。
XILINX官網中Xilinx Answer 70548和Xilinx Answer 70148提供了VIVADO 2017.3版本QSPI FLASH下載方法。
Xilinx Answer 70548內容以下:
QSPI編程要求器件以JTAG模式啓動,如program_flash輸出日誌所述。
初始化完成,編程內存
BOOT_MODE REG = 0x00000001
警告:[Xicom 50-100]當前啓動模式爲QSPI。
雖然強烈建議使用JTAG啓動模式,可是在QSPI啓動模式下啓動設備有一種解決方法。

 

從2017.3開始,爲Zynq-7000編程閃存須要您指定FSBL。 見  (Xilinx Answer 70148).
這個FSBL用於初始化系統(主要是運行ps7_init()函數)。
若是在QSPI引導模式下啓動,則此FSBL將嘗試從flash加載分區,從而致使flash編程的錯誤行爲。
經過如下修改,咱們將此FSBL(僅用於flash編程)限制爲基本上僅運行初始化(ps7_init())。
建立一個新的FSBL項目並添加如下更改(main.c)以將其用於SDK中的Flash編程。
/*
* Read bootmode register
*/
BootModeRegister = Xil_In32(BOOT_MODE_REG);
BootModeRegister &= BOOT_MODES_MASK;
//add this line to trick boot mode to JTAG
BootModeRegister = JTAG_MODE;
這能夠防止FSBL在編程運行時從Flash設備加載任何現有分區。
Xilinx Answer 70148內容以下:

 

從2017.3版本開始,Vivado硬件管理器和XSDK要求您指定FSBL以編程QSPI閃存。
這樣作是爲了在Zynq-7000和Zynq UltraScale +之間實現共同流程。
 

 

隨着這種變化,帶來不少影響
1) 用戶須要一個有效的FSBL
若是這個FSBL正在初始化DDR,那麼即便QSPI閃存編程沒有真正使用它,DDR也須要運行。
建議在FSBL中使用#define FSBL_DEBUG_INFO,以檢查在QSPI閃存編程期間FSBL的UART是否徹底執行而沒有掛起。
2) 若是您在Vivado 2017.3或2017.4中編程FLASH時遇到問題,請添加如下環境變量。
(2018.1不須要ENV變量):
XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ = 10000000
這將強制mini-uBoot將QSPI器件時鐘設置爲10 MHz。
注意:根據您的FSBL設計,您可能會在硬件上看到不一樣的QSPI時鐘。
3) 設備時鐘如今由FSBL而不是工具配置。
下面列出了該工具之前使用的配置。
若是您在編程閃存時遇到問題,則應根據此表檢查FSBL配置。
4) 對於XIP(從QSPI執行),須要在QSPI閃存編程期間,指定從OCM執行的自定義FSBL。

 

二、QSPI FLASH 下載,分析說明。
從官方的文檔中,通過分析和實際操做,總結如下信息。
(1)「指定fsbl」文件修改
根據文檔說明,從VIVADO 2017.3版本開始,Xilinx官方爲了使Zynq-7000和Zynq UltraScale +實現流程相同,在QSPI FLASH使用上作了變化,即Zynq-7000編程flash須要「指定的fsbl」。這個fsbl用於初始化系統(主要是運行ps7_init()函數)。
經過分析可知下載QSPI FLASH 的「指定的fsbl」文件與生成boot.bin文件的fsbl文件不一樣,這裏不能混淆。
QSPI編程要求器件以JTAG模式啓動。(由於在QSPI引導模式下啓動,則「指定的fsbl」將嘗試從flash加載分區,從而致使flash編程的錯誤行爲。致使不能下載flash或下載flash後不能啓動。)官方給出了修改方法,經過在「指定的fsbl」中的main.c中以下位置添加以下語句,防止FSBL在編程運行時從Flash設備加載任何現有分區。
/*
* Read bootmode register
*/
BootModeRegister = Xil_In32(BOOT_MODE_REG);
BootModeRegister &= BOOT_MODES_MASK;
//add this line to trick boot mode to JTAG 添加的語句
BootModeRegister = JTAG_MODE;
(2)環境變量修改
VIVADO 2018.1不要設置環境變量。
VIVADO 2017.3,VIVADO 2017.4版本下載QSPI FLASH須要設置環境變量。
變量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ
變量值:10000000
這麼作的目的是這將強制mini-uBoot將QSPI器件時鐘設置爲10 MHz(根據您的FSBL設計,您可能會在硬件上看到不一樣的QSPI時鐘)。
三、QSPI FLASH下載,操做說明。
軟件版本:VIVADO 2017.4
開發板:MIZ7035(xc7z035-ffg676)
(1) 新建環境變量
計算機à屬性à高級系統設置à高級à環境變量à新建系統變量
變量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ
變量值:10000000

(2) 生成BOOT.BIN文件
加載到SDK

新建fsbl工程,FileàNewàApplication Project,輸入fsbl,點擊Next。編程

選擇Zynq FSBL,點擊Finishapp

選中工程(helloworld),右擊,選擇Create Boot Image。函數

Boot image partitions包含三個文件,分別是fsbl.elf、system_wrapper.bit、helloeorld.elf。
Output BIF file path是bif數據文件路徑。Output path是BOOT.bin的輸出路徑。
單擊Create Boot Image。

在工程(helloworld)中生成bootimage文件。單擊打開bootimage,生成的BOOT.bin文件。工具

 

 

(3) 生成加載QSPI FLASH的fsbl文件
新建一個新的FSBL文件,命名爲fsbl_load。FileàNewàApplication Project,輸入fsbl_load,點擊Next。

打開fsbl_load的main.c文件,在此處增長「BootModeRegister = JTAG_MODE; 」保存並編譯。學習

(4) 下載
模式開關切換到QSPI啓動模式(1-ON ,2-OFF)。
單擊 Program Flash Memory

加載剛纔生成的BOOT.BIN文件和fsbl_load文件,單擊Program。測試

 

 

斷電,從新打開電源,開發板加載QSPI flash。this

四、總結
Xilinx 的軟件無力吐槽,不斷變換花樣,只能根據實際狀況作相應的處理。你們不斷努力攻克問題,共同窗習。
轉載說明:轉載請標明文章來源於常州一二三/米聯電子 。
參考連接:
一、 https://www.xilinx.com/support/answers/70548.html (Xilinx Answer 70548)
相關文章
相關標籤/搜索