張 衡, 顧澤凌, 楊明遠, 趙建華, 李鴻志
(上海無線電設備研究所,上海201109)
DSP具有運行速度快,接口形式多樣,浮點運算能力強,開發仿真簡單快速的特點,在空間領域已獲得廣泛應用[1]。但DSP對單粒子輻照等空間特殊環境比較敏感,容易產生單粒子故障,加上空間應用的不確定性,往往需要對DSP進行在軌編程[2]。隨著空間載荷任務越來越多樣,功能越來越復雜,對DSP在軌編程與重構的數據量和速度的要求越來越高。而傳統在軌編程采用RS422通信方式,存在傳輸速率低、穩定性差的缺陷,一般只能用于某個變量的在軌編程與重構,無法滿足當前的應用需求。1553B作為成熟的空間通信總線接口,數據傳輸速率可達1 Mbps[3],通常采用A/B兩個通道互為備份,且具有勤務中斷查詢功能,穩定可靠,已經在空間領域獲得廣泛的應用[4]。通過1553B接口實現DSP在軌編程與重構功能,既可確保傳輸數據的穩定可靠,又可大大提高數據傳輸速率。
星載通信系統遠程終端(RT)信號處理機1553B通信接口的組成如圖1所示。電路采用輻射加固1553B遠程終端芯片B65170S6RH作為1553B接口控制器,選用1553B總線隔離變壓芯片T31S01/B3226-S進行A/B總線變壓器耦合[5]。由于B65170S6RH采用+5 V供電,需要經過電平轉換芯片JSR164245SA進行+3.3 V電平轉換,再由FPGA進行DSP的外部存儲器接口(external memory interfaces,EMIF)通道譯碼切換,連通B65170S6RH與DSP的數據通道。

圖1 接口電路示意圖
(1)跳轉指令與驗證程序設計
DSP在軌編程的基本原理是改變跳轉指令編碼讓程序跳轉到新函數。當檢測到在軌運行的DSP芯片出現單粒子故障并精確定位后,或用戶提出擴展功能的要求后,需要對在軌程序進行修改或添加新的功能程序。這種修改不能在原來的程序上進行,而要建立新的功能程序,為新程序分配存放段地址,保證程序重啟后,當其跳入新的指令編碼時,運行的是新的功能程序。
以內部RAM存儲空間為1 MB的DSP為例,其內部RAM 地址范圍為0x00000000~0x000FFFFF,如表1所示。

表1 DSP部分存儲空間分配表
為在軌編程分配專用內存空間,并為新程序分配存放段地址,空間及地址分配流程如圖2所示。首先在分配內存空間的.cmd文件中選擇某一區間作為在軌編程專用空間;然后指定好加載段地址,并指向ISRAM地址;最終在聲明變量的.h頭文件中將要修改的新函數分配到上述指定的段地址[6]。需要強調的是地面使用的DSP芯片型號規格及其程序必須與在軌運行的星載信號處理機中使用的一致。

圖2 分配專用空間和指定新程序存放段地址流程圖
驗證程序是在原始的DSP程序中,設計一段測試程序,函數名為orbit_progme_test1。其功能是設置2個局部變量a和b,若a>b,則在軌編程測試標志test_orbit_flag輸出為0x AA,并在上位機界面顯示,否則輸出為0x55。新功能程序orbit_progme_test2則與之相反。新的功能程序編輯完成后,在待替換程序入口處用新程序的函數名替換原程序的函數名,連接仿真器進行編譯,編譯無誤后將新程序的.out文件加載到DSP芯片,在新程序入口處設置斷點,選擇機器碼顯示。待替換功能程序與新功能程序及其機器碼如表2所示。
由表2可知,該程序起始地址為圖2指定的段地址0x00030000,地址0x00030000~0x0003004C中存儲的十六進制內存數據機器碼就是需要上注到DSP的新功能程序代碼。

表2 待替換功能程序與新功能程序及其機器碼表
跳轉指令碼替換程序流程如圖3所示。圖中address1為待替換跳轉指令所在的內存地址(即原程序函數orbit_progme_test1的入口地址),同時也是新的跳轉指令所在的內存地址(即新程序函數orbit_progme_test2的入口地址),機器碼jump_code1為待替換的跳轉指令編碼,機器碼jump_code2為新的跳轉指令編碼。當程序重啟并運行到地址address1時,就會跳轉到指令編碼jump_code2指向的功能函數orbit_progme_test2而不是jump_code1指向的orbit_progme_test1。

