張寶升,王超,楊恒輝
(中國航空工業集團公司西安航空計算技術研究所,陜西西安,710065)
本文設計了一種基于SCI通訊的軟件加載及校驗方法,在加載/校驗過程中對每一包數據的加載/校驗地址都進行了合法性判斷,保證了加載/校驗的正確性;并且采用逐字校對的方法進行校驗,防止了“單粒子翻轉”效應和加載地址錯誤導致的產品工作異常。
本系統所使用的通訊協議見圖1。其中S0為開始數據包,S2為加載/校驗數據包,S5為結束數據包。

圖1 通訊協議[1]
開始數據包表示“通訊開始”,接收數據可設置為固定字符。
加載/校驗數據包的接收數據包括加載/校驗地址和數據。
結束數據包的接收數據可設置為接收到的加載/校驗數據包的總包數。
SCI接收處理的主要功能是接收上位機發送過來的數據包并進行合法性檢查,如果合法,則將接收到的數據包進行轉換保存。在接收數據時可設置計數器,對接收到的數據進行計數。
當以下條件都滿足時,則判斷接收到的數據包合法。
a.第0個字節為'S',且第1個字節為'0'、'2'或'5'[2]。
b.數據長度在合法范圍內。
c.數據長度與計數器的計數值一致。
d.SCI狀態寄存器不報錯。
數據轉換處理的主要功能是將SCI通訊接收到的合法數據包進行ASCII碼到16進制機器碼的轉換,并將轉換后的數據保存到加載/校驗數據緩沖區中。
加載/校驗數據緩沖區是一個類型為字,長度可設置的數組。當數據轉換保存完成后,若加載/校驗數據緩沖區未滿,則不進行加載/校驗,繼續接收下一包數據并轉換保存,直到加載/校驗數據緩沖區滿為止。
本方案的軟件加載流程圖如圖2所示。

圖2 軟件加載流程圖
在加載開始前,上位機會發送開始數據包,加載設備若接收到正確的開始數據包,則會給上位機發送應答信號,可繼續加載軟件,否則停止加載并報故障。
在加載過程中,為滿足軟件的模塊化加載需求,設計了軟件識別信息,通過軟件識別信息確定加載地址范圍,以此判斷加載數據包中的加載起始地址是否合法。若合法,則繼續加載;若不合法,則停止加載并報故障。
在加載完成后,上位機會發送結束數據包,軟件讀取結束數據包中的總包數,并與接收到的加載數據包數進行比較,若一致則判定加載成功,否則會報故障。
關于故障信息和提示信息,如下設計:
a.未接收到開始數據包:當軟件開始加載時,未在規定的時間內接收到開始數據包,提示此故障。
b.錯誤的開始數據包:當接收到的開始數據包與期望序列不符時提示此故障。
c.數據傳輸錯誤:當接收到的加載數據為非十六進制的非法字符時提示此故障。
d.地址范圍越界:當加載數據包中的加載地址超范圍時提示此故障。
e.校驗錯誤:當接收到數據包中的校驗數據與計算的校驗和不一致時提示此故障。
f. flash存儲器被鎖:當 flash存儲器的寫允許信號未被激活時提示此故障。
g.加載錯誤:當從Flash存儲器回讀到的加載數據有錯誤時提示此故障。
h.未接收到結束數據包:當軟件加載結束時,未在規定的時間內接收到結束數據包,提示此故障。
i.軟件加載成功:當軟件加載完成,且未報任何故障時,提示此成功信息。
大部分的軟件校驗方法是計算軟件的校驗和,并和固化的校驗和比較,若一致則校驗正確,否則校驗錯誤。當“單粒子翻轉”效應導致偶數個二進制位發生翻轉時,該校驗方法就不能校驗出軟件錯誤,致使軟件繼續往下執行,導致產品工作異常。
另外,當軟件加載到錯誤的地址時,該校驗方法也可能校驗不出錯誤,比如某段代碼的正確的地址為0x20000~0x20021,如圖3所示。假設在加載過程中發生錯誤,誤加載到地址0x20040~0x20061中,如圖4所示,其它代碼均一致。這種錯誤只比較校驗和是檢查不出來的,只有用本方案的校驗方法才能檢查出來。

圖3 地址正確的代碼

圖4 地址錯誤的代碼

圖5 軟件校驗流程圖
本方案設計的軟件校驗方法為:通過SCI接口接收上位機發送的“S數據包”,然后解析,解析完成后和對應地址的代碼按字進行校對,直到將所有代碼校對完。校對完成后若全部一致則校驗正確,否則校驗錯誤。本方案的軟件校驗流程圖如圖5所示。
本方案在加載/校驗過程中對每一包數據的加載/校驗地址都進行了合法性判斷,保證了加載/校驗的正確性;并且采用逐字校對的方法進行校驗,防止了“單粒子翻轉”效應和加載地址錯誤導致的產品工作異常。但由于要進行數據合法性檢查和轉換,會導致時間較長,若不考慮時間因素,本方案不失為一種穩定可靠的軟件加載/校驗方案。