劉偉偉,李 欣,于俊慧,穆 強(qiáng),龐亞龍
(北京空間飛行器總體設(shè)計(jì)部,北京 100094)
軟件是航天器電子系統(tǒng)的重要組成部分,也是實(shí)現(xiàn)航天器功能與人器交互的控制載體與信息處理中樞。隨著航天技術(shù)的不斷發(fā)展,一方面航天器的運(yùn)行壽命不斷延長(zhǎng),所承擔(dān)的任務(wù)需求也不斷演變,另一方面星載軟件的功能復(fù)雜度越來(lái)越高,地面測(cè)試期間難以避免存無(wú)法發(fā)現(xiàn)深層次隱藏的bug,在這種情況下,對(duì)星載軟件進(jìn)行在軌重構(gòu)、升級(jí)、更新將成為航天器電子設(shè)備必不可少的功能之一[1-3]。
為了快速、便捷、可靠地實(shí)現(xiàn)星載軟件在軌重構(gòu)與升級(jí),首先需要解決3方面的問(wèn)題。第一,星載軟件的復(fù)雜度越來(lái)越大,相應(yīng)的軟件規(guī)模也越來(lái)越大,尤其是大規(guī)模FPGA的應(yīng)用越來(lái)越廣泛,其軟件規(guī)模已經(jīng)從最初的幾Mbit提升為幾百M(fèi)bit,這種情況下無(wú)論是對(duì)衛(wèi)星-地面之間的通信速率,還是航天器內(nèi)部設(shè)備與設(shè)備之間的傳輸速率都提出了較高的要求[4-7]。第二,傳統(tǒng)軟件設(shè)計(jì)大多針對(duì)CPU內(nèi)存中的軟件進(jìn)行更新,存在重啟后升級(jí)軟件丟失的缺陷,為了支持重構(gòu)與升級(jí)軟件的固化,需要采用可重復(fù)編程存儲(chǔ)器(如EEPROM或FLASH)實(shí)現(xiàn)星載軟件的存儲(chǔ),但是航天器在軌運(yùn)行面臨著空間輻射環(huán)境的影響,容易導(dǎo)致存儲(chǔ)器中存儲(chǔ)的星載軟件被改寫(xiě),進(jìn)而出現(xiàn)星載軟件無(wú)法正常啟動(dòng)與運(yùn)行的故障[8-11],因此,保證星載軟件的容錯(cuò)存儲(chǔ)也是需要解決的一個(gè)關(guān)鍵環(huán)節(jié)。第三,航天器中的電子設(shè)備眾多,這些設(shè)備大多由不同的承制商進(jìn)行研制,不同廠商對(duì)于星載軟件的重構(gòu)和升級(jí)處理機(jī)制不盡一致,為了支持不同處理機(jī)制下的星載軟件重構(gòu)與升級(jí),不得不為每一類(lèi)設(shè)備設(shè)置專(zhuān)用的接口和處理系統(tǒng),進(jìn)一步提升了航天器系統(tǒng)的復(fù)雜度,也更加容易地引入故障點(diǎn)和設(shè)計(jì)的薄弱環(huán)節(jié),因此,對(duì)星載軟件構(gòu)建統(tǒng)一的在軌重構(gòu)與升級(jí)機(jī)制,采用統(tǒng)一的傳輸網(wǎng)絡(luò)與接口對(duì)于保證星載軟件重構(gòu)與升級(jí)的便捷性和可靠性具有至關(guān)重要的作用。
除此之外,傳統(tǒng)航天器大多采用1553B、CAN等低速串行總線實(shí)現(xiàn)星載數(shù)據(jù)傳輸與處理[12]。但是,面對(duì)著航天器的高精度姿態(tài)控制、高分辨率遙感影像的計(jì)算處理、高通量星間網(wǎng)絡(luò)的路由管理等新的復(fù)雜需求,航天器在軌信息處理數(shù)據(jù)量急劇增大,傳統(tǒng)的串行通信總線已難以支撐數(shù)據(jù)傳輸速率的需求,單一計(jì)算機(jī)的集中管理模式已難以滿(mǎn)足數(shù)據(jù)計(jì)算量的需求,在這種情況下,航天器電子網(wǎng)絡(luò)互聯(lián)技術(shù)已經(jīng)逐步從傳統(tǒng)的低速子系統(tǒng)間總線互聯(lián)逐漸向高速交換式系統(tǒng)網(wǎng)絡(luò)方向演變,由多臺(tái)計(jì)算機(jī)分別實(shí)現(xiàn)不同功能的獨(dú)立處理,由交換式的網(wǎng)絡(luò)實(shí)現(xiàn)計(jì)算機(jī)之間的信息交互與融合[13]。同時(shí),憑借多個(gè)計(jì)算機(jī)的獨(dú)立智能工作能力,除了可通過(guò)高速交換網(wǎng)絡(luò)實(shí)現(xiàn)并行計(jì)算、協(xié)同處理之外,也為故障情況下的任務(wù)遷移與系統(tǒng)重組奠定了基礎(chǔ),進(jìn)一步提升了航天器的可靠性。
在交換網(wǎng)絡(luò)的選擇中,SpaceWire憑借全雙工通信、通信協(xié)議簡(jiǎn)單、鏈路速率高(2~400 Mb/s)、容錯(cuò)能力強(qiáng)、網(wǎng)絡(luò)拓?fù)潇`活的特點(diǎn)[14-16],已經(jīng)有越來(lái)越多的航天器選擇采用SpaceWire作為數(shù)據(jù)通信的骨干網(wǎng)絡(luò)。其中,國(guó)內(nèi)高分辨率遙感衛(wèi)星以及風(fēng)云系列氣象衛(wèi)星中均采用了SpaceWire網(wǎng)絡(luò),ESA與NASA的多個(gè)空間科學(xué)探測(cè)器中也大量采用了SpaceWire作為數(shù)據(jù)傳輸網(wǎng)絡(luò)[17-18]。
在這種背景下,本文以SpaceWire高速交換網(wǎng)絡(luò)作為基礎(chǔ),構(gòu)建了面向星載軟件重構(gòu)的管控網(wǎng)絡(luò),并在此基礎(chǔ)上研制了一款軟件維護(hù)控制器,可以實(shí)現(xiàn)星載軟件的在線維修、升級(jí)、檢錯(cuò)、糾錯(cuò)、APP加載/切換等功能,并針對(duì)FPGA在空間輻射環(huán)境中應(yīng)用的薄弱環(huán)節(jié),基于軟件維護(hù)控制器實(shí)現(xiàn)對(duì)其SEU、SEFI等故障的檢測(cè)和恢復(fù),形成了覆蓋星載軟件在軌重構(gòu)與升級(jí)全過(guò)程的完整解決方案。
星載軟件重構(gòu)網(wǎng)絡(luò)架構(gòu)如圖1所示,主要由SpaceWire網(wǎng)絡(luò)、串行數(shù)據(jù)總線、數(shù)管計(jì)算機(jī)以及其他計(jì)算機(jī)、傳感器和執(zhí)行機(jī)構(gòu)等終端設(shè)備組成。
圖1 星載軟件重構(gòu)網(wǎng)絡(luò)架構(gòu)
SpaceWire作為分布式計(jì)算機(jī)設(shè)備之間的高速數(shù)據(jù)傳輸骨干網(wǎng)絡(luò),可以實(shí)現(xiàn)小型載荷數(shù)據(jù)、信息處理數(shù)據(jù)、軟件升級(jí)數(shù)據(jù)等信息的傳輸與交互[3]。
數(shù)管計(jì)算機(jī)作為航天器與地面進(jìn)行數(shù)據(jù)交互以及航天器內(nèi)部信息處理的中樞,實(shí)現(xiàn)對(duì)維護(hù)軟件以及升級(jí)軟件的統(tǒng)一管理。數(shù)管計(jì)算機(jī)采用硬件模塊化設(shè)計(jì)模式,內(nèi)部集成遙測(cè)遙控模塊、處理器模塊、指令驅(qū)動(dòng)模塊、大容量存儲(chǔ)模塊等模塊化產(chǎn)品,可根據(jù)任務(wù)需求實(shí)現(xiàn)模塊化功能擴(kuò)展。其中數(shù)管計(jì)算機(jī)內(nèi)部的大容量存儲(chǔ)模塊作為整個(gè)航天器平臺(tái)的共享存儲(chǔ)資源池,實(shí)現(xiàn)對(duì)小載荷數(shù)據(jù)、航天器運(yùn)行日志數(shù)據(jù)、軟件APP等數(shù)據(jù)的存儲(chǔ),該大容量存儲(chǔ)模塊可以通過(guò)高速上行通道直接接收地面站上注的控制指令以及軟件升級(jí)數(shù)據(jù)。數(shù)管計(jì)算機(jī)內(nèi)部的處理器模塊作為SpaceWire網(wǎng)絡(luò)以及串行數(shù)據(jù)總線的主控計(jì)算機(jī),完成SpaceWire路由表維護(hù)、任務(wù)規(guī)劃、健康管理、能源管理等功能,同時(shí),處理器模塊也負(fù)責(zé)通過(guò)測(cè)控通道與地面站之間進(jìn)行通信,將航天器的工作狀態(tài)信息下傳地面站,接收地面站上注的控制指令以及軟件升級(jí)數(shù)據(jù)等信息。
其他計(jì)算機(jī)以及傳感器與執(zhí)行機(jī)構(gòu)作為終端設(shè)備,通過(guò)SpaceWire網(wǎng)絡(luò)或者串行數(shù)據(jù)總線與數(shù)管計(jì)算機(jī)進(jìn)行通信,一方面接收數(shù)管計(jì)算機(jī)發(fā)送的控制指令,并向數(shù)管計(jì)算機(jī)返回本計(jì)算機(jī)的工作狀態(tài),另一方面,接收數(shù)管計(jì)算機(jī)分發(fā)的星載軟件重構(gòu)及升級(jí)數(shù)據(jù),完成本計(jì)算機(jī)內(nèi)部CPU、FPGA等器件軟件的升級(jí)與重構(gòu)。
在星載軟件重構(gòu)網(wǎng)絡(luò)中,大容量存儲(chǔ)模塊作為整個(gè)航天器平臺(tái)的共享存儲(chǔ)資源池對(duì)星載軟件的重構(gòu)與升級(jí)具有至關(guān)重要的作用。大容量存儲(chǔ)模塊既是軟件重構(gòu)與升級(jí)數(shù)據(jù)的存儲(chǔ)中心,也是進(jìn)行軟件分發(fā)的中轉(zhuǎn)中心,因此,為了提升不同種類(lèi)數(shù)據(jù)在大容量存儲(chǔ)模塊中進(jìn)行存儲(chǔ)的好用性與易用性,并且保證各類(lèi)數(shù)據(jù)之間的相互隔離以提升存儲(chǔ)的可靠性,在大容量存儲(chǔ)模塊中設(shè)計(jì)實(shí)現(xiàn)了一種混合文件系統(tǒng),可實(shí)現(xiàn)靜態(tài)文件與動(dòng)態(tài)文件兩種不同類(lèi)型文件的管理[3],如圖2所示。
圖2 混合文件系統(tǒng)結(jié)構(gòu)框圖
混合文件系統(tǒng)基于NAND Flash的并行以及流水設(shè)計(jì),具有完備的容錯(cuò)機(jī)制,對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行糾錯(cuò)編碼,F(xiàn)lash存儲(chǔ)塊的壞塊自動(dòng)替換等。其中,靜態(tài)文件支持循環(huán)寫(xiě)入、邊擦邊記,存儲(chǔ)容量在軌可調(diào)整,用于長(zhǎng)期日志數(shù)據(jù)記錄;動(dòng)態(tài)文件根據(jù)在軌存儲(chǔ)需求實(shí)時(shí)創(chuàng)建,用于注入程序、環(huán)境監(jiān)測(cè)數(shù)據(jù)的記錄,容量根據(jù)寫(xiě)入數(shù)據(jù)量需求自動(dòng)追加,使用完畢后自動(dòng)刪除。
同時(shí),針對(duì)大容量存儲(chǔ)模塊還設(shè)計(jì)了統(tǒng)一的訪問(wèn)控制指令集,實(shí)現(xiàn)所有文件統(tǒng)一訪問(wèn)接口,屏蔽了NAND FLASH的底層訪問(wèn)細(xì)節(jié),大幅提升了用戶(hù)對(duì)對(duì)大容量存儲(chǔ)模塊訪問(wèn)的便捷性。所設(shè)計(jì)的訪問(wèn)指令表1所示。
表1 存儲(chǔ)器訪問(wèn)指令集
表2 軟件維護(hù)控制器軟件壓縮及糾檢錯(cuò)編碼測(cè)試結(jié)果
當(dāng)需要對(duì)航天器進(jìn)行軟件重構(gòu)或升級(jí)更新時(shí),地面站可通過(guò)測(cè)控信道將軟件發(fā)送至航天器數(shù)管計(jì)算機(jī),由數(shù)管計(jì)算機(jī)中的處理器模塊進(jìn)行接收以及完整性校驗(yàn)后,直接通過(guò)串行數(shù)據(jù)總線分發(fā)給相應(yīng)的終端計(jì)算機(jī),或者通過(guò)數(shù)管計(jì)算機(jī)內(nèi)部硬件模塊之間的通信總線傳送給大容量存儲(chǔ)模塊,由大容量存儲(chǔ)模塊通過(guò)SpaceWire網(wǎng)絡(luò)進(jìn)行分發(fā)。同時(shí),地面站也可通過(guò)高速傳輸信道直接將軟件升級(jí)數(shù)據(jù)發(fā)送至大容量存儲(chǔ)模塊,由大容量模塊接收并進(jìn)行完整性校驗(yàn),將接收到的軟件升級(jí)數(shù)據(jù)存儲(chǔ)到統(tǒng)一的存儲(chǔ)資源池中,之后在合適的時(shí)機(jī)或根據(jù)控制指令的指示通過(guò)SpaceWire網(wǎng)絡(luò)進(jìn)行分發(fā)。
除此之外,在各個(gè)終端設(shè)備中配置軟件維護(hù)控制器,軟件維護(hù)控制器能夠接收串行數(shù)據(jù)總線或者SpaceWire網(wǎng)絡(luò)上分發(fā)的軟件升級(jí)數(shù)據(jù),并將接收到的數(shù)據(jù)進(jìn)行正確性校驗(yàn)后寫(xiě)入本地的存儲(chǔ)器中。
軟件維護(hù)控制器位于各個(gè)終端設(shè)備中,能夠在終端設(shè)備正常運(yùn)行過(guò)程中,接收重構(gòu)或升級(jí)的軟件數(shù)據(jù),完成軟件的在線維修、升級(jí)、檢錯(cuò)、糾錯(cuò)等功能,實(shí)現(xiàn)對(duì)星載軟件的無(wú)感重構(gòu),還可完成對(duì)CPU、DSP、FPGA等器件的軟件APP選擇、啟動(dòng)以及加載配置管理等功能。并且采用標(biāo)準(zhǔn)化的格式實(shí)現(xiàn)對(duì)軟件維護(hù)數(shù)據(jù)的包裝,實(shí)現(xiàn)不同設(shè)備和軟件維護(hù)信息接口的統(tǒng)一化,簡(jiǎn)化了軟件在線維護(hù)操作復(fù)雜度,提升航天器電子系統(tǒng)軟件在軌維護(hù)的效率和可靠性。
軟件維護(hù)控制器主要由網(wǎng)絡(luò)通信接口單元、CPU接口單元、FPGA接口單元(包括SEFI檢測(cè)單元、FPGA動(dòng)態(tài)刷新單元、FPGA定時(shí)回讀單元、FPGA加載配置單元)、存儲(chǔ)器接口單元、控制寄存器以及狀態(tài)寄存器等幾部分組成,如圖3所示。
圖3 軟件維護(hù)控制器組成框圖
網(wǎng)絡(luò)通信接口單元是軟件維護(hù)控制器接收控制指令、接收軟件升級(jí)數(shù)據(jù)、返回工作狀態(tài)的通信接口,是軟件維護(hù)控制器融入星載軟件重構(gòu)網(wǎng)絡(luò)的橋梁,為此,軟件維護(hù)控制器提供了SpaceWire、UART、SPI接口,通過(guò)SpaceWire接口可使軟件維護(hù)控制器直接接入星載軟件重構(gòu)網(wǎng)絡(luò),通過(guò)UART、SPI接口可使軟件維護(hù)控制器通過(guò)橋接電路接入SpaceWire網(wǎng)絡(luò)或者1553B、CAN等串行數(shù)據(jù)總線。網(wǎng)絡(luò)通信接口的連接關(guān)系如圖4所示。
圖4 軟件維護(hù)控制器網(wǎng)絡(luò)通信接口連接關(guān)系示意圖
網(wǎng)絡(luò)通信接口單元提供的SpaceWire網(wǎng)絡(luò)接口使得軟件維護(hù)控制器可以直接接入整個(gè)航天器的SpaceWire網(wǎng)絡(luò)中,直接從SpaceWire網(wǎng)絡(luò)以及大容量存儲(chǔ)模塊中接收軟件升級(jí)數(shù)據(jù),直接在數(shù)管計(jì)算機(jī)的控制下完成軟件的升級(jí)與重構(gòu)等維護(hù)操作。網(wǎng)絡(luò)通信接口單元提供的UART、SPI接口使得軟件維護(hù)控制器可直接與計(jì)算機(jī)內(nèi)部的處理器進(jìn)行通信,此時(shí),各個(gè)終端計(jì)算機(jī)中的處理器負(fù)責(zé)與整個(gè)航天器的SpaceWire網(wǎng)絡(luò)以及一級(jí)串行數(shù)據(jù)總線進(jìn)行通信,處理器完成軟件升級(jí)數(shù)據(jù)的接收后通過(guò)UART或SPI接口轉(zhuǎn)發(fā)給軟件維護(hù)控制器,這種連接方式一方面可以降低對(duì)SpaceWire交換器接口數(shù)量的需求,另一方面可以在只有1553B以及CAN總線接口的傳統(tǒng)設(shè)備中使用,保證了軟件控制器具有更加靈活的接入手段和更加廣泛的應(yīng)用環(huán)境。
FPGA接口單元負(fù)責(zé)完成與SRAM型FPGA之間的通信,完成對(duì)SRAM型FPGA的軟件加載配置,同時(shí),為了提升SRAM型FPGA在空間輻照環(huán)境下的適應(yīng)能力,避免單粒子效應(yīng)對(duì)FPGA功能的影響,在FPGA接口單元中集成了SEFI檢測(cè)單元以及FPGA動(dòng)態(tài)刷新和FPGA定時(shí)回讀單元,其中SEFI檢測(cè)單元用于對(duì)SRAM型FPGA的單粒子功能中斷進(jìn)行檢測(cè),定時(shí)回讀單元用于對(duì)FPGA已加載的軟件位流進(jìn)行回讀來(lái)判斷是否發(fā)生單粒子翻轉(zhuǎn),動(dòng)態(tài)刷新單元用于對(duì)FPGA軟件配置存儲(chǔ)區(qū)重復(fù)寫(xiě)入軟件位流,實(shí)現(xiàn)對(duì)單粒子翻轉(zhuǎn)的糾正。
CPU接口單元負(fù)責(zé)完成對(duì)CPU/DSP軟件的加載,加載控制通過(guò)對(duì)CPU/DSP的復(fù)位控制以及SPI接口通信實(shí)現(xiàn),在復(fù)位完成后,在CPU/DSP和存儲(chǔ)器之間建立SPI透?jìng)魍?,?shí)現(xiàn)CPU/DSP對(duì)存儲(chǔ)器中軟件數(shù)據(jù)的訪問(wèn)和讀取加載。
存儲(chǔ)器接口單元實(shí)現(xiàn)對(duì)非易失存儲(chǔ)器的控制,包括對(duì)非易失存儲(chǔ)器的控制包括擦除、編程、讀取等功能。同時(shí),對(duì)非易失存儲(chǔ)器支持分區(qū)管理模式,在一個(gè)分區(qū)內(nèi)存儲(chǔ)一份獨(dú)立的軟件數(shù)據(jù),通過(guò)網(wǎng)絡(luò)通信接口單元接收到的指令控制對(duì)其中一個(gè)分區(qū)的操作,以及從哪一個(gè)分區(qū)中讀取軟件數(shù)據(jù),并將其加載到CPU、DSP或者FPGA中,從而實(shí)現(xiàn)對(duì)多個(gè)軟件APP的選擇與管理,提升航天器對(duì)多任務(wù)處理以及軟件定義能力的支持。
由于軟件維護(hù)控制器支持對(duì)多個(gè)器件的軟件加載以及非易失存儲(chǔ)器的管理,具有多種不同的工作模式,為了避免多個(gè)工作模式之間的沖突,將不同的工作模式按照先后順序結(jié)合優(yōu)先級(jí)的方式進(jìn)行設(shè)計(jì),如圖5所示。
圖5 軟件維護(hù)控制器工作模式
處于最高優(yōu)先級(jí)的為對(duì)非易失存儲(chǔ)器的擦擦以及編程操作,在此期間不會(huì)對(duì)FPGA以及CPU/DSP進(jìn)行任何操作,直到對(duì)存儲(chǔ)器完成擦擦以及寫(xiě)入新的軟件數(shù)據(jù)為止。
處于第二優(yōu)先級(jí)的為對(duì)FPGA以及CPU/DSP的軟件加載。對(duì)CPU/DSP的軟件加載支持上電/復(fù)位后的自動(dòng)加載以及通過(guò)指令控制的重加載。對(duì)FPGA的軟件加載除了支持上電/復(fù)位后的自動(dòng)加載以及指令控制的重加載之外,還支持動(dòng)態(tài)加載,也就是在對(duì)FPGA進(jìn)行SEFI檢測(cè)過(guò)程中,發(fā)現(xiàn)單粒子功能中斷故障后就會(huì)自動(dòng)對(duì)FPGA進(jìn)行重加載,達(dá)到及時(shí)消除故障的目的。
處于第三優(yōu)先級(jí)的為對(duì)FPGA的定時(shí)回讀、定時(shí)刷新以及回讀刷新操作。由于SRAM型FPGA在空間輻射環(huán)境中應(yīng)用時(shí),一旦FPGA內(nèi)部的配置存儲(chǔ)器發(fā)生單粒子翻轉(zhuǎn)將有可能導(dǎo)致FPGA的功能紊亂[19-21],為此,軟件維護(hù)控制器可通過(guò)回讀方式實(shí)現(xiàn)對(duì)FPGA中軟件數(shù)據(jù)是否存在單粒子翻轉(zhuǎn)故障進(jìn)行檢測(cè),通過(guò)刷新方式實(shí)現(xiàn)對(duì)單粒子翻轉(zhuǎn)故障的恢復(fù),支撐SRAM型FPGA在航天器中的高可靠應(yīng)用。其中定時(shí)刷新為周期性的無(wú)條件對(duì)FPGA內(nèi)部存儲(chǔ)的軟件數(shù)據(jù)進(jìn)行重復(fù)性寫(xiě)入覆蓋,回讀刷新是只有在回讀檢測(cè)到單粒子翻轉(zhuǎn)故障后才對(duì)FPGA內(nèi)部存儲(chǔ)的軟件數(shù)據(jù)進(jìn)行寫(xiě)入覆蓋。對(duì)FPGA進(jìn)行加載配置、SEFI檢測(cè)以及回讀與刷新操作流程如圖6所示。
圖6 FPGA配置及回讀刷新操作流程
為了保證對(duì)FPGA軟件加載的可靠性,在對(duì)其進(jìn)行加載時(shí)采取連續(xù)3次加載的方式,即在一次加載失敗后會(huì)自動(dòng)進(jìn)行第二次加載,直到連續(xù)3次加載均失敗時(shí)才認(rèn)為對(duì)FPGA的加載失敗,避免瞬時(shí)故障或干擾造成加載失敗的影響。對(duì)FPGA的SEFI檢測(cè)支持對(duì)FPGA的POR、SMAP、FAR以及全局信號(hào)的單粒子功能中斷故障檢測(cè),同樣,為了避免瞬時(shí)故障或干擾造成的影響,對(duì)每種類(lèi)型的SEFI檢測(cè)也都采取連續(xù)2次檢測(cè)的方式,只有2次均故障的情況下才認(rèn)為發(fā)生SEFI故障。
對(duì)FPGA的回讀周期和刷新周期可通過(guò)寄存器進(jìn)行配置,如公式(1)所示。
(1)
其中:n可設(shè)置為0~15之間的任意值,由控制寄存器進(jìn)行設(shè)置。
處于第四優(yōu)先級(jí)的為對(duì)非易失存儲(chǔ)器的巡檢操作,主要用于在軟件維護(hù)控制器的空閑時(shí)間段內(nèi)對(duì)非易失存儲(chǔ)器中的數(shù)據(jù)內(nèi)容進(jìn)行錯(cuò)誤檢測(cè)和糾正。
軟件維護(hù)控制器的使用方式對(duì)于星載軟件重構(gòu)與升級(jí)的好用性和易用性具有重要的作用,為此,在軟件維護(hù)控制器設(shè)計(jì)中進(jìn)行了針對(duì)性的優(yōu)化設(shè)計(jì),主要集中在以下幾個(gè)方面。
1)引入通用化設(shè)計(jì)措施:航天器電子設(shè)備中所采用的CPU、DSP、FPGA等器件的種類(lèi)繁多,不同類(lèi)型的器件對(duì)軟件加載的要求也不盡一致,在這種情況下,軟件維護(hù)控制器將內(nèi)部的控制寄存器在外部存儲(chǔ)器中進(jìn)行了完整映射,允許用戶(hù)對(duì)存儲(chǔ)器中映射寄存器預(yù)存控制信息(預(yù)存控制信息更新的方式與軟件重構(gòu)與升級(jí)方式一致),實(shí)現(xiàn)軟件維護(hù)控制器滿(mǎn)足不同器件的軟件加載要求功能??刂萍拇嫫饔成潢P(guān)系如圖7所示。
圖7 寄存器映射關(guān)系款框圖
2)引入軟件壓縮設(shè)計(jì):軟件規(guī)模越來(lái)越大,尤其是大規(guī)模FPGA器件的配置碼流更是高達(dá)幾百M(fèi)bit,在星載軟件重構(gòu)和升級(jí)過(guò)程中對(duì)衛(wèi)星-地面通信帶寬提出了很高的要求,為此,軟件維護(hù)控制器實(shí)現(xiàn)對(duì)軟件的壓縮設(shè)計(jì),降低上注軟件規(guī)模。
3)引入片段化更新設(shè)計(jì):有些時(shí)候星載軟件并不需要對(duì)整個(gè)軟件進(jìn)行重構(gòu)與升級(jí),而是只需更新其中的一小部分,另外,在星載軟件重構(gòu)與升級(jí)過(guò)程中,可能會(huì)出現(xiàn)某一部分?jǐn)?shù)據(jù)錯(cuò)誤的情況,需要重新上注,因此軟件維護(hù)控制器實(shí)現(xiàn)片段化更新,實(shí)現(xiàn)星載軟件數(shù)據(jù)包的中斷續(xù)傳和亂序注入,避免對(duì)整個(gè)軟件進(jìn)行二次上注的操作。
4)引入糾檢錯(cuò)編碼設(shè)計(jì):為了實(shí)現(xiàn)星載軟件的重構(gòu)與升級(jí),需要采用可重復(fù)編程的非易失存儲(chǔ)器,使得存儲(chǔ)器中的數(shù)據(jù)會(huì)受到空間輻射環(huán)境的影響,為了提升軟件存儲(chǔ)的可靠性,軟件維護(hù)控制器通過(guò)BCH實(shí)現(xiàn)對(duì)存儲(chǔ)數(shù)據(jù)的糾檢錯(cuò)編碼,可實(shí)現(xiàn)在線的錯(cuò)誤檢測(cè)和錯(cuò)誤糾正。
5)引入存儲(chǔ)器巡檢設(shè)計(jì):星載軟件一般僅在啟動(dòng)的時(shí)刻對(duì)存儲(chǔ)器進(jìn)行讀取實(shí)現(xiàn)軟件加載,之后會(huì)有很長(zhǎng)一段時(shí)間不再對(duì)存儲(chǔ)器進(jìn)行訪問(wèn),這時(shí)候即使對(duì)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行了BCH編碼也有可能出現(xiàn)SEU積累,一旦積累錯(cuò)誤超出了BCH糾錯(cuò)能力,將造成無(wú)法對(duì)錯(cuò)誤的數(shù)據(jù)進(jìn)行糾正,為此,軟件維護(hù)控制器實(shí)現(xiàn)對(duì)存儲(chǔ)器的周期性遍歷,及時(shí)檢測(cè)存儲(chǔ)器中存在的錯(cuò)誤,并且一旦檢測(cè)到發(fā)生錯(cuò)誤,及時(shí)通過(guò)BCH進(jìn)行糾正,并將糾正后的數(shù)據(jù)重新回寫(xiě)到非易失存儲(chǔ)器中。
6)引入完整性校驗(yàn)設(shè)計(jì):軟件維護(hù)控制器接收軟件升級(jí)或重構(gòu)等維護(hù)數(shù)據(jù)時(shí)是按照數(shù)據(jù)幀的方式進(jìn)行接收和存儲(chǔ),一旦在軟件升級(jí)或重構(gòu)數(shù)據(jù)在傳輸過(guò)程中丟失或發(fā)生錯(cuò)誤,導(dǎo)致軟件維護(hù)控制器在寫(xiě)入非易失存儲(chǔ)器過(guò)程中發(fā)生軟件數(shù)據(jù)丟失或錯(cuò)誤,將導(dǎo)致后續(xù)FPGA或CPU/DSP等無(wú)法正常加載啟動(dòng),因此軟件維護(hù)控制器通過(guò)設(shè)置軟件數(shù)據(jù)整體CRC校驗(yàn)方式實(shí)現(xiàn)對(duì)軟件數(shù)據(jù)完整性的校驗(yàn),只有在通過(guò)完整性校驗(yàn)的情況下才會(huì)執(zhí)行后續(xù)的軟件加載以及FPGA回讀、刷新等操作,保證不出現(xiàn)設(shè)備無(wú)法正常啟動(dòng)的風(fēng)險(xiǎn)和故障模式。
軟件維護(hù)控制器的網(wǎng)絡(luò)通信接口提供了多種類(lèi)型的通信接口,為了降低用戶(hù)使用的復(fù)雜度,多個(gè)網(wǎng)絡(luò)通信接口之間采用相同的通信協(xié)議。其中UART和SPI接口的數(shù)據(jù)包格式完全一致,SpaceWire接口在UART和SPI數(shù)據(jù)包的基礎(chǔ)上進(jìn)一步打包成SpaceWire數(shù)據(jù)包(UART和SPI接口數(shù)據(jù)包格式作為SpaceWire數(shù)據(jù)包的cargo)。詳細(xì)的數(shù)據(jù)包格式如圖8所示。
圖8 數(shù)據(jù)包格式
SpaceWire數(shù)據(jù)包格式中,各部分的功能說(shuō)明如下:
1)目標(biāo)節(jié)點(diǎn)邏輯地址用于表明軟件維護(hù)控制器在SpaceWire網(wǎng)絡(luò)中的路由地址,用于數(shù)管計(jì)算機(jī)向軟件維護(hù)器發(fā)送控制指令以及軟件升級(jí)數(shù)據(jù);
2)源節(jié)點(diǎn)邏輯地址用于表明數(shù)管計(jì)算機(jī)在SpaceWire網(wǎng)絡(luò)中的路由地址,用于軟件維護(hù)控制器向數(shù)管計(jì)算機(jī)返回工作狀態(tài)和操作結(jié)果等信息;
3)協(xié)議標(biāo)識(shí)符固定為0xFE,代表SpaceWire數(shù)據(jù)包格式遵循SpaceWire標(biāo)準(zhǔn)中指定的串行傳輸通用協(xié)議;
4)數(shù)據(jù)域中的內(nèi)容為完整的UART/SPI數(shù)據(jù)包格式規(guī)定的數(shù)據(jù);
5)EOP為SpaceWire數(shù)據(jù)包的結(jié)尾標(biāo)識(shí)。
UART/SPI數(shù)據(jù)包格式中,各部分功能說(shuō)明如下:
1)幀頭固定為0xEB90;
2)ID域代表軟件維護(hù)控制器的節(jié)點(diǎn)號(hào),當(dāng)UART接口采用RS485總線連接方式以及SPI接口采用總線連接方式,并且在總線上有多個(gè)軟件維護(hù)控制器時(shí),該節(jié)點(diǎn)號(hào)用于指定需要操作的軟件維護(hù)控制器;
3)長(zhǎng)度域代表數(shù)據(jù)包中數(shù)據(jù)域的字節(jié)數(shù);
4)命令域代表要對(duì)軟件維護(hù)控制器進(jìn)行的操作,如寫(xiě)寄存器、讀寄存器等;
5)地址域代表要對(duì)軟件維護(hù)控制器進(jìn)行操作的寄存器或者存儲(chǔ)器地址;
6)數(shù)據(jù)域代表要對(duì)軟件維護(hù)控制器中寄存器或存儲(chǔ)器進(jìn)行操作的有效數(shù)據(jù);
7)校驗(yàn)域代表從幀頭開(kāi)始到數(shù)據(jù)域的異或校驗(yàn)值。
在星載軟件重構(gòu)系統(tǒng)中,軟件維護(hù)控制器是實(shí)現(xiàn)軟件可靠重構(gòu)以及統(tǒng)一重構(gòu)機(jī)制的關(guān)鍵,因此測(cè)試驗(yàn)證首先針對(duì)軟件維護(hù)控制器的功能進(jìn)行測(cè)試驗(yàn)證,并在此基礎(chǔ)上開(kāi)展航天器工程應(yīng)用驗(yàn)證。
軟件維護(hù)控制器支持對(duì)CPU/DSP以及FPGA等器件的軟件維護(hù)。其中對(duì)CPU/DSP器件的軟件維護(hù)以TMS320C6678系列DSP作為軟件維護(hù)對(duì)象,通過(guò)SPI接口作為DSP軟件加載接口進(jìn)行測(cè)試,測(cè)試中軟件維護(hù)控制器能夠正確接收來(lái)自UART/SPI接口的軟件維護(hù)數(shù)據(jù)幀,并將其寫(xiě)入非易失存儲(chǔ)器中,之后通過(guò)指令控制在DSP與存儲(chǔ)器之間建立SPI透?jìng)麈溌?,并通過(guò)復(fù)位控制實(shí)現(xiàn)對(duì)DSP軟件的加載啟動(dòng)。
軟件維護(hù)控制器對(duì)FPGA器件的軟件維護(hù)以Xilinx公司的Virtex、Virtex-II、Virtex-4、Virtex-5、Virtex-7、Kintex-7等系列的FPGA作為軟件維護(hù)對(duì)應(yīng)進(jìn)行測(cè)試,測(cè)試中將不同系列的FPGA作為獨(dú)立的測(cè)試子板分別與軟件維護(hù)控制器進(jìn)行連接,軟件維護(hù)控制器能夠自主識(shí)別所連接的FPGA器件,并根據(jù)識(shí)別的器件結(jié)果完成對(duì)FPGA的軟件加載以及回讀和刷新等操作,在對(duì)FPGA進(jìn)行回讀與刷新操作器件,F(xiàn)PGA工作正常。
除此之外,在軟件維護(hù)控制器外部分別配置FLASH以及PROM存儲(chǔ)器情況下,針對(duì)軟件維護(hù)控制器引入的軟件壓縮、片段化更新、糾檢錯(cuò)編碼、完整性校驗(yàn)等相應(yīng)的功能進(jìn)行了專(zhuān)項(xiàng)測(cè)試,測(cè)試過(guò)程中各項(xiàng)功能正常。
軟件維護(hù)控制器是面向空間輻照環(huán)境中運(yùn)行的航天器進(jìn)行軟件維護(hù),其自身的可靠性和空間環(huán)境適應(yīng)性對(duì)于保證航天器在軌的軟件可靠重構(gòu)具有重要的作用。為此,針對(duì)軟件維護(hù)控制器的抗輻射能力進(jìn)行了專(zhuān)項(xiàng)測(cè)試驗(yàn)證。利用中國(guó)原子能科學(xué)研究院HI-13串列加速器和中科院近代物理研究所HIRL回旋加速器對(duì)FPGA維護(hù)控制器進(jìn)行了單粒子效應(yīng)試驗(yàn),利用鈷-60 γ射線源對(duì)FPGA維護(hù)控制器進(jìn)行了電離總劑量輻照試驗(yàn),通過(guò)試驗(yàn)結(jié)果表明,軟件維護(hù)控制器的抗電離總劑量能力大于100 krand(si),SEU閾值大于37.3 MeV·cm2/mg,SEL閾值大于81.35 MeV·cm2/mg,滿(mǎn)足宇航空間輻射環(huán)境下的應(yīng)用需求。
基于SpaceWire的星載軟件重構(gòu)網(wǎng)絡(luò)基于星形拓?fù)浯罱?,并在高分辨率遙感衛(wèi)星中開(kāi)展工程應(yīng)用,如圖9所示。
圖9 星載軟件重構(gòu)網(wǎng)絡(luò)連接示意圖
在SMU中配置大容量存儲(chǔ)模塊,在SpaceWire以及1553B總線的各個(gè)終端節(jié)點(diǎn)設(shè)備中內(nèi)部配置軟件維護(hù)控制器實(shí)現(xiàn)對(duì)DSP以及FPGA器件的軟件在線升級(jí)管理,通過(guò)軟件壓縮,可將28 Mbyte的FPGA碼流壓縮為4 Mbyte,壓縮率達(dá)到80%以上。SpaceWire網(wǎng)絡(luò)采用200Mbps鏈路速率,傳輸任務(wù)數(shù)據(jù)以及軟件升級(jí)數(shù)據(jù),軟件升級(jí)數(shù)據(jù)傳輸時(shí)間由30分鐘縮減為10秒鐘。
本文以SpaceWire為基礎(chǔ)實(shí)現(xiàn)了航天器升級(jí)的管控網(wǎng)絡(luò),通過(guò)SpaceWire網(wǎng)絡(luò)中的大容量存儲(chǔ)實(shí)現(xiàn)了星載軟件升級(jí)的集中存儲(chǔ),通過(guò)軟件維護(hù)控制器實(shí)現(xiàn)了對(duì)CPU/DSP/FPGA等各類(lèi)器件軟件加載、重構(gòu)、檢錯(cuò)、糾錯(cuò)、APP選擇等功能的就近管理與分布式式控制,并支持對(duì)傳統(tǒng)1553B以及CAN總線等航天器設(shè)備的支持,使星載軟件升級(jí)網(wǎng)絡(luò)成為能夠緊密協(xié)作,用戶(hù)無(wú)感的虛擬化一體網(wǎng)絡(luò),實(shí)現(xiàn)了整個(gè)航天器軟件升級(jí)接口和操作方式的統(tǒng)一,改善了星載軟件升級(jí)方式不一致帶來(lái)的操作復(fù)雜弊端,大幅提升了軟件升級(jí)的效率和靈活度。