,,,,
(南京南瑞繼保電氣有限公司,南京 211102)
電力系統二次設備繼電保護、測控設備面對用戶越來越多的新需求、軟件自身錯誤等問題,需要及時對設備程序進行升級和維護,改善設備性能,延長設備生命周期。傳統的方法需要拆卸設備,通過仿真器或者編程器燒寫程序,這種方式在現場調試、設備數量龐大時,維護非常困難。在線升級是被廣泛采用的一種方式,這種升級方式可以不受環境的限制,充分提高了系統升級的便利性和可維護性[1]。參考文獻[2]~[4]介紹了利用串口、RS422、網絡等方法實現將程序升級到處理器片內、片外Flash中。一般是先燒寫一段BOOT程序,通過解析應用程序文件完成程序升級。這些方法往往存在BOOT程序無法升級自身、程序燒寫無法脫離仿真器或編程器、應用程序運行無法實時升級等問題,影響了工程應用的可靠性和便捷性。
本文設計了一種基于CAN通信實現的通用程序在線升級方法,支持BOOT程序、應用程序兩種模式下的升級。BOOT程序不僅支持升級應用程序,還支持升級BOOT程序自身。通過在上位機、下位機間設計一套升級服務協議,保證了程序升級過程的可靠性。針對程序升級的異常情況,設計了相應的恢復措施,保證了系統異常時能夠及時恢復。此外,結合ZYNQ芯片多種啟動模式,實現了通過SD卡啟動程序完成BOOT程序燒寫,不需要借助仿真器或編程器,提高了生產調試、工程維護的便捷性。
程序在線升級系統硬件總體結構如圖1所示。

圖1 系統硬件結構圖
上位機通過以太網通信將程序下發給下位機管理插件,下位機管理插件通過CAN總線透傳給目標插件,目標插件接收數據后寫入片外Flash中。下位機可以根據實際應用需求配置多個目標插件,所有目標插件的程序均可以由上位機下發,管理插件根據每個目標插件的槽號節點轉發完成程序升級。
目標插件硬件系統主要由ZYNQ-7000 片上系統、DDR3內存、片外Flash存儲、SD卡存儲、CAN接口電路、UART接口電路等組成,硬件框圖如圖2所示。ZYNQ-7000 SoC包含處理器系統(Processing System,PS)和可編程邏輯器件(Programmable Logic,PL)兩部分,處理器系統集成了雙核ARM Cortex-A9、存儲器接口和豐富的外設接口,可編程邏輯器件包含大量FPGA的邏輯單元[7]。片外QSPI Flash作為非易失性存儲,用于存儲BOOT程序、雙核應用程序、FPGA程序,程序運行在DDR3內存中。CAN接口用于與管理插件通信交互。UART負責串口調試信息展示,SD卡存儲設備日志信息、生產調試燒寫BOOT程序。

圖2 目標插件硬件框圖
本文設計的程序在線升級方法可以在BOOT程序、應用程序運行過程中實時進行。系統軟件采用雙裸核(Standalone)的非對稱多處理(Asymmetric MultiProcessing,AMP)模式總體架構設計,CPU0核完成程序在線升級功能,CPU1程序通過CPU0代理完成升級。通過代理模式可以避免在線升級過程中雙核訪問CAN、Flash、DDR等硬件資源競爭。軟件上通過模塊化方式設計,BOOT程序和應用程序可以快速復用CAN模塊驅動、Flash模塊驅動及程序升級模塊等完成在線升級功能集成。
ZYNQ-7000處理器系統內部集成兩個CAN控制器,最大支持1 Mbps傳輸速率,可以滿足系統要求。CAN驅動主要包括CAN模塊硬件初始化、報文發送、接收處理。初始化配置硬件引腳、通信波特率、工作模式等。報文發送、接收采用中斷方式處理,既可以節省CPU的資源,也能夠保證及時響應CAN報文。CAN報文采用29位擴展幀格式,管理插件通過擴展幀中的應用報文類型、源地址、目的地址來實現對各個槽位的目標插件升級程序。通過在CAN驅動中增加報文重發機制、總線異常自恢復等措施,提高了程序在線升級過程的可靠性。
Flash采用的是Micron公司MT25QL256芯片,該存儲器一共有512個扇區,每個扇區大小為64 KB,共32 MB存儲空間。Flash驅動主要包含硬件初始化、擦除扇區、寫數據、讀數據接口。通過識別文件名中關鍵字來確定不同程序寫入的Flash位置,Flash的空間劃分如表1所列。

