錢(qián)方亮 林榮鋒 周 宇 張?jiān)霭?張 磊
1(上海交通大學(xué)電子信息與電氣工程學(xué)院 上海 201109)2(上海航天控制技術(shù)研究所 上海 201109)
隨著組網(wǎng)式、鏈路式或星座集群式的衛(wèi)星協(xié)同模式發(fā)展浪潮的到來(lái),傳統(tǒng)衛(wèi)星構(gòu)架和研制模式已經(jīng)無(wú)法適應(yīng)當(dāng)前商業(yè)市場(chǎng)對(duì)衛(wèi)星產(chǎn)業(yè)規(guī)模和成本的要求。衛(wèi)星的小型化、高集成度、多功能性的發(fā)展方向勢(shì)在必行。而系統(tǒng)軟件的集成化設(shè)計(jì)是實(shí)現(xiàn)衛(wèi)星小型化、低成本的重要手段之一。與此同時(shí)對(duì)微小衛(wèi)星軟件復(fù)雜度、靈活性、可靠性等要求也隨之大幅提高。
重構(gòu)容錯(cuò)技術(shù)[1]利用可重用的軟硬件資源,實(shí)現(xiàn)衛(wèi)星在軌的故障檢測(cè)、缺陷修復(fù)、功能變更和任務(wù)擴(kuò)展,對(duì)保證衛(wèi)星在軌的正常工作、壽命延長(zhǎng)、響應(yīng)各類需求具有重要意義。由于衛(wèi)星故障的多樣性,重構(gòu)容錯(cuò)技術(shù)的研究實(shí)現(xiàn)方向也很廣泛。如通過(guò)數(shù)據(jù)讀寫(xiě)比對(duì)SRAM區(qū)進(jìn)行檢測(cè),并利用PROM的引導(dǎo)軟件進(jìn)行重載以實(shí)現(xiàn)SRAM的分區(qū)重構(gòu)[2];通過(guò)工程經(jīng)驗(yàn),對(duì)可能出現(xiàn)的故障情況進(jìn)行軟件自主檢測(cè)診斷并通過(guò)預(yù)設(shè)的故障模式實(shí)現(xiàn)系統(tǒng)的重構(gòu)[3];基于FPGA實(shí)現(xiàn)對(duì)存儲(chǔ)分區(qū)引導(dǎo)重構(gòu)[4]等。
軟件在軌編程功能是用于衛(wèi)星缺陷修復(fù)、功能變更和擴(kuò)展,實(shí)現(xiàn)系統(tǒng)重構(gòu)容錯(cuò)最重要的手段。早期的星載計(jì)算機(jī)多用于SRAM+PROM的存儲(chǔ)構(gòu)架,系統(tǒng)軟件固化于不可擦寫(xiě)的PROM中,在軌編程功能設(shè)計(jì)僅基于對(duì)SRAM區(qū)域[5-7]。但由于SRAM空間有限,對(duì)上注模塊的數(shù)量和規(guī)模有嚴(yán)格的限制。另外當(dāng)發(fā)生斷電或復(fù)位,編程模塊需要重新上注,難以重復(fù)使用。而基于DSP平臺(tái)利用在PROM區(qū)預(yù)置鉤子函數(shù)實(shí)現(xiàn)部分模塊替代的編程方案[8],由于鉤子數(shù)量有限且具有局限性從而僅能實(shí)現(xiàn)部分模塊的增加,無(wú)法做到任意模塊的變更。而目前采用SRAM+PROM+EEPROM(FLASH)存儲(chǔ)構(gòu)架的計(jì)算機(jī),利用存放于PROM的引導(dǎo)軟件實(shí)現(xiàn)對(duì)EEPROM或FLASH區(qū)軟件或補(bǔ)丁的搬運(yùn)和執(zhí)行工作[9-11]。在早期方案基礎(chǔ)上增加了對(duì)EEPROM(FLASH)區(qū)的編程功能。但對(duì)存儲(chǔ)器配置要求較高,而且增加了引導(dǎo)軟件的實(shí)現(xiàn)需求,提高了研制成本和時(shí)間。因此針對(duì)這樣的情況,一種適用于小型衛(wèi)星,實(shí)現(xiàn)衛(wèi)星在軌功能修復(fù)、變更、擴(kuò)充的遠(yuǎn)程編程技術(shù)的研究顯得尤為重要。
本文提出一種基于SRAM+FLASH存儲(chǔ)構(gòu)架的在軌編程功能設(shè)計(jì)方案。此方案不僅能夠?qū)崿F(xiàn)衛(wèi)星系統(tǒng)軟件在軌編程功能的要求,而且功能實(shí)現(xiàn)的硬件要求較低,無(wú)需增加額外的存儲(chǔ)器配置,降低了研制成本,同時(shí)無(wú)需開(kāi)發(fā)引導(dǎo)軟件,減少了軟件復(fù)雜性和研制周期。
本文以TMS570LS31x系列控制器為例進(jìn)行詳述,該控制器采用ARM Cortex-R4F處理器,片內(nèi)配備256 KB的RAM以及3 MB的FLASH存儲(chǔ)器,且均具有ECC校驗(yàn)功能。
根據(jù)該控制器的硬件環(huán)境,系統(tǒng)軟件固化在FLASH中。如圖1所示,當(dāng)計(jì)算機(jī)上電或復(fù)位后,程序?qū)拇鎯?chǔ)器0x0地址,即FLASH區(qū)域開(kāi)始運(yùn)行,通過(guò)對(duì)FLASH區(qū)代碼指令的讀取以及SRAM區(qū)數(shù)據(jù)的操作完成程序的正常工作。
圖1 存儲(chǔ)空間分布
由于本方案不添加引導(dǎo)功能且不增加片外存儲(chǔ)配置,僅采用片內(nèi)存儲(chǔ)空間實(shí)現(xiàn)星載軟件各類功能,那么,F(xiàn)LASH內(nèi)的代碼存儲(chǔ)分配以及各項(xiàng)功能設(shè)計(jì)是實(shí)現(xiàn)星載軟件應(yīng)用程序、在軌編程維護(hù)功能、保證系統(tǒng)可靠性和安全性的關(guān)鍵。
如表1所示,片內(nèi)FLASH區(qū)分為三個(gè)部分,而實(shí)際可用空間為Bank0和Bank1兩部分,共由27塊子區(qū)域組成。每一塊子區(qū)域分別對(duì)應(yīng)一個(gè)“寫(xiě)保護(hù)鎖”,因此通過(guò)對(duì)空間各區(qū)域存儲(chǔ)內(nèi)容的設(shè)計(jì),實(shí)現(xiàn)FLASH區(qū)可修改區(qū)和不可修改區(qū)的劃分,確保對(duì)程序數(shù)據(jù)的有效保護(hù),防止誤擦誤寫(xiě)的操作,提高系統(tǒng)軟件的可靠性和安全性。
表1 FLASH區(qū)Bank和Sector分布
續(xù)表1
針對(duì)微小衛(wèi)星功能要求以及目前星載軟件的規(guī)模估計(jì),如圖2所示對(duì)FLASH區(qū)存儲(chǔ)空間進(jìn)行分配。將片內(nèi)3 MB FLASH劃分成9部分,分別用于三份應(yīng)用軟件的備份存儲(chǔ)、重要數(shù)據(jù)的保存、以及編程補(bǔ)丁的固化。由于片內(nèi)FLASH是由兩塊1.5 MB的FLASH塊拼裝設(shè)計(jì)實(shí)現(xiàn)的,設(shè)計(jì)確保相同的三份代碼分別存放在兩塊中,以提高存儲(chǔ)空間的可靠性。
圖2 星載計(jì)算機(jī)存儲(chǔ)空間分配
應(yīng)用軟件區(qū):為避免空間環(huán)境對(duì)存儲(chǔ)器造成瞬間位翻轉(zhuǎn)效應(yīng)或損壞,對(duì)星載軟件進(jìn)行備份存儲(chǔ)。若存儲(chǔ)器空間發(fā)生局部翻轉(zhuǎn)或損壞,可通過(guò)3份程序的“三取二”比對(duì)功能,實(shí)現(xiàn)存儲(chǔ)數(shù)據(jù)的及時(shí)糾錯(cuò)校正。
重要數(shù)據(jù)區(qū):對(duì)星上重要數(shù)據(jù)和狀態(tài)量進(jìn)行保存。由于掉電或復(fù)位后,SRAM區(qū)數(shù)據(jù)無(wú)法保存。因此表征軟件運(yùn)行狀態(tài),例如軟件首次上電標(biāo)志、補(bǔ)丁區(qū)自動(dòng)啟用開(kāi)關(guān)等重要信息將存儲(chǔ)在FLASH中備份。除此之外,用于在軌編程使用的模塊地址表以及補(bǔ)丁地址表也存放在此區(qū)域。
編程補(bǔ)丁區(qū):當(dāng)確認(rèn)編程內(nèi)容工作正確有效后,可將具有長(zhǎng)期使用需求的在軌編程包固化在FLASH中,確保發(fā)生復(fù)位后,軟件補(bǔ)丁無(wú)需重新上注,及時(shí)得到使用。
衛(wèi)星在軌期間,應(yīng)用軟件區(qū)與重要數(shù)據(jù)區(qū)兩部分區(qū)域,除“三取二”維護(hù)操作外,不可通過(guò)注數(shù)修改,以確保原系統(tǒng)軟件的可用性。
軟件模塊地址表用于存儲(chǔ)系統(tǒng)軟件各模塊的首地址。地址表的大小可根據(jù)軟件的實(shí)際規(guī)模進(jìn)行增減。當(dāng)前地址表大小預(yù)設(shè)為2 048字節(jié),表內(nèi)每一個(gè)單元占用4個(gè)字節(jié)(32位),因此地址表最多可供512個(gè)可編程模塊存放入口地址。
每個(gè)模塊入口地址在地址表的位置固定且唯一,如圖3所示,地址表的首地址即為模塊索引Id為1模塊的入口地址,以此類推,地址表末地址即為模塊索引Id為512模塊的入口地址。
圖3 模塊地址表的實(shí)現(xiàn)
為實(shí)現(xiàn)系統(tǒng)可編程模塊的建立、使用以及維護(hù)功能,軟件在FLASH和SRAM指定區(qū)域內(nèi)分別定義和維護(hù)一份模塊地址表。FLASH區(qū)地址表用于模塊地址的記錄和地址表的建立。SRAM地址表用于模塊調(diào)用地址查詢和地址表更新。此外,根據(jù)可編程內(nèi)容在FLASH區(qū)維護(hù)一份FLASH區(qū)補(bǔ)丁地址表,用于存放需要替換原模塊入口地址的替換信息。
當(dāng)計(jì)算機(jī)發(fā)生上電或復(fù)位時(shí)FLASH區(qū)地址表將被重新建立,建立機(jī)制及調(diào)用關(guān)系如圖4所示。首先,對(duì)FLASH區(qū)的模塊地址表進(jìn)行初始化,將各可編程模塊的入口地址依次寫(xiě)入FLASH區(qū)地址表中;然后,將FLASH區(qū)地址表搬到SRAM預(yù)設(shè)的地址表首地址中,并將可編程模塊的調(diào)用關(guān)系與SRAM地址表綁定;最后,根據(jù)指令查找補(bǔ)丁地址表內(nèi)是否存在模塊替換信息,如果存在,則記錄表中替換單元的地址偏移以及地址數(shù)據(jù),更新SRAM區(qū)模塊地址表相同偏移模塊的入口地址。
圖4 模塊地址表的建立及調(diào)用機(jī)制
在軟件運(yùn)行中,當(dāng)某個(gè)可編程模塊被軟件調(diào)用時(shí),利用SRAM地址表獲取該模塊的入口地址,通過(guò)地址跳轉(zhuǎn)完成模塊的調(diào)用。
在軌編程功能不僅可以實(shí)現(xiàn)軟件的故障修復(fù),還可以根據(jù)實(shí)際情況,完成衛(wèi)星功能變更和增減,從而提高衛(wèi)星運(yùn)行的可靠性和靈活性。該功能分為兩部分:SRAM區(qū)在軌編程和FLASH區(qū)在軌編程。
由于SRAM存儲(chǔ)具有易失性,因此SRAM區(qū)可編程功能用于滿足衛(wèi)星功能短期變更或者長(zhǎng)期變更前在軌驗(yàn)證需求。當(dāng)編程內(nèi)容存在錯(cuò)誤或無(wú)需繼續(xù)使用,則可以通過(guò)指令上注或復(fù)位的手段實(shí)現(xiàn)可編程內(nèi)容的快速清除。與之相對(duì)應(yīng),利用FLASH存儲(chǔ)的非易失性,F(xiàn)LASH區(qū)可編程功能可用于存放充分驗(yàn)證后且具有長(zhǎng)期變更需求的補(bǔ)丁。當(dāng)發(fā)生復(fù)位后,存放于FLASH區(qū)的補(bǔ)丁通過(guò)注數(shù)指令即可實(shí)現(xiàn)變更功能的再次運(yùn)行。
通過(guò)預(yù)先定義的數(shù)據(jù)包格式以及地面工具完成編程數(shù)據(jù)包的生成。如圖5所示,編程數(shù)據(jù)包由包頭、包類型、包序號(hào)、數(shù)據(jù)區(qū)以及校驗(yàn)碼等信息組成。各部分信息分別用于檢測(cè)數(shù)據(jù)包的正確性、識(shí)別包的類型、攜帶包索引信息以及承載編程數(shù)據(jù)有效信息。
數(shù)據(jù)內(nèi)容部分包含數(shù)據(jù)寫(xiě)入的地址信息、有效數(shù)據(jù)個(gè)數(shù)以及有效數(shù)據(jù)。由于數(shù)據(jù)包長(zhǎng)度固定,當(dāng)有效數(shù)據(jù)個(gè)數(shù)小于數(shù)據(jù)包可容納的數(shù)據(jù)個(gè)數(shù)時(shí),則根據(jù)有效數(shù)據(jù)個(gè)數(shù)寫(xiě)入實(shí)際數(shù)據(jù)數(shù)量,其余以填充碼進(jìn)行填充。
圖5 在軌編程數(shù)據(jù)包格式
當(dāng)接收到在軌編程數(shù)據(jù)包后,星上軟件首先對(duì)數(shù)據(jù)包內(nèi)容進(jìn)行解析和檢查。如圖6所示,依次對(duì)數(shù)據(jù)包頭、類型、包數(shù)、ID、編程模式等信息的合法性進(jìn)行診斷。若正確則將包狀態(tài)置為正常,并根據(jù)數(shù)據(jù)寫(xiě)入地址、有效數(shù)據(jù)個(gè)數(shù)及有效數(shù)據(jù)完成數(shù)據(jù)寫(xiě)入。否則將包狀態(tài)置為錯(cuò)誤,并丟棄當(dāng)前數(shù)據(jù)包。當(dāng)所有在軌編程包均成功上注,上注狀態(tài)標(biāo)志則置為“上注完成”,否則置為“未上注”或“上注中”狀態(tài),通過(guò)遙測(cè)信息將包狀態(tài)以及上注狀態(tài)實(shí)時(shí)告知地面,用于對(duì)當(dāng)前上注情況的判斷。
根據(jù)此方案實(shí)現(xiàn)編程包上注功能的優(yōu)點(diǎn)在于:
1) 支持最大20包/次的編程操作,總包數(shù)設(shè)置可根據(jù)實(shí)際需求進(jìn)行修改。
2) 支持編程包的非順序上注。
3) 支持編程包上注過(guò)程中任意包重注和更新。
以上的功能將很大程度地簡(jiǎn)化在軌編程操作的復(fù)雜性,并可完全解決上注或數(shù)據(jù)出錯(cuò)情況,增加了系統(tǒng)軟件的可靠性和安全性。
若編程模式為SRAM區(qū)編程,當(dāng)確認(rèn)編程包全部注入成功后,通過(guò)單地址注數(shù)包對(duì)SRAM區(qū)模塊地址表相應(yīng)模塊入口地址進(jìn)行修改,程序?qū)⒏鶕?jù)該模塊新的入口地址完成調(diào)用,從而實(shí)現(xiàn)模塊替換的功能。
若編程模式為FLASH區(qū)編程,當(dāng)確認(rèn)編程包全部注入成功后,首先通過(guò)單地址注數(shù)包對(duì)FLASH區(qū)補(bǔ)丁地址表相應(yīng)模塊入口地址進(jìn)行寫(xiě)入,然后利用“SRAM區(qū)地址表更新”指令,修改SRAM區(qū)地址表內(nèi)相應(yīng)模塊的入口地址,從而實(shí)現(xiàn)模塊替換功能。
首先,在軌編程功能的相關(guān)操作和使用對(duì)FLASH區(qū)原有的星上軟件不存在任何更改和影響。一旦編程數(shù)據(jù)對(duì)衛(wèi)星正常運(yùn)行產(chǎn)生了影響,可通過(guò)指令或復(fù)位實(shí)現(xiàn)軟件狀態(tài)的快速恢復(fù),保證了星上軟件的安全性。
其次,此方案對(duì)被替換模塊沒(méi)有任何要求,無(wú)需在模塊鏈接時(shí)預(yù)留多余空間,提高了空間利用率,簡(jiǎn)化軟件設(shè)計(jì)。對(duì)替換模塊規(guī)?;緵](méi)有限制,編程功能的使用方便、簡(jiǎn)潔。
再次,根據(jù)實(shí)際衛(wèi)星軟件的規(guī)模和功能,此方案中如模塊地址表大小、上注最大包數(shù)等配置參數(shù)可進(jìn)行靈活調(diào)整,具有較強(qiáng)的適用性和兼容性。
最后,此方案不僅適用于基于SRAM+FLASH存儲(chǔ)構(gòu)架衛(wèi)星系統(tǒng)的在軌編程功能實(shí)現(xiàn),也可以移植到基于SRAM+EEPROM或SRAM+MRAM存儲(chǔ)構(gòu)架的星載系統(tǒng)軟件中完成此功能實(shí)現(xiàn)。
在軌編程功能是衛(wèi)星軟件在軌故障修復(fù)、功能擴(kuò)充更新的最重要的手段。本文針對(duì)微小衛(wèi)星系統(tǒng)軟件提出一種較為完善的在軌編程功能實(shí)現(xiàn)方案,采用最小配置的存儲(chǔ)構(gòu)架,最大程度地滿足星載軟件對(duì)任意模塊、任意區(qū)域編程的功能要求。同時(shí),該方案對(duì)軟件模塊替換和恢復(fù)之間的切換具有快速性和易操作性,提高了衛(wèi)星軟件功能正常運(yùn)行的可靠性和安全性,很大程度地提升了衛(wèi)星在軌使用壽命。