朱劍輝,鄭 淵,洪小駿,王志國,王城浩
(1.上海航天電子技術(shù)研究所,上海 201109;2.上海航天技術(shù)研究院,上海 200235)
MIL-STD-1553B 總線最初是由美國在20 世紀(jì)70 年代提出的航空電子系統(tǒng)聯(lián)網(wǎng)標(biāo)準(zhǔn),具有高可靠性、抗干擾能力強、擴充和維護簡便等特點,因而被廣泛應(yīng)用于航空和航天等領(lǐng)域[1-2]。1553B 總線的傳輸協(xié)議為命令/響應(yīng)方式,數(shù)據(jù)傳輸?shù)淖钚挝粸椤跋ⅰ保織l消息最多32 個字(16 bit 位寬),所有的消息傳輸均由總線控制器(Bus Controller,BC)發(fā)出命令,遠程終端(Remote Terminal,RT)響應(yīng)[3-4]。
1553B 總線協(xié)議規(guī)定有32 個RT 子地址用于消息傳輸。BC 作為1553B 總線的控制端,控制所有子地址消息的傳輸,包括方式代碼傳輸、BC 與RT 之間數(shù)據(jù)傳輸、RT 與RT 之間的數(shù)據(jù)傳輸和BC 向所有RT 設(shè)備廣播數(shù)據(jù)等[3-6]。RT 作為總線響應(yīng)端,通過各子地址控制字配置成單消息、雙緩存和循環(huán)緩沖3 種數(shù)據(jù)收/發(fā)緩存模式,以及相應(yīng)的消息結(jié)束中斷方式用于響應(yīng)總線數(shù)據(jù)傳輸,通過各子地址查找表配置消息數(shù)據(jù)收/發(fā)緩存地址[7]。
受限于下位機設(shè)備的處理能力,通常BC 軟件需要嚴格控制與各下位機RT 軟件通信的周期及消息間隔,避免因消息響應(yīng)或處理不及時導(dǎo)致通信異常。主要包括以下2 個方面:1)RT 軟件在1553B總線中斷時通過讀取命令字寄存器獲取當(dāng)前子地址信息。若BC 發(fā)送不同的子地址消息的間隔小于軟件響應(yīng)消息結(jié)束中斷到讀取命令字寄存器的最大延時,將導(dǎo)致消息命令字被覆蓋異常[8]。2)RT軟件在1553B 總線中斷時設(shè)置數(shù)據(jù)處理標(biāo)志,主流程判斷標(biāo)志有效后再執(zhí)行。若BC 向RT 發(fā)送同一個子地址數(shù)據(jù)間隔小于RT 軟件最大處理延時,將導(dǎo)致接收的數(shù)據(jù)被覆蓋異常。同理,若BC 從RT 同一個子地址采集數(shù)據(jù)的間隔小于RT 軟件參數(shù)更新最大延時,將導(dǎo)致采集的參數(shù)半新半舊或者與上一幀重復(fù)。
針對上述限制,當(dāng)BC 向某個RT 設(shè)備發(fā)送多條遙控指令時,需要BC 軟件設(shè)計指令緩存,控制周期逐條發(fā)送;當(dāng)BC 從各RT 采集遙測參數(shù)時,BC 軟件也要控制不同采集周期;BC 軟件為了保證各RT 的響應(yīng)時間,所有消息設(shè)置統(tǒng)一的消息間隔,或增加軟件延時,如每次只啟動單個RT 設(shè)備的一種消息傳輸,等待RT 返回的數(shù)據(jù)或消息反饋后才繼續(xù)準(zhǔn)備后續(xù)消息。以上約束嚴重影響了BC 軟件的設(shè)計通用性和總線傳輸效率與可靠性[9-10]。為此,文中設(shè)計了一種通用的1553B 總線消息處理方式,消除BC軟件傳輸消息間隔限制,減少BC 軟件的設(shè)計約束,并解決RT 軟件對任意消息間隔的適應(yīng)性問題。
BC 軟件根據(jù)消息傳輸類型、傳輸總線A/B、RT 地址、RT 子地址、數(shù)據(jù)內(nèi)容及長度等信息,構(gòu)造消息命令字和控制字,按消息格式寫入總線緩存[6];然后在堆棧中構(gòu)造4 個字的消息描述符,寫入消息間隔和消息緩存起始地址(塊狀態(tài)字和時間標(biāo)簽由芯片自動填寫);接著寫總線消息個數(shù)配置字和啟動寄存器,啟動消息傳輸;最后等待消息傳輸結(jié)束,讀取狀態(tài)字反饋及RT 返回數(shù)據(jù)等信息。以BC 向RT 傳輸數(shù)據(jù)為例,消息數(shù)據(jù)存儲格式如圖1 所示。
圖1 BC->RT 消息格式Fig.1 Diagram of the BC->RT message format
根據(jù)1553B 總線芯片BC 模式的特性,內(nèi)部緩存配置區(qū)存在A/B 區(qū)冗余設(shè)計,可通過配置寄存器1 的bit 13 配置當(dāng)前的工作區(qū)。當(dāng)指定A 區(qū)為當(dāng)前工作區(qū)時,當(dāng)前總線活動由A 區(qū)的配置空間控制,包括設(shè)置消息堆棧和消息個數(shù)配置字等;與此同時B 區(qū)作為非活動區(qū),可以由軟件隨意操作而不影響當(dāng)前總線芯片工作。因此,當(dāng)A 區(qū)在傳輸總線消息時,可以同時在B 區(qū)所指向的緩存空間準(zhǔn)備后續(xù)消息;當(dāng)A 區(qū)消息傳輸結(jié)束時,通過配置寄存器1 切換當(dāng)前的活動區(qū),B 區(qū)準(zhǔn)備好的消息就可以直接啟動數(shù)據(jù)傳輸。BC 可一次性啟動最多512 條消息的序列傳輸,消息個數(shù)配置字中寫入相應(yīng)的值并啟動傳輸后,芯片就會依次從消息堆棧中往后解析各消息描述符及其所指向的緩存區(qū)中的消息格式,并啟動相應(yīng)的消息傳輸。
基于上述特性,在芯片內(nèi)部緩存空間允許的情況下,根據(jù)總線應(yīng)用協(xié)議,合理劃分總線消息序列大小。BC 軟件一次性啟動當(dāng)前消息序列傳輸,同時在非活動區(qū)準(zhǔn)備后續(xù)總線消息序列;當(dāng)前一個消息序列傳輸結(jié)束后,在處理相應(yīng)的消息反饋數(shù)據(jù)前,切換總線活動區(qū),啟動后一個消息序列傳輸,如此周期循環(huán)。通過以上改進,不僅節(jié)約了軟件等待數(shù)據(jù)傳輸時間,并且不設(shè)置消息傳輸間隔,充分發(fā)揮總線芯片的數(shù)據(jù)傳輸效率。
BC 軟件向各下位機發(fā)送總線消息時,不控制相同子地址數(shù)據(jù)的傳輸周期,例如當(dāng)某個需要發(fā)送多條遙控指令時,不做數(shù)據(jù)緩存,一次性批量發(fā)送,由各下位機RT 軟件自行緩存處理。BC 軟件從各下位機采集數(shù)據(jù)時,采用下位機舉手的方式握手:RT 準(zhǔn)備好數(shù)據(jù)后舉手,BC 軟件判斷下位機舉手時才采集相應(yīng)的數(shù)據(jù),數(shù)據(jù)采集周期由RT 軟件舉手的周期來控制。通過以上改進,消除了BC 軟件與各下位機RT 軟件通信周期的約束。
作為總線響應(yīng)端,RT 軟件在響應(yīng)總線消息傳輸前,首先需根據(jù)總線應(yīng)用協(xié)議配置好各RT 子地址控制字和查找表。在收到消息中斷后,從消息命令字寄存器讀取當(dāng)前消息的命令字,獲取RT 子地址和數(shù)據(jù)長度等信息,設(shè)置相關(guān)數(shù)據(jù)處理標(biāo)志。最后再在軟件主流程判斷相關(guān)數(shù)據(jù)處理標(biāo)志有效后,按照總線應(yīng)用協(xié)議要求進行處理,如果是接收消息結(jié)束中斷,則讀取接收數(shù)據(jù)并處理;如果是發(fā)送消息結(jié)束中斷,則接著準(zhǔn)備填寫下一幀數(shù)據(jù)等待BC獲取。RT 軟件中斷方式處理流程如圖2 所示。
圖2 RT 軟件中斷方式處理流程Fig.2 Processing flow diagram of the interrupt mode by the RT software
根據(jù)1553B 總線芯片RT 模式的特性,在緩存中有256 字的消息堆棧,依次存儲接收的4 個字的總線消息描述符[7-8]。因此,只要RT 軟件在兩次讀取消息堆棧之間收到的消息不超過堆棧大小,那么就可以通過遍歷堆棧的方式將接收到的消息命令字逐個讀出而不被覆蓋。改進后的RT 軟件中斷處理流程如圖3 所示。
圖3 改進后的RT 軟件中斷方式處理流程Fig.3 Processing flow diagram of the interrupt mode by the improved RT software
根據(jù)RT 子地址配置成單消息時查找表指針會自主復(fù)位而循環(huán)緩沖模式自動向后移動并回卷的特性,為了避免消息數(shù)據(jù)處理不及時被覆蓋,改進后的RT 軟件將接收子地址由原單消息接收和消息結(jié)束中斷模式,改成循環(huán)緩沖接收和消息結(jié)束中斷模式。軟件隨著接收消息查找表指針的變化記錄該子地址在循環(huán)緩沖中的“當(dāng)前接收數(shù)據(jù)首地址”;當(dāng)接收該消息產(chǎn)生中斷時,中斷服務(wù)子程序設(shè)置數(shù)據(jù)處理標(biāo)志,主流程判斷標(biāo)志有效后,從“當(dāng)前接收數(shù)據(jù)首地址”開始處理數(shù)據(jù),根據(jù)相關(guān)特征判斷當(dāng)前消息是否有效,若有效,則讀取相應(yīng)的數(shù)據(jù)并處理,然后將緩存區(qū)中的消息特征設(shè)置為無效,并繼續(xù)向后讀取數(shù)據(jù),直到讀到當(dāng)前消息為無效為止,并更新“當(dāng)前接收數(shù)據(jù)首地址”為下一個地址。為了增強軟件可靠性,每次數(shù)據(jù)處理前先判斷“當(dāng)前接收數(shù)據(jù)首地址”是否合法,若非法則重新配置子地址查找表指向循環(huán)緩沖首地址。以接收32 個字的消息(第一個字用作有效標(biāo)志)配置成128 字循環(huán)緩沖為例,軟件接收消息數(shù)據(jù)時緩沖區(qū)狀態(tài)變?nèi)鐖D4 所示。
圖4 接收消息循環(huán)緩沖區(qū)狀態(tài)變化Fig.4 State change diagram of the receiving messages in the circular buffer
受限于下位機軟件的處理能力或參數(shù)狀態(tài)更新下行周期的約束,BC 軟件并不能隨意的采集RT軟件的數(shù)據(jù)。為了消除該限制,BC 向RT 軟件采集參數(shù)時,采用方式代碼“發(fā)送矢量字”握手,矢量字每個位可以分別表示不同類型的數(shù)據(jù)舉手狀態(tài)。RT 準(zhǔn)備好數(shù)據(jù)后按協(xié)議設(shè)置相應(yīng)的矢量字位,BC軟件每個周期通過“發(fā)送矢量字”方式代碼獲取下位機的舉手狀態(tài),當(dāng)判斷下位機舉手后從相應(yīng)的子地址采集數(shù)據(jù),RT 判斷BC 將數(shù)據(jù)讀完后,清除矢量字位,并開始下個周期參數(shù)采集更新。BC 與RT通過矢量字方式握手時序如圖5 所示。
對改進前后的軟件在某型號綜合電子計算機和下位機平臺開展對比測試。首先綜合電子計算機BC 軟件采用無消息間隔的消息序列方式與改進前的RT 軟件周期通信,周期采集10 000 條遙測消息(采集周期500 ms,RT 軟件最大主流程周期約600 ms),通過地面測試軟件隨機注入1 000 條遙控指令(一次注入1 條或多條),長度均32 個字。測試結(jié)束后,通過遙測參數(shù)查看RT 軟件接收指令計數(shù)為815,即出現(xiàn)了丟指令異常;遙測參數(shù)出現(xiàn)112 次幀計數(shù)不連續(xù)異常、23 次累加和校驗錯誤,表明遙測參數(shù)出現(xiàn)了遙測幀重復(fù)和半新半舊異常。改成采用無消息間隔的消息序列、矢量字握手方式和改進后的RT 軟件通信,重復(fù)上述測試過程,未發(fā)現(xiàn)丟指令異常,也未發(fā)現(xiàn)遙測幀計數(shù)和校驗異常。測試結(jié)果表明,文中提出的設(shè)計方式達到預(yù)期效果。改進前后的軟件測試結(jié)果對比見表1。
文中通過對常用的1553B 總線通信軟件消息處理方式進行分析,引發(fā)出對提升軟件通信效率和設(shè)計通用性的思考,提出相應(yīng)的改進措施,分析并解決了由此引入的風(fēng)險,最終形成了一種高效、通用且可靠的設(shè)計方式。文中的分析及設(shè)計思路對復(fù)雜系統(tǒng)1553B 總線通信軟件的設(shè)計和異常問題排查均有一定的參考借鑒意義,對其他類似串行總線通信同樣具有啟發(fā)意義。