表1 Flash空間分配
在上位機、下位機間設計一套升級服務協議,可以提高程序升級過程的可靠性。上位機、下位機交互的報文數據幀格式如下:

幀頭1幀頭2類型長度內容校驗碼字節0字節1字節2字節3字節4~NN字節累加和
升級服務的應用層協議內容如表2所列。

表2 應用層協議內容
通過BOOT程序、應用程序兩種模式,實現在線升級功能。BOOT程序完成應用程序加載、升級及自身程序升級,應用程序完成自身程序升級和應用功能,兩者通過集成CAN模塊驅動、Flash模塊驅動及程序升級模塊來實現。ZYNQ-7000上電運行的啟動流程如圖3所示。

圖3 啟動流程
啟動流程如下:
① 首先執行片內BootROM程序,完成對QSPI、SD等外設控制器初始化。
② 然后加載FSBL(First Stage Boot Loader)程序到OCM(On Chip Memory)上運行,FSBL完成GPIO、時鐘、DDR3內存初始化后,加載BOOT程序到DDR3中運行。
③ BOOT程序判斷當前模式和校驗Flash內容,如果是BOOT模式或者Flash應用程序校驗出錯,則初始化CAN及中斷,等待升級應用程序。如果是應用程序模式,則加載雙核CPU0、CPU1應用程序,FPGA程序,跳轉執行應用程序。
BOOT和應用程序的在線升級過程基本一致,如圖4所示,主要是升級服務應用層的交互過程。

圖4 在線升級流程
① 上位機主動發起程序升級檢查命令,下位機進入在線升級模式,解析命令中的文件類型、名稱、長度計算總的Flash擦除時間,應答上位機擦除時間、報文校驗結果。
② 上位機發送下載擦除命令,等待下位機返回Flash擦除操作結果。
③ 上位機發送下載請求命令,下位機應答文件類型校驗結果。
④ 上位機發送下載地址段命令,通知下位機數據升級的Flash起始地址,下位機應答地址范圍校驗結果。
⑤ 上位機發送下載數據命令,逐個數據包發送程序內容,下位機接收后將數據寫入Flash中。重復此過程,直到程序數據下載完成。
⑥ 上位機發送下載結束命令,通知下位機數據校驗和,下位機回讀Flash內容計算校驗和,應答校驗和比較結果。
⑦ 若步驟①~⑥上位機收到下位機否定應答,則上位機發送下載取消命令,取消本次升級。下位機中應用程序可能被擦寫,重啟后程序在BOOT中運行,等待下一次程序升級。
⑧ 上位機發送復位命令通知下位機啟動看門狗復位,完成程序在線升級,執行新程序。
通過上位機給下位機下載CPU0、CPU1以及FPGA程序,借助串口工具查看程序升級信息,分別進行正常升級、異常升級過程測試。通過上千次程序升級測試,驗證升級功能正常。
測試BOOT程序、應用程序模式下的升級功能,應用程序模式下的升級信息如圖5所示。

圖5 正常升級測試

圖6 異常升級測試
模擬升級過程異常斷電、CPU0程序文件校驗碼出錯。CPU0程序文件校驗碼出錯升級信息如圖6所示。此時新程序還沒有寫入Flash中,而Flash中的舊程序已經被擦除。設備重新上電后在BOOT程序中運行,可以重新升級應用程序恢復運行。
