北京軒宇空間科技有限公司,北京 100086
ZYNQ7000 全可編程SOC 基于Xilinx 全可編程可擴(kuò)展處理平臺結(jié)構(gòu),其內(nèi)部集成了ARM 公司的雙核Cortex?-A9 處理器系統(tǒng)(processing system,PS)和Xilinx 的可編程邏輯單元(programmable logic,PL),真正實(shí)現(xiàn)了軟件和硬件的協(xié)同設(shè)計[1],同時也大大縮短了系統(tǒng)的開發(fā)時間。因此,ZYNQ7000 全可編程SOC 在嵌入式領(lǐng)域得到了廣泛的應(yīng)用。本文所研究的內(nèi)容是基于ZYNQ7000系列XC7Z100 主控芯片實(shí)現(xiàn)的。
以往的產(chǎn)品都是通過預(yù)留的調(diào)試接口進(jìn)行應(yīng)用軟件更新,現(xiàn)要求產(chǎn)品在組裝前不能含有與整機(jī)無關(guān)的冗余接口,同時具備應(yīng)用軟件更新的功能。經(jīng)調(diào)研發(fā)現(xiàn),大部分產(chǎn)品都是使用調(diào)試接口進(jìn)行應(yīng)用軟件更新,還有的產(chǎn)品具有應(yīng)用軟件更新的專用接口。為了解決正式產(chǎn)品組裝完成后主控板應(yīng)用軟件更新的問題,復(fù)用了主控板和外部的RS422 串口。在需要進(jìn)行軟件更新的時候,通過此RS422 串口向主控制板傳輸新版本的應(yīng)用軟件數(shù)據(jù)包,否則用此RS422 串口和外部進(jìn)行正常的數(shù)據(jù)通信。
基于ZYNQ7000 系列XC7Z100 主控芯片的最小系統(tǒng)框圖如圖1 所示[2]。
圖1 XC7Z100 主控芯片的最小系統(tǒng)
DDR3 的型號為MT41J256M16HA-125,選用2 片組成32 位內(nèi)存模組,總?cè)萘繛? GB;SPI-Flash的型號為S25FL256SAGMFI001,總?cè)萘繛?2 MB;PS 和PL 的工作時鐘分別是33.3 MHz 和50 MHz[3];RS422 接口芯片為LTC2851,采用3.3 V的電源,支持20 Mbps 的最高數(shù)據(jù)速率;電源模塊為最小系統(tǒng)提供1.8 V、3.3 V、5 V 等供電。
經(jīng)查閱資料可知,ZYNQ7000 全可編程SOC啟動與配置過程包含以下3 個階段:
階段1該階段也稱為BootRom,主要用于控制初始設(shè)備的啟動。BootRom 是系統(tǒng)復(fù)位后,處理器所執(zhí)行的用戶不可修改的代碼,該部分代碼已經(jīng)固化到BootRom 中[4?5]。
階段2該階段通常執(zhí)行第一級啟動引導(dǎo)程序(first stage boot loader,F(xiàn)SBL)[6]。
階段3該階段一般執(zhí)行用戶自己的軟件程序。
基于以上啟動與配置的過程,為了實(shí)現(xiàn)采用串口進(jìn)行應(yīng)用軟件更新,需要在第3 階段先執(zhí)行具有應(yīng)用軟件更新功能的程序(簡稱監(jiān)控軟件),然后由監(jiān)控軟件控制接下來的程序流程,即系統(tǒng)上電后首先由階段2 引導(dǎo)啟動監(jiān)控軟件,若需要進(jìn)行應(yīng)用軟件更新,則在上位機(jī)軟件的配合下進(jìn)行應(yīng)用軟件數(shù)據(jù)包更新;若不需要更新應(yīng)用軟件,則5 s 后監(jiān)控軟件進(jìn)行系統(tǒng)軟復(fù)位[7],開始啟動現(xiàn)有的應(yīng)用軟件。采用串口進(jìn)行應(yīng)用軟件更新的系統(tǒng)啟動流程如圖2 所示。
圖2 系統(tǒng)啟動流程
FSBL 的主要功能為根據(jù)啟動標(biāo)志選擇啟動監(jiān)控軟件還是應(yīng)用軟件[8],啟動標(biāo)志為0x5A5A 時啟動應(yīng)用軟件,否則啟動監(jiān)控軟件。在系統(tǒng)軟件進(jìn)入軟件復(fù)位流程且復(fù)位執(zhí)行前將啟動標(biāo)志配置為0x5A5A,軟件復(fù)位后在FSBL 中完成啟動區(qū)域判別后再將啟動標(biāo)志配置為0xFFFF。這樣每次系統(tǒng)上電后都先啟動監(jiān)控軟件,而每次系統(tǒng)軟件復(fù)位后都會啟動應(yīng)用軟件。
綜上所述,采用串口實(shí)現(xiàn)應(yīng)用軟件更新需要引導(dǎo)軟件、監(jiān)控軟件和應(yīng)用軟件等3 個鏡像文件[9],同時還需要1 個啟動SPI-Flash 區(qū)域的標(biāo)志,所以需要至少將主控板上的SPI-Flash 劃分出獨(dú)立的4 個區(qū)域(0 區(qū)、1 區(qū)、2 區(qū)和3 區(qū)),分別用于存放引導(dǎo)軟件、啟動標(biāo)志、監(jiān)控軟件和應(yīng)用軟件。結(jié)合項(xiàng)目實(shí)際情況,引導(dǎo)軟件為86 KB,啟動標(biāo)志為2 B,監(jiān)控軟件為6 MB,應(yīng)用軟件為8 MB,SPIFlash 分區(qū)示意圖如圖3 所示。
基于前面的啟動與配置原理和SPI-Flash 空間分配,接下來進(jìn)行監(jiān)控軟件的流程設(shè)計[10?12]。監(jiān)控軟件包括監(jiān)控軟件主程序和串口中斷程序,相應(yīng)的工作流程也包含監(jiān)控軟件主程序流程和串口中斷程序流程[13?15]。
1)監(jiān)控軟件主程序流程
監(jiān)控軟件主程序流程如圖4 所示。獲取數(shù)據(jù)幀程序流程如圖5 所示。解析串口數(shù)據(jù)幀程序流程如圖6 所示。
2)監(jiān)控軟件串口中斷程序流程
監(jiān)控軟件串口中斷程序流程如圖7 所示。
圖4 監(jiān)控軟件主程序流程
圖5 獲取數(shù)據(jù)幀程序流程
在使用監(jiān)控軟件進(jìn)行應(yīng)用軟件更新前需要先用仿真器將引導(dǎo)軟件和監(jiān)控軟件固化到主控板的SPI-Flash 中,然后就可以使用與監(jiān)控軟件配套開發(fā)的上位機(jī)軟件配合監(jiān)控軟件通過串口完成應(yīng)用軟件的更新[16?20]。在打開上位機(jī)軟件之前需要用RS422 轉(zhuǎn)USB 線纜將主控板與PC 機(jī)相連接,接下來的操作流程如下:
圖6 解析串口數(shù)據(jù)幀程序流程
圖7 串口中斷程序流程
1)打開上位機(jī)軟件,并設(shè)置串口參數(shù),界面如圖8 所示。
2)在燒寫類型選擇應(yīng)用軟件后,并選擇文件路徑,界面如圖9 所示。
3)選擇好文件路徑后點(diǎn)擊開始上傳,界面如圖10 所示。
4)給主控板上電,上位機(jī)軟件開始上傳數(shù)據(jù),待上位機(jī)軟件顯示Flash 燒寫成功后,表明應(yīng)用軟件更新完畢,界面如圖11 所示。
圖8 上位機(jī)軟件界面
圖9 選擇文件路徑界面
圖10 點(diǎn)擊開始上傳界面
圖11 Flash 燒寫成功界面
經(jīng)過以上步驟后,再重新給主控板上電,主控板復(fù)位后啟動的就是更新版本的應(yīng)用軟件。同時,此方案也能實(shí)現(xiàn)引導(dǎo)軟件和監(jiān)控軟件的更新,這樣就完全實(shí)現(xiàn)了在已組裝設(shè)備狀態(tài)不變的狀態(tài)下對主控板內(nèi)所有軟件進(jìn)行更新。
本文從實(shí)際的需求出發(fā),基于ZYNQ7000 全可編程SOC 啟動與配置的原理,經(jīng)過方案分析研究和實(shí)際驗(yàn)證,可得出以下結(jié)論:
1)復(fù)用主控板與外部的RS422 接口,采用對SPI-Flash 進(jìn)行分區(qū)引導(dǎo)與啟動的方式,在未使用對產(chǎn)品應(yīng)用軟件更新專用接口的情況下實(shí)現(xiàn)了對主控板應(yīng)用軟件的更新。
2)接下來,可以通過千兆網(wǎng)接口來實(shí)現(xiàn)遠(yuǎn)距離多個產(chǎn)品的應(yīng)用軟件更新。
3)進(jìn)一步可將此方法應(yīng)用于無線傳輸領(lǐng)域,實(shí)現(xiàn)遠(yuǎn)程在軌設(shè)備的應(yīng)用軟件更新。
此應(yīng)用技術(shù)對智能化、無人化的嵌入式系統(tǒng)開發(fā)具有重要的意義。