圖3 跳轉指令編碼替換示意圖
(2)在軌注數與內存下載設計
在完成了指令編碼跳轉功能與驗證程序設計之后,還需要將新的功能程序、新的指令編碼及其所在內存地址的十六進制機器碼上注到DSP之中。傳統的RS422通信根據幀頭判斷數據到來,并計算校驗和以保證數據的正確性,這種方式已經無法滿足當前在軌編程大數據量、快速可靠的要求。而1553B接口通信是通過勤務指令觸發中斷寄存器,不需要DSP解析數據幀頭,無需校驗和,且傳輸速率能達到1 Mbps,遠遠高于RS422接口,確保了傳輸的可靠性與時效性。
本設計中1553B采用的存儲緩沖方式為循環128字,每次總線控制(BC)端觸發在軌編程勤務中斷寄存器時,DSP將其循環128字存儲器復位,即每次從該循環128字存儲器起始地址開始存儲數據[7]。將新功能程序代碼拆分為每包不超過44字節的數據包,依次上注到在軌運行的DSP芯片中,DSP接收并將上注的代碼數據依次寫入指定內存地址,程序流程如圖4所示。

圖4 將新功能程序代碼寫入DSP指定地址流程圖
為了確保注入數據的正確性,需要內存下載(也稱為內存下卸)完成數據對比。從DSP內存中讀取之前注入的數據,每次至多讀取48個字節且為4的整數倍,組成24個字的1553B內存下載數據包,不夠24個字時則用0x AAAA補齊。內存下載工作流程如圖5所示。

圖5 DSP內存下載流程圖
采用帶有1553B板卡計算機的測試設備模擬星載數管分系統BC端,實驗接口電路所在的星載信號處理機為RT端。測試設備給星載信號處理機供電,并通過2根雙絞屏蔽線分別與星載信號處理機的A/B雙通道進行1553B通信。實驗系統示意圖如圖6所示。

圖6 實驗系統示意圖
通過測試設備上位機的人機交互界面,可以向星載信號處理機下發指令并接收其反饋的遙測信息。上位機軟件采用Lab View語言編程,作為面向用戶的圖形語言,其具有開發靈活、界面友好的特點[8]。針對DSP在軌編程,上位機軟件主要包括:在軌編程注數,即將新功能程序的十六進制機器碼上注到DSP指定地址;內存下載,即從DSP指定地址下載一定數量的內存數據;待替換跳轉指令所在地址注入,即將圖3中的address1上注到DSP暫存;新的跳轉指令注入,即將圖3中的jump_code1上注到DSP暫存;新功能程序啟用,即通過引導程序重新啟動DSP。其中,每次注入數據的字節數是4的整數倍且不超過44字節,界面上的內存修改地址即為此次注入的在軌編程數據機器碼即將寫入DSP內存空間的首地址,數據包長度由上位機自動識別。內存下載則需要輸入即將讀取的DSP內存空間的首地址以及數據長度(不超過48字節)。上位機在軌編程注數與內存下載界面如圖7所示。

圖7 上位機數據上注及其下載界面
實驗過程步驟如下:
a)將新功能程序orbit_progme_test2的80個字節內存數據十六進制機器碼分為2包,每包40個字節,起始地址分別為0x00030000與0x00030028;
b)將內存數據上注到對應的內存地址,內存數據及其對應的內存地址如表2所示;
c)當步驟b)的第1包數據上注完成后,從地址0x00030000開始下載40個字節,與步驟b)注入的數據進行對比,確認數據傳輸無誤;
d)重復步驟b)與步驟c)從地址0x00030028開始進行第2包數據注入與下載;
e)第2包數據上注完成并確認無誤后,在上位機注入待替換跳轉指令所在地址address1與新的跳轉指令jump_code2,此時address1與jump_code2以隨機變量形式存在DSP中;
f)發送在軌編程啟用指令,DSP會將jump_code2寫入地址address1中以替換原來的jump_code1,并引導程序重新啟動DSP從地址0x00000000開始運行,當運行到address1時就會轉入跳轉指令jump_code2,指向程序orbit_progme_test2并執行程序orbit_progme_test2。
經過步驟a)到步驟f),上位機在軌編程標志由0x55變為0x AA,完成在軌編程。經測試,1553B接口數據率達到了1 Mbps,且運行周期穩定,滿足設計要求。
本文針對星載信號處理機DSP芯片在軌編程數據量大且可靠性要求高的難題,基于1553B接口完成了接口電路及在軌編程軟件設計,并搭建實驗系統,完成了實驗驗證,為星載信號處理機的DSP在軌編程方案設計提供了參考。