張寶升,王超,楊恒輝
(中國航空工業(yè)集團(tuán)公司西安航空計(jì)算技術(shù)研究所,陜西西安,710065)
本文設(shè)計(jì)了一種基于SCI通訊的軟件加載及校驗(yàn)方法,在加載/校驗(yàn)過程中對每一包數(shù)據(jù)的加載/校驗(yàn)地址都進(jìn)行了合法性判斷,保證了加載/校驗(yàn)的正確性;并且采用逐字校對的方法進(jìn)行校驗(yàn),防止了“單粒子翻轉(zhuǎn)”效應(yīng)和加載地址錯(cuò)誤導(dǎo)致的產(chǎn)品工作異常。
本系統(tǒng)所使用的通訊協(xié)議見圖1。其中S0為開始數(shù)據(jù)包,S2為加載/校驗(yàn)數(shù)據(jù)包,S5為結(jié)束數(shù)據(jù)包。
圖1 通訊協(xié)議[1]
開始數(shù)據(jù)包表示“通訊開始”,接收數(shù)據(jù)可設(shè)置為固定字符。
加載/校驗(yàn)數(shù)據(jù)包的接收數(shù)據(jù)包括加載/校驗(yàn)地址和數(shù)據(jù)。
結(jié)束數(shù)據(jù)包的接收數(shù)據(jù)可設(shè)置為接收到的加載/校驗(yàn)數(shù)據(jù)包的總包數(shù)。
SCI接收處理的主要功能是接收上位機(jī)發(fā)送過來的數(shù)據(jù)包并進(jìn)行合法性檢查,如果合法,則將接收到的數(shù)據(jù)包進(jìn)行轉(zhuǎn)換保存。在接收數(shù)據(jù)時(shí)可設(shè)置計(jì)數(shù)器,對接收到的數(shù)據(jù)進(jìn)行計(jì)數(shù)。
當(dāng)以下條件都滿足時(shí),則判斷接收到的數(shù)據(jù)包合法。
a.第0個(gè)字節(jié)為'S',且第1個(gè)字節(jié)為'0'、'2'或'5'[2]。
b.數(shù)據(jù)長度在合法范圍內(nèi)。
c.數(shù)據(jù)長度與計(jì)數(shù)器的計(jì)數(shù)值一致。
d.SCI狀態(tài)寄存器不報(bào)錯(cuò)。
數(shù)據(jù)轉(zhuǎn)換處理的主要功能是將SCI通訊接收到的合法數(shù)據(jù)包進(jìn)行ASCII碼到16進(jìn)制機(jī)器碼的轉(zhuǎn)換,并將轉(zhuǎn)換后的數(shù)據(jù)保存到加載/校驗(yàn)數(shù)據(jù)緩沖區(qū)中。
加載/校驗(yàn)數(shù)據(jù)緩沖區(qū)是一個(gè)類型為字,長度可設(shè)置的數(shù)組。當(dāng)數(shù)據(jù)轉(zhuǎn)換保存完成后,若加載/校驗(yàn)數(shù)據(jù)緩沖區(qū)未滿,則不進(jìn)行加載/校驗(yàn),繼續(xù)接收下一包數(shù)據(jù)并轉(zhuǎn)換保存,直到加載/校驗(yàn)數(shù)據(jù)緩沖區(qū)滿為止。
本方案的軟件加載流程圖如圖2所示。
圖2 軟件加載流程圖
在加載開始前,上位機(jī)會發(fā)送開始數(shù)據(jù)包,加載設(shè)備若接收到正確的開始數(shù)據(jù)包,則會給上位機(jī)發(fā)送應(yīng)答信號,可繼續(xù)加載軟件,否則停止加載并報(bào)故障。
在加載過程中,為滿足軟件的模塊化加載需求,設(shè)計(jì)了軟件識別信息,通過軟件識別信息確定加載地址范圍,以此判斷加載數(shù)據(jù)包中的加載起始地址是否合法。若合法,則繼續(xù)加載;若不合法,則停止加載并報(bào)故障。
在加載完成后,上位機(jī)會發(fā)送結(jié)束數(shù)據(jù)包,軟件讀取結(jié)束數(shù)據(jù)包中的總包數(shù),并與接收到的加載數(shù)據(jù)包數(shù)進(jìn)行比較,若一致則判定加載成功,否則會報(bào)故障。
關(guān)于故障信息和提示信息,如下設(shè)計(jì):
a.未接收到開始數(shù)據(jù)包:當(dāng)軟件開始加載時(shí),未在規(guī)定的時(shí)間內(nèi)接收到開始數(shù)據(jù)包,提示此故障。
b.錯(cuò)誤的開始數(shù)據(jù)包:當(dāng)接收到的開始數(shù)據(jù)包與期望序列不符時(shí)提示此故障。
c.數(shù)據(jù)傳輸錯(cuò)誤:當(dāng)接收到的加載數(shù)據(jù)為非十六進(jìn)制的非法字符時(shí)提示此故障。
d.地址范圍越界:當(dāng)加載數(shù)據(jù)包中的加載地址超范圍時(shí)提示此故障。
e.校驗(yàn)錯(cuò)誤:當(dāng)接收到數(shù)據(jù)包中的校驗(yàn)數(shù)據(jù)與計(jì)算的校驗(yàn)和不一致時(shí)提示此故障。
f. flash存儲器被鎖:當(dāng) flash存儲器的寫允許信號未被激活時(shí)提示此故障。
g.加載錯(cuò)誤:當(dāng)從Flash存儲器回讀到的加載數(shù)據(jù)有錯(cuò)誤時(shí)提示此故障。
h.未接收到結(jié)束數(shù)據(jù)包:當(dāng)軟件加載結(jié)束時(shí),未在規(guī)定的時(shí)間內(nèi)接收到結(jié)束數(shù)據(jù)包,提示此故障。
i.軟件加載成功:當(dāng)軟件加載完成,且未報(bào)任何故障時(shí),提示此成功信息。
大部分的軟件校驗(yàn)方法是計(jì)算軟件的校驗(yàn)和,并和固化的校驗(yàn)和比較,若一致則校驗(yàn)正確,否則校驗(yàn)錯(cuò)誤。當(dāng)“單粒子翻轉(zhuǎn)”效應(yīng)導(dǎo)致偶數(shù)個(gè)二進(jìn)制位發(fā)生翻轉(zhuǎn)時(shí),該校驗(yàn)方法就不能校驗(yàn)出軟件錯(cuò)誤,致使軟件繼續(xù)往下執(zhí)行,導(dǎo)致產(chǎn)品工作異常。
另外,當(dāng)軟件加載到錯(cuò)誤的地址時(shí),該校驗(yàn)方法也可能校驗(yàn)不出錯(cuò)誤,比如某段代碼的正確的地址為0x20000~0x20021,如圖3所示。假設(shè)在加載過程中發(fā)生錯(cuò)誤,誤加載到地址0x20040~0x20061中,如圖4所示,其它代碼均一致。這種錯(cuò)誤只比較校驗(yàn)和是檢查不出來的,只有用本方案的校驗(yàn)方法才能檢查出來。
圖3 地址正確的代碼
圖4 地址錯(cuò)誤的代碼
圖5 軟件校驗(yàn)流程圖
本方案設(shè)計(jì)的軟件校驗(yàn)方法為:通過SCI接口接收上位機(jī)發(fā)送的“S數(shù)據(jù)包”,然后解析,解析完成后和對應(yīng)地址的代碼按字進(jìn)行校對,直到將所有代碼校對完。校對完成后若全部一致則校驗(yàn)正確,否則校驗(yàn)錯(cuò)誤。本方案的軟件校驗(yàn)流程圖如圖5所示。
本方案在加載/校驗(yàn)過程中對每一包數(shù)據(jù)的加載/校驗(yàn)地址都進(jìn)行了合法性判斷,保證了加載/校驗(yàn)的正確性;并且采用逐字校對的方法進(jìn)行校驗(yàn),防止了“單粒子翻轉(zhuǎn)”效應(yīng)和加載地址錯(cuò)誤導(dǎo)致的產(chǎn)品工作異常。但由于要進(jìn)行數(shù)據(jù)合法性檢查和轉(zhuǎn)換,會導(dǎo)致時(shí)間較長,若不考慮時(shí)間因素,本方案不失為一種穩(wěn)定可靠的軟件加載/校驗(yàn)方案。