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