北京軒宇空間科技有限公司,北京 100086
ZYNQ7000 全可編程SOC 基于Xilinx 全可編程可擴展處理平臺結構,其內部集成了ARM 公司的雙核Cortex?-A9 處理器系統(processing system,PS)和Xilinx 的可編程邏輯單元(programmable logic,PL),真正實現了軟件和硬件的協同設計[1],同時也大大縮短了系統的開發時間。因此,ZYNQ7000 全可編程SOC 在嵌入式領域得到了廣泛的應用。本文所研究的內容是基于ZYNQ7000系列XC7Z100 主控芯片實現的。
以往的產品都是通過預留的調試接口進行應用軟件更新,現要求產品在組裝前不能含有與整機無關的冗余接口,同時具備應用軟件更新的功能。經調研發現,大部分產品都是使用調試接口進行應用軟件更新,還有的產品具有應用軟件更新的專用接口。為了解決正式產品組裝完成后主控板應用軟件更新的問題,復用了主控板和外部的RS422 串口。在需要進行軟件更新的時候,通過此RS422 串口向主控制板傳輸新版本的應用軟件數據包,否則用此RS422 串口和外部進行正常的數據通信。
基于ZYNQ7000 系列XC7Z100 主控芯片的最小系統框圖如圖1 所示[2]。

圖1 XC7Z100 主控芯片的最小系統
DDR3 的型號為MT41J256M16HA-125,選用2 片組成32 位內存模組,總容量為1 GB;SPI-Flash的型號為S25FL256SAGMFI001,總容量為32 MB;PS 和PL 的工作時鐘分別是33.3 MHz 和50 MHz[3];RS422 接口芯片為LTC2851,采用3.3 V的電源,支持20 Mbps 的最高數據速率;電源模塊為最小系統提供1.8 V、3.3 V、5 V 等供電。
經查閱資料可知,ZYNQ7000 全可編程SOC啟動與配置過程包含以下3 個階段:
階段1該階段也稱為BootRom,主要用于控制初始設備的啟動。BootRom 是系統復位后,處理器所執行的用戶不可修改的代碼,該部分代碼已經固化到BootRom 中[4?5]。
階段2該階段通常執行第一級啟動引導程序(first stage boot loader,FSBL)[6]。
階段3該階段一般執行用戶自己的軟件程序。
基于以上啟動與配置的過程,為了實現采用串口進行應用軟件更新,需要在第3 階段先執行具有應用軟件更新功能的程序(簡稱監控軟件),然后由監控軟件控制接下來的程序流程,即系統上電后首先由階段2 引導啟動監控軟件,若需要進行應用軟件更新,則在上位機軟件的配合下進行應用軟件數據包更新;若不需要更新應用軟件,則5 s 后監控軟件進行系統軟復位[7],開始啟動現有的應用軟件。采用串口進行應用軟件更新的系統啟動流程如圖2 所示。

圖2 系統啟動流程
FSBL 的主要功能為根據啟動標志選擇啟動監控軟件還是應用軟件[8],啟動標志為0x5A5A 時啟動應用軟件,否則啟動監控軟件。在系統軟件進入軟件復位流程且復位執行前將啟動標志配置為0x5A5A,軟件復位后在FSBL 中完成啟動區域判別后再將啟動標志配置為0xFFFF。這樣每次系統上電后都先啟動監控軟件,而每次系統軟件復位后都會啟動應用軟件。
綜上所述,采用串口實現應用軟件更新需要引導軟件、監控軟件和應用軟件等3 個鏡像文件[9],同時還需要1 個啟動SPI-Flash 區域的標志,所以需要至少將主控板上的SPI-Flash 劃分出獨立的4 個區域(0 區、1 區、2 區和3 區),分別用于存放引導軟件、啟動標志、監控軟件和應用軟件。結合項目實際情況,引導軟件為86 KB,啟動標志為2 B,監控軟件為6 MB,應用軟件為8 MB,SPIFlash 分區示意圖如圖3 所示。
基于前面的啟動與配置原理和SPI-Flash 空間分配,接下來進行監控軟件的流程設計[10?12]。監控軟件包括監控軟件主程序和串口中斷程序,相應的工作流程也包含監控軟件主程序流程和串口中斷程序流程[13?15]。
1)監控軟件主程序流程
監控軟件主程序流程如圖4 所示。獲取數據幀程序流程如圖5 所示。解析串口數據幀程序流程如圖6 所示。
2)監控軟件串口中斷程序流程
監控軟件串口中斷程序流程如圖7 所示。

圖4 監控軟件主程序流程

圖5 獲取數據幀程序流程
在使用監控軟件進行應用軟件更新前需要先用仿真器將引導軟件和監控軟件固化到主控板的SPI-Flash 中,然后就可以使用與監控軟件配套開發的上位機軟件配合監控軟件通過串口完成應用軟件的更新[16?20]。在打開上位機軟件之前需要用RS422 轉USB 線纜將主控板與PC 機相連接,接下來的操作流程如下:

圖6 解析串口數據幀程序流程

圖7 串口中斷程序流程
1)打開上位機軟件,并設置串口參數,界面如圖8 所示。
2)在燒寫類型選擇應用軟件后,并選擇文件路徑,界面如圖9 所示。
3)選擇好文件路徑后點擊開始上傳,界面如圖10 所示。
4)給主控板上電,上位機軟件開始上傳數據,待上位機軟件顯示Flash 燒寫成功后,表明應用軟件更新完畢,界面如圖11 所示。

圖8 上位機軟件界面

圖9 選擇文件路徑界面

圖10 點擊開始上傳界面

圖11 Flash 燒寫成功界面
經過以上步驟后,再重新給主控板上電,主控板復位后啟動的就是更新版本的應用軟件。同時,此方案也能實現引導軟件和監控軟件的更新,這樣就完全實現了在已組裝設備狀態不變的狀態下對主控板內所有軟件進行更新。
本文從實際的需求出發,基于ZYNQ7000 全可編程SOC 啟動與配置的原理,經過方案分析研究和實際驗證,可得出以下結論:
1)復用主控板與外部的RS422 接口,采用對SPI-Flash 進行分區引導與啟動的方式,在未使用對產品應用軟件更新專用接口的情況下實現了對主控板應用軟件的更新。
2)接下來,可以通過千兆網接口來實現遠距離多個產品的應用軟件更新。
3)進一步可將此方法應用于無線傳輸領域,實現遠程在軌設備的應用軟件更新。
此應用技術對智能化、無人化的嵌入式系統開發具有重要的意義。