新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 詳細解讀Zynq的三種啟動方式(JTAG,SD,QSPI)

        詳細解讀Zynq的三種啟動方式(JTAG,SD,QSPI)

        作者: 時間:2017-10-13 來源:網絡 收藏

        本文介紹zynq上三種方式啟動文件的生成和注意事項,包括只用片上(OCM)和使用DDR3兩種情況。

        本文引用地址:http://www.104case.com/article/201710/365728.htm

        JTAG方式

        JTAG方式是調試中最常用的方式,在SDK中
        在“Project Explorer”窗口工程上右鍵->Debug As->Debug ConfiguraTIons可以看到以下窗口


        首次打開左邊窗口中 C/C++ applicaTIon(GDB)下沒有子項,這時雙擊 C/C++ applicaTIon(GDB)即可新建一個調試;
        這時右邊窗口會自動填充如上圖,若沒有則手動填入;
        在右邊ApplicaTIon窗口指定要下載調試的.elf文件;
        在右邊STDIO Connection可以指定標準輸入輸出串口,即printf打印串口,若這里選擇開發板上uart的com口,則調試時printf的信息打印到調試時Console窗口,同時也可從Console窗口輸入數據,以此將數據通過串口發送到開發板上
        以上設置完成后點擊Debug即可開始調試;
        若以上在“Project Explorer”窗口工程上右鍵->Run As->Run Configurations;配置與此類似,最后點擊run即可開始運行,只是不是調試而是直接上板運行。

        只用OCM

        只用OCM指不使用DDR3的方式,與使用DDR3的方式略有不同。這里不用FSBL來加載PL部分的.bit文件和第二階段啟動程序(裸機程序),而直接用BootROM加載裸機程序到OCM,即將裸機程序當做FSBL來運行,當然還要以下處理才可以:
        包含進頭文件:#include “ps7_init.h”
        在裸機程序main函數開始處調用:ps7_init()
        從design_1_wrapper_hw_platform_1目錄復制ps7_init.c和ps7_init.h文件到裸機程序所在的src目錄中

        注意:這里樣調用ps7_init()只適用于只用OCM的情況,經測試打開DDR3后再這樣調用會在ps7_init()中初始化失敗,調試發現在初始化PLL時失敗(原因未知)。

        為何要調用ps7_init()呢?從上面圖片調試可以看到初始化文件(Initialization files)ps7_init.tcl,其與ps7_init()效果相同;同時在調試配置窗口右下角也可以看到“Summary of operations to be performed”也有調試時的運行過程,也有調用ps7_init等,之后再加載要調試的elf;由于不是通過JTAG運行,所以沒有運行這里ps7_init.tcl中,所以直接在裸機程序開始處調用ps7_init()。

        這里沒有使用FSBL,不能加載.bit文件(zynq啟動過程另介紹),所以只適用于沒有使用PL(包括PL邏輯或PL的IO等)的情況;由于OCM大小為256KB,而在BootROM階段只能訪問192KB,所以“只用OCM”時要求裸機程序小于192KB才行。

        從SD啟動

        要從SD卡啟動,則需要BOOT.bin文件(添加了BootROM識別的頭信息文件),生成方式如下:

        在“Project Explorer”窗口工程上右鍵->Create Boot Image 或 Tools ->Create zynq Boot Image;可以得到以下界面


        通常打開該窗口后各項已填好,否則需要
        1、選擇Create new BIF file
        2、然后選擇BIF文件目錄
        3、在Boot image partitions中Add裸機程序.elf文件,要將Partition type選擇為bootloader
        確定輸出文件為BOOT.bin后點擊Create Image即可生成

        此時只要將BOOT.bin復制到SD卡,設置板子為SD卡啟動,重新上電即可。

        從QSPI啟動

        有了以上SD啟動的操作,從QSPI就比較簡單了,查看部分資料,燒寫到QSPI需要.mcs文件,在Create Boot Image中生成BOOT.bin的同時也生成了.mcs文件,但是在我使用SDK版本中(2015.3)生成BOOT.bin文件時發現沒有.mcs文件,再查資料發現可以通過bootgen命令可以生成.mcs文件;最后從Create Boot Image窗口的上面部分有說明,只要將輸出文件BOOT.bin的后綴改為.mcs即可生成.mcs格式文件。有了.mcs文件就可以下載了,Xilinx Tools ->Program Flash得到以下窗口

        選擇.mcs文件點擊Program即可。細心的朋友可以發現在選擇.mcs文件時也可以選擇.bin文件,經測試直接選擇.bin文件下載到flash也可以成功啟動,可能這就是新版SDK中不同時生成.mcs文件的原因吧。

        然后設置板子為QSPI啟動,重新上電即可。

        使用DDR

        使用DDR方式即可需要使用FSBL來加載裸機程序,同時當然也支持配置PL部分.bit文件。所以除了裸機程序工程外還需要建立FSBL程序工程,該工程直接用SDK自帶FSBL模板即可,如下圖

        注意選擇使用與裸機程序同一個BSP;點擊next

        這里選擇Zynq FSBL,然后點擊finish即可生成FSBL工程。

        注意:若提示不能創建則通常是在BSP中沒有打開對應的庫(xilffs和xilrsa),如下圖

        在“Project Explorer”窗口BSP上右鍵->Board Support Package Setting,打開兩個庫即可

        從SD啟動

        類似的,從SD卡啟動也需要BOOT.bin文件,生成方法類似前面,只是在Create zynq Boot Image窗口需要Add:
        選擇FSBL作為bootloader
        選擇PL部分.bit文件
        選擇裸機程序.elf

        以上順序需要注意,如下圖

        同上,這時只要將BOOT.bin復制到SD卡,板子設置為SD卡啟動,在板子重新上電即可。

        從QSPI啟動

        類似只用OCM的情況,將.bin下載然后然后設置板子為QSPI啟動,重新上電即可。

        這里需要特別注意,“使用DDR”時用SD卡和QSPI啟動需要在vivado中將zynq上SD模塊和QSPI模塊打開,不像“只用OCM”時不打開這些模塊也能啟動;分析查看FSBL程序可知必須要定義了XPAR_PS7_DDR_0_S_AXI_BASEADDR才能從SD或QSPI啟動,所以這里也必須打開DDR模塊。

        注意
        調試或下載出錯時推薦處理步驟,直到問題解決
        . 重新插拔下載器
        . 板子斷電后上電
        . 關閉SDK重新打開(同時最好只打開一個SDK)
        . 檢查調試選項,是否設置好
        . 檢查zynq設置(如當用到DDR時,若選擇DDR型號不對也是不能調試的)

        若啟動不正常可以嘗試調試FSBL:
        . 若要查看FSBL打印調試信息,則在fsbl_debug.h中定義宏FSBL_DEBUG_INFO(#define FSBL_DEBUG_INFO),當然在調試設置中也要設置STDIO為對應UART(默認波特率為115200)或使用其它UART查看打印信息
        . 調試FSBL時注意,當改變板子啟動方式后需要重新上電或POR復位后才生效



        關鍵詞: Xilinx RAM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新津县| 南岸区| 卢龙县| 大石桥市| 平凉市| 宣威市| 云和县| 夏河县| 社旗县| 贺兰县| 凌海市| 临海市| 宁国市| 通山县| 自治县| 绿春县| 保亭| 贡嘎县| 绥江县| 石屏县| 丰顺县| 南通市| 民丰县| 云龙县| 安吉县| 平陆县| 息烽县| 无为县| 民丰县| 砀山县| 仁怀市| 维西| 宿迁市| 剑阁县| 曲沃县| 淮阳县| 博罗县| 陆川县| 华蓥市| 息烽县| 冕宁县|