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


 

 

 

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

VIVADO 2017.4 QSPI FLASH 下載說明
Xilinx VIVADO 軟件版本更新到2017以后,QSPI FLASH 下載總是遇到各種奇葩的問題,用了好長時間,也沒有找到好的辦法解決,最近官方終於給出了解決辦法。當然這個辦法說的也並不是很清楚,需要自己猜和測試,一直對X的軟件無力吐槽。現在這個問題終於暫時解決了,下面向大家分享QSPI FLASH下載解決方法,如有不同意見歡迎批評指正。
1、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。

 

2、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時鍾)。
3、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,點擊Finish

選中工程(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。

4、總結
Xilinx 的軟件無力吐槽,不斷變換花樣,只能根據實際情況做相應的處理。大家不斷努力攻克問題,共同學習。
轉載說明:轉載請標明文章來源於常州一二三/米聯電子 。
參考鏈接:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM