董振輝 穆強(qiáng) 毛亮 張紅軍 張睿 元勇
(北京空間飛行器總體設(shè)計(jì)部,北京 100094)
航天器總線控制器(BC)端和遠(yuǎn)程終端(RT)設(shè)備總線芯片隨機(jī)存取存儲器(RAM)發(fā)生永久性故障,將導(dǎo)致航天器部分或整體總線通信功能失效。傳統(tǒng)的在軌維護(hù)方式雖然能對故障進(jìn)行消除,但是代價和風(fēng)險較高。近年來,若干在軌衛(wèi)星相繼發(fā)生1553B總線芯片RAM區(qū)部分損壞的故障,經(jīng)分析均是因?yàn)樵谲墕瘟W覽1]鎖定后引起器件內(nèi)部RAM區(qū)損壞,發(fā)生的故障均為永久性故障。雖然部分衛(wèi)星通過在軌維護(hù)方式[2]對總線芯片RAM故障進(jìn)行了消除,但是這種在軌維護(hù)屬于臨時應(yīng)急處理,需要臨時查找軟件地址、設(shè)計(jì)維護(hù)方案并制作在軌維護(hù)指令,加之衛(wèi)星壽命后期總線芯片故障集中爆發(fā)的時候,軟件人員對軟件狀態(tài)已經(jīng)淡忘,進(jìn)行在軌維護(hù)的風(fēng)險較大。
鑒于進(jìn)口總線芯片在軌頻繁故障,在硬件設(shè)計(jì)上將進(jìn)口總線芯片替換為國產(chǎn)抗輻照總線芯片的基礎(chǔ)上,HXMT衛(wèi)星軟件設(shè)計(jì)過程中對能夠采取的可靠性措施進(jìn)行了分析論證。針對總線芯片RAM故障,設(shè)計(jì)了分別適用于BC端和RT端的總線芯片故障檢測和修復(fù)方案,可靈活便捷的處理各種總線芯片RAM故障。
HXMT衛(wèi)星BC端設(shè)備為數(shù)管分系統(tǒng)中央單元(CTU)[3],其使用總線芯片的方法,是將1553B總線作為共享資源[4-5],各軟件進(jìn)程排隊(duì)使用,即對總線芯片的操作分散在各個軟件進(jìn)程中。每次啟動消息發(fā)送后,軟件等待總線消息通信結(jié)束后才執(zhí)行后續(xù)操作??偩€芯片一般使用增強(qiáng)型工作模式[6],其內(nèi)存組織形式見表1。
表1 增強(qiáng)型BC端總線芯片內(nèi)存組織形式Table 1 Bus chip memory map of enhanced mode BC terminal
軟件通過總線芯片發(fā)送或接收數(shù)據(jù)時,需要設(shè)置以下RAM區(qū)域:
(1)Stack A/B(寫入待發(fā)送消息所在的BLOCK的片內(nèi)地址);
(2)Stack Pointer A/B(發(fā)送的起始位置);
(3)Message Count A/B(本次發(fā)送的消息個數(shù));
(4)Message Block(待發(fā)送的數(shù)據(jù)、命令字、控制字,如果本消息用于接收數(shù)據(jù),則無需寫入數(shù)據(jù))。
從總線芯片RAM區(qū)資源重配置角度考慮,一種最理想狀態(tài)是軟件僅使用一個棧區(qū),且消息塊使用不超過47個,從而主份棧區(qū)和消息塊區(qū)出現(xiàn)故障時,可以使用備份資源完全替換。HXMT衛(wèi)星數(shù)管分系統(tǒng)CTU軟件設(shè)計(jì)時,僅使用總線芯片A棧區(qū),使用最多64個消息塊,非常接近這種理想狀態(tài),具備進(jìn)行總線芯片RAM故障檢測和修復(fù)的條件[7]。
HXMT衛(wèi)星RT端設(shè)備以數(shù)管分系統(tǒng)遠(yuǎn)置單元(Remote Terminal Unit,RTU)為例[8],軟件設(shè)計(jì)時將總線芯片RAM按照子地址數(shù)據(jù)傳輸內(nèi)容進(jìn)行固定分配,內(nèi)存組織形式見表2。
表2 RT端總線芯片內(nèi)存組織形式Table 2 Bus chip memory map of RT terminal
在0000~0247H區(qū)域中,查找表可以互相備份,0140 H~01BFH為查找表主區(qū),01C0H~023FH為查找表備區(qū)。其余區(qū)域沒有可以使用的備份區(qū),不進(jìn)行備份。
0248 H~02FFH區(qū)域?yàn)镽TU軟件沒有使用的區(qū)域,不進(jìn)行備份。
0300H~03FFH為固定使用區(qū),沒有備份區(qū)域,不進(jìn)行備份。
0400H~0FFFH為數(shù)據(jù)塊區(qū),根據(jù)RTU軟件對總線RAM的占用情況,將其分為主備兩區(qū),0400H~07FFH為數(shù)據(jù)塊主區(qū),0800 H~0BFFH為數(shù)據(jù)塊備區(qū),主備區(qū)可以互相備份。
0C00 H~0FFFH為RTU軟件沒有使用的區(qū)域,不進(jìn)行備份。
通過以上難點(diǎn)分析,HXMT衛(wèi)星BC端和RT端分別采取了相應(yīng)的針對總線芯片RAM故障的容錯設(shè)計(jì)。
2.1.1 方案概述
對BC端總線芯片RAM故障的容錯設(shè)計(jì)如下:當(dāng)CTU在軌發(fā)生總線芯片RAM區(qū)故障時,首先通過上注指令檢測定位RAM故障區(qū)域范圍,之后上注指令使用總線芯片RAM區(qū)中的冗余資源替換故障資源,處理流程如圖1所示。
圖1 BC端總線芯片RAM故障處理流程圖Fig.1 Flow chat of BC terminal bus chip fault handling
該設(shè)計(jì)在具體實(shí)現(xiàn)和使用策略方面具備如下特點(diǎn)。
(1)CTU軟件本身具備檢測總線RAM的功能,但是平時一直處于關(guān)閉狀態(tài),根據(jù)地面上注指令打開自檢功能,以避免影響正??偩€通信。
(2)由于1553B總線芯片RAM在軌故障的位置隨機(jī),需要人去分析決策,因此總線芯片在軌故障后CTU軟件不進(jìn)行自主處理,而是交由地面決策后處理。
(3)為了更好的處理1553B總線芯片在軌出現(xiàn)的永久故障,該設(shè)計(jì)提供了一組靈活便捷的遙控指令,而不是采用風(fēng)險較大且復(fù)雜的在軌維護(hù)方式。2.1.2 BC端檢測定位RAM故障區(qū)域的方法
通過下傳的遙測數(shù)據(jù)發(fā)現(xiàn)BC與RT設(shè)備之間總線通信異常時,首先檢測定位總線芯片的故障區(qū)域??偩€芯片RAM區(qū)自檢功能平時處于禁止?fàn)顟B(tài),檢測由地面上注總線芯片RAM區(qū)檢測使能指令觸發(fā),CTU軟件接收到該指令后,對總線芯片RAM區(qū)寫入固定標(biāo)識并回讀比較一致性來定位故障區(qū)域??偩€芯片RAM區(qū)檢測使能指令格式如圖2所示。
圖2 總線芯片RAM區(qū)檢測使能指令格式Fig.2 Instruction format of bus chip RAM area detection enable
總線芯片RAM區(qū)自檢流程是以總線芯片4個字為一個檢測單元,先將整個RAM區(qū)全部寫為特定標(biāo)識1并讀回檢測是否為特定標(biāo)識1,再將整個RAM區(qū)全部寫為特定標(biāo)識2并讀回檢測是否為特定標(biāo)識2,其中特定標(biāo)識1和特定標(biāo)識2須保證RAM區(qū)每一位都被使用0和1獨(dú)立檢測過。如果使用特定標(biāo)識1檢測時發(fā)現(xiàn)某個檢測單元讀寫數(shù)據(jù)不一致,則不再使用特定標(biāo)識2檢測,直接將這個檢測單元標(biāo)記為故障,將所有檢測單元的檢測結(jié)果保存。整個總線芯片RAM區(qū)自檢完成后,CTU軟件將自檢結(jié)果自動封裝在內(nèi)存讀出遙測源包[9]中,通過測控信道下傳到地面。
上注一次總線芯片RAM區(qū)檢測使能指令,RAM區(qū)自檢操作執(zhí)行一次,之后自動關(guān)閉。執(zhí)行RAM區(qū)自檢過程中,自動停止所有總線通信,待自檢完成后再開啟。由于自檢過程中總線芯片的RAM區(qū)數(shù)據(jù)被修改,自檢完成后CTU軟件須按照自檢前總線芯片棧區(qū)和消息塊區(qū)的使用配置,重新初始化總線芯片。
地面分析遙測下傳的總線芯片RAM區(qū)故障檢測結(jié)果,如果經(jīng)分析認(rèn)為總線芯片中尚有足夠的備份資源,則采取相應(yīng)的芯片故障修復(fù)手段。修復(fù)手段根據(jù)故障的嚴(yán)重程度分為兩種,處理方法如
2.1.3 節(jié)所述。
2.1.3 BC端RAM故障的處理方法
BC端總線芯片當(dāng)前模式下使用的棧區(qū)(或消息塊區(qū))發(fā)生故障,但是另一份棧區(qū)(或消息塊區(qū))正常,處理方法是上注總線芯片模式切換指令,使用與當(dāng)前模式下不同的棧區(qū)和消息塊區(qū)組合。對于這種非嚴(yán)重RAM故障,這一步即可完成處理??偩€芯片模式切換指令格式如圖3所示。
圖3 總線芯片模式切換指令格式Fig.3 Instruction format of bus chip mode switching
其中,對于總線芯片模式:
(1)A1H表示使用棧區(qū)A(0x0000~0x00FF)和消息塊(0~63);
(2)B1H表示使用棧區(qū)B(0x0F00~0x0FFF)和消息塊(93~30);
(3)A2 H表示使用棧區(qū)A(0x0000~0x00FF)和消息塊(93~30);
(4)B2H表示使用棧區(qū)B(0x0F00~0x0FFF)和消息塊(0~63)。
這里的“總線芯片模式”是指總線芯片中棧區(qū)和消息塊區(qū)的使用組合方式??偩€芯片具有A、B兩個棧區(qū)和94個消息塊,其中94個消息塊可以劃分成兩組,分別對應(yīng)到A棧區(qū)和B棧區(qū),每個棧區(qū)對應(yīng)不超過64個消息塊。94個消息塊劃分為兩組的方式是,第一組為消息塊0~63,第二組為消息塊93~64,再加上從第一組中選擇的34個消息塊(塊號63~30,倒序排列),兩組均為64塊。這種消息塊組合策略在一次通信最大消息數(shù)小于等于47條時,能夠?qū)崿F(xiàn)消息塊資源的完全互換,同時也支持了最大通信消息數(shù)為64條的情況(最大通信消息數(shù)大于47條時,A、B區(qū)對應(yīng)消息塊重疊將不可避免)。
將總線芯片模式劃分為A1、A2、B1、B2四種,A1模式使用A棧區(qū)和塊號0~63的消息塊,B1模式使用B棧區(qū)和塊號93~30的消息塊,A2模式使用A棧區(qū)和塊號93~30的消息塊,B2模式使用B棧區(qū)和塊號0~63的消息塊。這樣,在最大總線通信消息數(shù)量小于等于47條時,A1與B1模式可實(shí)現(xiàn)資源完全互換,A2與B2模式可實(shí)現(xiàn)資源完全互換。
總線芯片模式的切換策略是:上電后總線芯片默認(rèn)工作在A1模式,若總線芯片RAM區(qū)在軌發(fā)生故障,上注總線芯片RAM區(qū)自檢使能指令,判讀總線芯片RAM區(qū)自檢結(jié)果。如果故障發(fā)生在A1模式的棧區(qū)但總線芯片其它區(qū)域無故障,則可切到B1模式或B2模式;如果故障發(fā)生在A1模式的消息塊區(qū)但總線芯片其它區(qū)域無故障,則可切到A2模式或B1模式;如果A1模式的棧區(qū)和消息塊區(qū)均發(fā)生故障但總線芯片其它區(qū)域無故障,則可切換到B1模式。根據(jù)該策略,A1、A2、B1、B2四種模式可按需切換,將總線芯片重配置為無故障的棧區(qū)和消息塊區(qū)組合。四種模式切換指令可事先在地面制作并進(jìn)行測試驗(yàn)證,屆時直接上注到星上。
根據(jù)自檢結(jié)果,如果兩個棧區(qū)都發(fā)生了故障或者兩個棧區(qū)對應(yīng)的消息塊區(qū)都發(fā)生了故障,但經(jīng)分析認(rèn)為總線芯片中仍然具有足夠的備份資源,可根據(jù)實(shí)際故障情況制作并上注總線芯片棧區(qū)和消息塊區(qū)設(shè)置指令,利用芯片中尚能使用的資源拼湊出一個新的棧區(qū)和消息塊區(qū)組合,使總線芯片能夠繼續(xù)工作??偩€芯片棧區(qū)和消息塊區(qū)設(shè)置指令格式如圖4所示,可對總線芯片的棧區(qū)、固定地址區(qū)、消息塊區(qū)3類資源進(jìn)行重新配置。
圖4 總線芯片棧區(qū)和消息塊區(qū)設(shè)置指令格式Fig.4 Instruction format of bus chip stack area and message block area setting
由圖4可知,其中:
(1)A、B區(qū)使用標(biāo)志:0x AA——使用A區(qū)進(jìn)行總線通信,0x BB——使用B區(qū)進(jìn)行總線通信。
(2)用于替換棧區(qū)的塊號:塊號為0~87時,表示使用從該塊號開始的連續(xù)7個消息塊替換棧區(qū),塊號為0x CC時,表示使用棧區(qū)0x0000~0x00FF,塊號為0x DD時,表示使用棧區(qū)0x0F00~0x0FFF。
(3)塊號01~塊號64:范圍0~93,用于保存總線通信消息,64個塊號不能有重復(fù)。
重新配置總線芯片棧區(qū)的方法是,如果A、B棧區(qū)中只有一個損壞則使用另一個棧區(qū)替換,如果A、B棧區(qū)均損壞,則使用未損壞的消息塊代替棧區(qū),共需要7個連續(xù)的消息塊,同時重新設(shè)定新棧區(qū)對應(yīng)的消息塊資源。在指令中可指定使用總線芯片原始A、B棧區(qū)或者使用連續(xù)消息塊替換原始棧區(qū),當(dāng)使用消息塊替換原始A、B棧區(qū)時,消息塊必須至少7個且地址連續(xù)。
總線芯片固定地址區(qū)包括堆棧指針和待發(fā)消息計(jì)數(shù)區(qū),A、B區(qū)各有一套固定地址資源,可互相備份。因此重新配置固定地址資源的方法是,如果A區(qū)的堆棧指針和待發(fā)消息計(jì)數(shù)區(qū)故障則使用B區(qū)的堆棧指針和待發(fā)消息計(jì)數(shù)區(qū),反之亦然。
重新配置總線芯片消息塊區(qū)的方法是,通過指令指定64個消息塊用來保存總線通信數(shù)據(jù),塊號取值范圍為0~93,該64個塊號彼此之間不能重復(fù),且不能與用于替換棧區(qū)的塊號重復(fù)。
上注總線芯片棧區(qū)和消息塊區(qū)設(shè)置指令后,BC端計(jì)算機(jī)軟件根據(jù)指令指定的總線芯片棧區(qū)資源、固定地址資源、消息塊區(qū)資源的設(shè)置方法對總線芯片重新初始化。
如果上注總線芯片模式切換指令或總線芯片棧區(qū)和消息塊區(qū)設(shè)置指令后,故障依然存在,說明總線芯片的寄存器出現(xiàn)故障,該故障不可修復(fù),此時應(yīng)采取BC端設(shè)備切備機(jī)的措施。
由于1553B總線通信由BC端設(shè)備發(fā)起,RT端軟件寫入總線芯片RAM區(qū)的數(shù)據(jù)會受總線通信的影響,因此自檢無法在完成總線芯片初始化之后進(jìn)行。通過實(shí)驗(yàn)測試,在RT端總線芯片上電初始化之前,Lookup Table區(qū)和DATA BLOCK區(qū)寫入數(shù)據(jù)內(nèi)容不受總線消息的影響,可以進(jìn)行寫入讀寫自檢的操作。
HXMT衛(wèi)星數(shù)管分系統(tǒng)RTU軟件設(shè)計(jì)時,將1553B總線RAM區(qū)的Lookup Table和DATA BLOCK劃分為主備兩個區(qū)。主區(qū)包括Lookup Table A和部分DATA BLOCK(0400 H~07FFH),備區(qū)包括Lookup Table B和部分DATA BLOCK(0800 H~0BFFH)。當(dāng)RTU在軌發(fā)生總線芯片RAM區(qū)故障時,地面先發(fā)送RTU斷電指令,之后發(fā)送RTU加電指令,由RTU軟件在進(jìn)行總線初始化之前自動完成RAM故障區(qū)域檢測和處理。處理流程如圖5所示。由圖5可知,在RTU軟件進(jìn)行總線芯片初始化之前,首先對Lookup Table區(qū)和DATA BLOCK區(qū)進(jìn)行自檢測,根據(jù)檢測的結(jié)果選用主區(qū)或者備區(qū)。如果主區(qū)檢測錯誤,則使用備區(qū)。使用主區(qū)或使用備區(qū)標(biāo)志放在外部RAM中,若RT端軟件運(yùn)行過程中,需要對總線重新初始化操作時,首先判斷主區(qū)備區(qū)標(biāo)志,再進(jìn)行總線重新初始化。
圖5 RT端總線芯片RAM故障處理流程圖Fig.5 Flow chat of RT terminal bus chip fault handling
測試環(huán)境如圖6所示,在圖6所示測試環(huán)境[10]中,CTU為航天器BC端設(shè)備,通過總線仿真卡模擬RT設(shè)備并監(jiān)視總線通信狀態(tài),總線芯片故障檢測和修復(fù)指令通過測試客戶機(jī)上注到CTU軟件,指令執(zhí)行結(jié)果通過內(nèi)存讀出總線芯片RAM數(shù)據(jù)進(jìn)行判讀。測試內(nèi)容如下:
(1)測試上注總線芯片RAM區(qū)檢測使能指令后,檢測結(jié)果正確下傳。
(2)測試上注總線芯片模式切換指令后,總線芯片模式切換,總線通信正常。
(3)測試上注總線芯片棧區(qū)和消息塊區(qū)設(shè)置指令后,棧區(qū)和消息塊區(qū)重配置,總線通信正常。
RTU為航天器RT端設(shè)備,對其總線芯片RAM故障容錯設(shè)計(jì)的測試內(nèi)容包括:
(1)用RTU軟件仿真器加載RTU軟件,默認(rèn)使用總線芯片RAM主區(qū),總線通信正常。
(2)用RTU軟件仿真器制造總線芯片RAM讀寫錯誤,測試使用總線芯片RAM備區(qū),總線通信正常。
上述測試驗(yàn)證了本文所述方法的正確性和有效性,在軌實(shí)施時,通過兩條遙控指令即可完成總線芯片RAM區(qū)的故障檢測和修復(fù),與傳統(tǒng)的在軌維護(hù)方法對比見表3。
圖6 測試環(huán)境Fig.6 Environment of testing
表3 兩種方法對比Table 3 Comparison of two methods
通過分析HXMT衛(wèi)星BC端和RT端設(shè)備使用1533B總線芯片的特點(diǎn),本文提出一種對總線芯片RAM故障的容錯設(shè)計(jì),通過便捷的遙控指令即可實(shí)現(xiàn)對總線芯片資源的重配置,避免了采用傳統(tǒng)在軌維護(hù)手段給整星安全帶來的風(fēng)險。對于BC端,該方法適用于總線芯片僅使用單區(qū)RAM資源的使用方式,并不適用于雙區(qū)均被占用的使用方式。對于RT端,該方法適用于總線RAM區(qū)空間足夠備份的情況。另外,若總線芯片的寄存器故障,或者RAM故障區(qū)域過大導(dǎo)致不能拼湊出最小可用資源集合時,則只能放棄修復(fù)或者功能降級修復(fù)。該方法在多個型號中進(jìn)行了應(yīng)用,對提高設(shè)備的可靠性和安全性起到了一定作用。
參考文獻(xiàn)(References)
[1]王良江,韓留軍.1553B總線器件單粒子效應(yīng)實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2013,21(3):753-755 Wang Liangjiang,Han Liujun.Design of 1553B bus components single event effect testing system[J].Computer Measurement&Control,2013,21(3):753-755(in Chinese)
[2]安軍社,劉艷秋,孫輝先.軟件的動態(tài)維護(hù)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2003,29(2):238-239 An Junshe,Liu Yanqiu,Sun Huixian.Implementation of on-board software maintenance[J].Computer Engineering,2003,29(2):238-239(in Chinese)
[3]郭堅(jiān),張紅軍,付連芳.面向星載應(yīng)用的1553B總線仿真卡二次開發(fā)軟件[J].航天器工程,2012,21(4):78-82 Guo Jian,Zhang Hongjun,Fu Lianfang.Software design of 1553B bus emulator card secondary development for onboard application[J].Spacecraft Engineering,2012,21(4):78-82(in Chinese)
[4]趙昶宇,顏昌翔,于平.1553B總線上消息的實(shí)時調(diào)度[J].光學(xué)精密工程,2010,18(3):732-740 Zhao Changyu,Yan Changxiang,Yu Ping.Real time scheduling of messages on 1553B bus[J].Optics and Precision Engineering[J].2010,18(3):732-740(in Chinese)
[5]國防科學(xué)技術(shù)工業(yè)委員會.GJB 289A-97數(shù)字式時分制指令/響應(yīng)型多路傳輸數(shù)據(jù)總線[S].北京:國防科學(xué)技術(shù)工業(yè)委員會,1997 Commission of Science,Technology and Industry for National Defence.GJB 289A-97 Digital time division command/response multiplex data bus[S].Beijing:Commission of Science,Technology and Industry for National Defence,1997(in Chinese)
[6]國防科學(xué)技術(shù)工業(yè)委員會.GJB/Z 209-2002數(shù)字式時分制指令/響應(yīng)型多路傳輸數(shù)據(jù)總線應(yīng)用手冊[S].北京:國防科學(xué)技術(shù)工業(yè)委員會,2002 Commission of Science,Technology and Industry for National Defence.GJB/Z 209-2002 The handbook of digital time division command/response multiplex data bus[S].Beijing:Commission of Science,Technology and Industry for National Defence,2002(in Chinese)
[7]江建慧,朱為國.嵌入式存儲器的內(nèi)建自測試和內(nèi)建自修復(fù)[J].同濟(jì)大學(xué)學(xué)報(bào)(自然科學(xué)版),2004,32(8):1050-1056 Jiang Jianhui,Zhu Weiguo.Survey on built-in self-test and built-in self-repair of embedded memories[J].Journal of Tongji University(Natural Science),2004,32(8):1050-1056(in Chinese)
[8]郭堅(jiān),劉欣,毛亮.1553B總線終端消息覆蓋的原因及解決方案[J].航天器工程,2011,20(5):88-92 Guo Jian,Liu Xin,Mao Liang.Cause and resolution for 1553b bus message overcast problem[J].Spacecraft Engineering,2011,20(5):88-92(in Chinese)
[9]何熊文,張猛.遙控和遙測包應(yīng)用標(biāo)準(zhǔn)在航天器中的使用方法[J].航天器工程,2012,21(3):54-60 He Xiongwen,Zhang Meng.Application method of telecommand and telemetry packet utilization standard in spacecraft[J].Spacecraft Engineering,2012,21(3):54-60(in Chinese)
[10]董振輝,侯春青,郭堅(jiān),等.一種航天器軟件進(jìn)程堆棧使用深度的動態(tài)檢測方法[J].航天器工程,2017,26(1):85-90 Dong Zhenhui,Hou Chunqing,Guo Jian,et al.Dynamic detection method of spacecraft software process stack used depth[J].Spacecraft Engineering,2017,26(1):85-90(in Chinese)