何與舟,王東升
(航空工業(yè)南京機(jī)電液壓工程研究中心 電子工程部,江蘇 南京 211106)
航空機(jī)電控制器軟件部署在航空飛行器內(nèi)各機(jī)電控制器中,當(dāng)控制器交付裝機(jī)后,可能需要消除新發(fā)現(xiàn)的缺陷或進(jìn)行系統(tǒng)需求變更,常常需要進(jìn)行軟件升級。傳統(tǒng)的升級方法是將控制器從航空飛行器上拆卸下來、開蓋、連接仿真器重新燒錄軟件,該方法操作復(fù)雜、維護(hù)效率低,且存在對控制器造成破壞的風(fēng)險。
本文通過對多種航空機(jī)電控制軟件升級策略、BOOT方式、文件格式等進(jìn)行比較和分析,研究出一套利用航空機(jī)電控制器現(xiàn)有通信接口,通過通信數(shù)據(jù)處理、配置項(xiàng)ID確認(rèn)、程序升級指令判定、應(yīng)用程序固化、校驗(yàn)、重傳、標(biāo)志擦除等機(jī)制實(shí)現(xiàn)軟件原位在線升級的方案,試驗(yàn)效果較好。
從在線升級軟件功能與應(yīng)用軟件的相對邏輯關(guān)系來分,常見的軟件在線升級策略有如下三種:
策略一:將在線升級軟件(BOOT軟件)與應(yīng)用軟件分別存儲在不同的存儲器中,通過硬線開關(guān)選擇處理器運(yùn)行的程序存儲器,若是要運(yùn)行應(yīng)用程序則選擇應(yīng)用軟件存儲器,若是要進(jìn)行在線升級則選擇BOOT軟件存儲器,升級設(shè)備通過與BOOT軟件的交互實(shí)現(xiàn)應(yīng)用軟件的在線升級。該策略優(yōu)點(diǎn)為BOOT軟件與應(yīng)用軟件完全解耦,沒有任何交聯(lián),方便進(jìn)行獨(dú)立的維護(hù)和管理;缺點(diǎn)是需要為在線升級功能增加額外的硬件存儲器,同時,通過單根外部硬線選擇執(zhí)行程序存儲器的方法可靠性低,若該硬線上存在干擾,將導(dǎo)致軟件運(yùn)行出現(xiàn)不可預(yù)知的結(jié)果,且該隱患在控制器整個上電期間一直存在。
策略二:將BOOT軟件作為功能模塊嵌入到應(yīng)用程序中,當(dāng)需要進(jìn)行軟件升級時,調(diào)用該功能模塊,擦除原有程序,并通過通信接口接收更新的程序,固化到存儲器中。該策略的優(yōu)點(diǎn)為無需增加額外的硬件開銷,將BOOT軟件與應(yīng)用軟件整合為單一軟件,實(shí)現(xiàn)簡潔,維護(hù)管理方便;缺點(diǎn)為應(yīng)用軟件中包含擦除自身軟件的功能,存在安全隱患,另外,升級若失敗,下電后將無法再次進(jìn)行在線升級,只能通過開蓋、用仿真器JTAG接口重新燒錄軟件,因此,策略二在實(shí)施上可靠性較弱。
策略三:將BOOT軟件與應(yīng)用軟件作為獨(dú)立的軟件,但存儲在同一片存儲器的不同區(qū)域,當(dāng)需要在線升級時,升級設(shè)備通過通信接口與應(yīng)用軟件進(jìn)行交互,應(yīng)用軟件檢測到新的在線升級請求后,設(shè)置在線升級標(biāo)志,并重啟處理器進(jìn)入BOOT程序,BOOT程序檢測到升級標(biāo)志后,將停留在BOOT程序中,并通過通信接口完成軟件在線升級。與策略一、二相比,該策略不增加額外硬件負(fù)擔(dān),實(shí)施方法可靠、穩(wěn)定。本方案選擇第三種升級策略。
策略三中提及的BOOT軟件有兩種實(shí)現(xiàn)方式,一種是采用芯片廠商自帶的BOOT軟件,另一種是完全自主開發(fā)。
芯片自帶的BOOT軟件一般支持RS422、CAN、IIC等多種升級方式,通過在處理器上電瞬間配置IO管腳的不同狀態(tài)來選擇升級方式,省去了BOOT軟件的開發(fā)工作,只要滿足其通信協(xié)議即可實(shí)現(xiàn)軟件的在線升級,但升級協(xié)議和升級機(jī)制均只能按照其固定邏輯進(jìn)行。在實(shí)際應(yīng)用過程中,無法靈活滿足各種應(yīng)用場景的需要,尤其是對硬件看門狗喂狗的不支持,常常會給使用芯片自帶BOOT進(jìn)行軟件升級帶來挑戰(zhàn)。
為了解決芯片自帶BOOT在使用過程中存在的問題,本方案選擇開發(fā)自主BOOT軟件,雖然增加了工作量,但帶來的好處也是顯而易見的。首先,可以滿足任何場景的在線升級需要,利用控制器現(xiàn)有通信接口即可進(jìn)行升級;同時在機(jī)制上也更加靈活,可以選擇在任意時間點(diǎn)、以認(rèn)為的更加安全的方式進(jìn)行軟件在線升級。
常見的嵌入式IDE工具生成的目標(biāo)文件格式多為ELF、OUT等,比如Code Composer V5.5使用的是OUT格式,由于對上述格式文件的解析太過復(fù)雜,因此在線升級軟件過程中使用較多的文件格式為HEX文件或者BIN文件。
HEX文件格式的缺點(diǎn)是可能出現(xiàn)中間地址不連續(xù)的情況,這就導(dǎo)致在做程序校驗(yàn)時,相同的程序邏輯有可能出現(xiàn)不一樣的校驗(yàn)結(jié)果。而BIN文件相較于HEX文件,更加直白和簡潔,在FLASH中存儲的數(shù)據(jù)是什么,BIN文件保存的數(shù)據(jù)就是什么,在整個升級過程中,無需額外的文件解析工作,收到的文件數(shù)據(jù)就是程序文件。本方案中的升級文件采用BIN文件格式。
航空機(jī)電控制器在線升級軟件通過RS422接收上位機(jī)(升級設(shè)備)發(fā)送的升級指令和待升級的應(yīng)用軟件代碼文件,將該代碼固化到DSP中,實(shí)現(xiàn)對控制器應(yīng)用軟件的在線升級,并向升級設(shè)備上傳控制器在線升級過程中的實(shí)時狀態(tài),如圖1所示。
圖1 航空機(jī)電控制器在線升級原理圖
系統(tǒng)模式設(shè)計見表1,其轉(zhuǎn)換關(guān)系如圖2所示。
圖2 模式轉(zhuǎn)換圖
表1 系統(tǒng)模式
軟件在線升級具體流程如下:升級設(shè)備通過RS422將升級指令發(fā)送給控制器的應(yīng)用軟件;應(yīng)用軟件接收到在線升級指令后,將在線升級標(biāo)志(OFP)置為有效并復(fù)位;復(fù)位后先運(yùn)行BOOT軟件,BOOT軟件識別到OFP標(biāo)志有效后,停留在BOOT軟件中,查詢升級設(shè)備發(fā)送代碼中的軟件配置項(xiàng)標(biāo)識(CSCI ID),如果不是本控制器的代碼則空等待,如果是本控制器的代碼則擦除原先舊的應(yīng)用程序代碼,并把待升級的應(yīng)用程序代碼固化到控制器的DSP中。
BOOT軟件在升級過程中,將升級的狀態(tài)實(shí)時地通過RS422上傳給升級設(shè)備。升級完成后,升級設(shè)備發(fā)送退出在線加載狀態(tài)的指令,BOOT軟件接收到該指令后,清除OFP加載標(biāo)志并等待下電,重新上電后運(yùn)行應(yīng)用軟件。
BOOT軟件的跳轉(zhuǎn)流程如圖3所示,加載程序流程如圖4所示。
圖3 BOOT軟件跳轉(zhuǎn)流程
圖4 加載程序流程
升級設(shè)備和控制器之間的通信采用RS422方式,8位有效位,1位校驗(yàn)位,1位停止位。升級文件目標(biāo)碼格式采用BIN格式。升級設(shè)備與控制器的通信幀格式如表2、表3所示。
表2 升級設(shè)備發(fā)送給控制器的通信幀格式
表3 控制器回傳給升級設(shè)備的通信幀格式
在線升級軟件采用多重校驗(yàn)的方法保證數(shù)據(jù)的可靠性。在數(shù)據(jù)傳輸過程中,對每包數(shù)據(jù)進(jìn)行校驗(yàn)和驗(yàn)證。另外,為保證整個軟件升級過程中的一致性,升級設(shè)備將待升級軟件的CRC16校驗(yàn)碼發(fā)送給控制器,控制器在升級過程中計算CRC16校驗(yàn)碼,并與升級設(shè)備發(fā)送的校驗(yàn)碼比對,如果一致,則升級成功;否則重新執(zhí)行在線升級。
通過升級設(shè)備對航空機(jī)電控制器軟件進(jìn)行在線升級測試,運(yùn)行結(jié)果見圖5。在升級設(shè)備依次執(zhí)行選擇程序、配置端口后,向控制器發(fā)送升級程序。升級過程中,升級設(shè)備接收到控制器升級軟件回傳的“傳輸中”、“傳輸成功”、“固化中”、“固化成功”、“校驗(yàn)中”、“校驗(yàn)成功”等信息。經(jīng)過檢查,升級軟件接收到的配置項(xiàng)ID、CRC校驗(yàn)碼均與升級設(shè)備發(fā)送的一致,控制器軟件升級成功。
圖5 在線升級運(yùn)行結(jié)果
本文研究并實(shí)現(xiàn)了一套利用航空機(jī)電控制器現(xiàn)有通信接口,不額外增加硬件,通過通信處理以及ID和指令確認(rèn)、固化、校驗(yàn)、重傳等程序結(jié)構(gòu)設(shè)計,實(shí)現(xiàn)航空機(jī)載軟件原位在線升級的方案,極大地方便了軟件升級工作,節(jié)省了維護(hù)成本。該方案通用性高,多重數(shù)據(jù)校驗(yàn)等安全性設(shè)計保障了升級軟件的可靠性和準(zhǔn)確性,目前已在多型飛行器上應(yīng)用,具有良好的應(yīng)用前景。