,
(中國電子科技集團(tuán)公司第38研究所 孔徑陣列與空間探測安徽省重點(diǎn)實(shí)驗(yàn)室,合肥 230088)
圖1 AT697F與B65170S6RH連接原理圖
MIL-STD-1553B總線由于在傳輸可靠性和容錯(cuò)能力方面具有優(yōu)勢,特別適用于現(xiàn)場環(huán)境惡劣并且對可靠性要求高的場合,在航空航天電子設(shè)備中得到廣泛應(yīng)用。由于1553B 總線接口芯片可以工作在不同模式、數(shù)據(jù)傳輸上有不同的機(jī)制,在某特定的工作模式和數(shù)據(jù)傳輸機(jī)制下,可能會(huì)產(chǎn)生1553B接口芯片內(nèi)部的總線競爭,從而導(dǎo)致總線傳輸過程中數(shù)據(jù)傳輸異常。
本文以某實(shí)際星載項(xiàng)目在模飛聯(lián)試中出現(xiàn)的通信故障為例,對1553B總線通信過程中出現(xiàn)的總線競爭原因進(jìn)行機(jī)理分析,并給出相應(yīng)的解決方法。
某星載項(xiàng)目為保證有效載荷和衛(wèi)星平臺(tái)之間數(shù)據(jù)能夠正確無誤地傳輸,并且要有較高的穩(wěn)定性和可靠性,有效載荷通過1553B總線與衛(wèi)星平臺(tái)系統(tǒng)通信,其通信原理如圖1所示。接口電路采用航天九院772所的抗輻射1533B接口芯片B65170S6RH。有效載荷通過1553B總線接入星上系統(tǒng)總線網(wǎng)絡(luò),作為星上1533B總線中的一個(gè)設(shè)備終端(RT),整個(gè)衛(wèi)星通過1553B總線實(shí)現(xiàn)分布式實(shí)時(shí)通信。
在項(xiàng)目中,有效載荷的處理器使用AT697F微處理器,由于AT697F較多的I/O口被復(fù)用,數(shù)量受限,故1533B接口芯片B65170S6RH通過FPGA掛載在AT697F的I/O地址空間上,地址空間為0x2000 0000~0x3FFF FFFF,F(xiàn)PGA根據(jù)AT697F的讀寫指令完成AT697F與B65170S6RH之間的接口邏輯轉(zhuǎn)換。
對于以衛(wèi)星平臺(tái)為總線控制器作為消息源的數(shù)據(jù)傳輸采用更新數(shù)據(jù)傳輸機(jī)制,總線控制器通過檢查更新狀態(tài)字得到數(shù)據(jù)的更新狀態(tài),組織總線通信,發(fā)送數(shù)據(jù)更新消息。
對于以遠(yuǎn)程終端為消息源的數(shù)據(jù)傳輸采用服務(wù)請求機(jī)制。各個(gè)遠(yuǎn)程終端通過總線狀態(tài)字中的“服務(wù)請求位”(狀態(tài)字第11位)來標(biāo)識(shí)數(shù)據(jù)傳輸請求,通過矢量字(16位,按位定義數(shù)據(jù)類型)位來標(biāo)識(shí)請求傳輸?shù)臄?shù)據(jù)類型。
衛(wèi)星平臺(tái)的總線控制器將根據(jù)各遠(yuǎn)程終端消息的刷新周期和最大延遲時(shí)間要求依次對各個(gè)遠(yuǎn)程終端進(jìn)行輪詢:向各遠(yuǎn)程終端發(fā)出“發(fā)送矢量字”方式指令,代碼為10 000。如返回狀態(tài)字中的“服務(wù)請求位”(狀態(tài)字第11位)被置成1,則說明該遠(yuǎn)程終端有服務(wù)請求??偩€控制器將進(jìn)一步分析該遠(yuǎn)程終端返回的矢量字,以確定該遠(yuǎn)程終端需求的某種或幾種特定的數(shù)據(jù)傳輸類型,組織通信將該遠(yuǎn)程終端的數(shù)據(jù)取走。當(dāng)總線控制器將某類要求服務(wù)的數(shù)據(jù)傳輸完成后,遠(yuǎn)程終端應(yīng)將矢量字中相應(yīng)位復(fù)位,如矢量字中還有其他服務(wù)請求,遠(yuǎn)程終端仍應(yīng)將狀態(tài)字中的“服務(wù)請求位”置1。如輪詢的對象沒有提出服務(wù)請求,總線控制器掃過此遠(yuǎn)程終端詢問下一個(gè)遠(yuǎn)程終端。
各遠(yuǎn)程終端一旦在發(fā)送緩沖區(qū)準(zhǔn)備好數(shù)據(jù)或是請求獲取某類數(shù)據(jù)時(shí),應(yīng)將矢量字中相應(yīng)位置1,并將總線狀態(tài)字中的“服務(wù)請求位”置1;待總線控制器將數(shù)據(jù)取走或發(fā)來數(shù)據(jù)后,再將矢量字中相應(yīng)的位置0。
衛(wèi)星平臺(tái)為統(tǒng)一整星的系統(tǒng)時(shí)間,采用廣播方式周期性地在A/B總線上交替發(fā)布時(shí)間碼消息給各有效載荷,發(fā)布頻度為1 s一次,各有效載荷使用系統(tǒng)統(tǒng)一規(guī)定的子地址接收時(shí)間碼消息。
項(xiàng)目在進(jìn)行整星模飛聯(lián)試時(shí),根據(jù)第3節(jié)描述的與衛(wèi)星平臺(tái)約好的1553B數(shù)據(jù)傳輸機(jī)制,衛(wèi)星平臺(tái)向本有效載荷“發(fā)送矢量字”方式指令時(shí),如有發(fā)送本有效載荷工程參數(shù)服務(wù)請求時(shí),則將返回狀態(tài)字中的“服務(wù)請求位”置成1,待衛(wèi)星平臺(tái)將數(shù)據(jù)取走時(shí),本有效載荷軟件應(yīng)將矢量字中相應(yīng)位復(fù)位,結(jié)束本次數(shù)據(jù)傳輸。但在實(shí)際的模飛聯(lián)試時(shí),當(dāng)衛(wèi)星平臺(tái)將本有效載荷工程參數(shù)取走后,本有效載荷軟件應(yīng)將矢量字中相應(yīng)位復(fù)位,但在聯(lián)試過程中,有效載荷軟件不能每次將配置寄存器1的“服務(wù)請求位”置復(fù)位、矢量字中相應(yīng)的位置0,從而導(dǎo)致衛(wèi)星平臺(tái)需要不停讀取本有效載荷的數(shù)據(jù)。
針對上述故障現(xiàn)象,利用故障樹進(jìn)行了分析,方式字未清除的故障樹如圖2所示。
圖2 1553B方式字未清除故障樹
① 初始考慮主要的可能是由于對方式字的配置錯(cuò)誤導(dǎo)致的。配置錯(cuò)誤主要有兩種可能,一是方式字本身配置錯(cuò)誤,二是將方式字設(shè)置為非法指令導(dǎo)致。經(jīng)檢查程序,方式字寄存器的配置參數(shù)為0x8803,結(jié)合B65170S6RH的手冊,方式字配置參數(shù)不會(huì)導(dǎo)致本次錯(cuò)誤;非法指令寄存器中也沒有將方式字設(shè)置為非法指令,因此非法指令也不會(huì)導(dǎo)致方式字的錯(cuò)誤。
② 另一種可能是由衛(wèi)星平臺(tái)在發(fā)送方式字時(shí),AT697F軟件沒有進(jìn)入中斷服務(wù)程序,通過在試驗(yàn)件上調(diào)試,每一次發(fā)送方式字指令,AT697F軟件均可以正確進(jìn)入中斷服務(wù)程序,因此此種故障因素也可以排除。
③ 消息描述棧讀寫錯(cuò)誤也是造成方式字錯(cuò)誤的原因:對消息描述棧讀數(shù)錯(cuò)誤,將導(dǎo)致AT697F軟件無法正確獲取衛(wèi)星平臺(tái)發(fā)送的方式字請求。通過在試驗(yàn)件上調(diào)試,AT697F軟件能夠正確獲取衛(wèi)星平臺(tái)的方式字消息。
因此,故障定位在AT697F軟件對方式字的寫錯(cuò)誤因素。AT697F在寫“發(fā)送矢量字”和“服務(wù)請求位”時(shí),盡管軟件產(chǎn)生了“寫”的動(dòng)作,但由于某種原因的影響,導(dǎo)致實(shí)際是虛寫“發(fā)送矢量字”和“服務(wù)請求位”。
經(jīng)分析本有效載荷將1553B的接口芯片B65170S6RH設(shè)置為16位零等待模式,即MCU對B65170S6RH進(jìn)行讀寫操作時(shí),上一字(16位)讀寫完成,無需等待,可緊接著讀寫下一字(16位)。但MCU對B65170S6RH讀寫操作時(shí)間間隔小于器件要求值時(shí)(772所生產(chǎn)的芯片工作在16 MHz,16位零等待模式下,第一個(gè)16位數(shù)據(jù)字寫完成后到第二個(gè)16位數(shù)據(jù)字之間間隔要求大于3.4 μs),否則當(dāng)總線訪問和MCU訪問同時(shí)發(fā)生時(shí),第二個(gè)16位數(shù)據(jù)會(huì)寫入失敗。
造成上述寫入失敗的原因?yàn)椋築65170S6RH內(nèi)部集成了一塊4K×16位的共享RAM,其內(nèi)部協(xié)議處理器可以通過內(nèi)部數(shù)據(jù)總線和地址總線對4K×16位的共享RAM進(jìn)行讀寫訪問,AT697F也可通過B65170S6RH外部數(shù)據(jù)、地址總線經(jīng)內(nèi)部數(shù)據(jù)、地址總線對4K×16位的共享RAM進(jìn)行讀寫訪問,當(dāng)B65170S6RH內(nèi)部協(xié)議處理器和AT697F同時(shí)對4K×16位的共享RAM進(jìn)行讀寫訪問時(shí),這時(shí)就產(chǎn)生了競爭訪問。當(dāng)競爭訪問產(chǎn)生時(shí),如前一個(gè)數(shù)據(jù)還沒有被寫入內(nèi)部的共享RAM,就會(huì)在數(shù)據(jù)緩沖區(qū)里等待內(nèi)部協(xié)議處理器結(jié)束,以完成當(dāng)前共享RAM的訪問。下一個(gè)數(shù)據(jù)再次到來時(shí),將無法寫入數(shù)據(jù)緩沖區(qū),導(dǎo)致當(dāng)前寫入的數(shù)據(jù)丟失。
本項(xiàng)目有效載荷將B65170S6RH設(shè)為在零等待模式,衛(wèi)星平臺(tái)根據(jù)協(xié)議采用廣播方式周期性(1 s一次)向各有效載荷發(fā)布時(shí)間碼,同時(shí)向各遠(yuǎn)程終端發(fā)出“發(fā)送矢量字”方式指令,這樣在MCU讀取時(shí)間碼的過程中,在3.4 μs時(shí)間內(nèi),衛(wèi)星平臺(tái)向本有效載荷發(fā)來“發(fā)送矢量字”方式指令,待總線控制器將數(shù)據(jù)取走或發(fā)來數(shù)據(jù)后,這時(shí)MCU正在讀取時(shí)間碼,B65170S6RH內(nèi)部協(xié)議處理器正將內(nèi)部RAM輸出至內(nèi)部數(shù)據(jù)總線,這時(shí)如AT697F軟件將“發(fā)送矢量字”和“服務(wù)請求位”置0,由于總線競爭,B65170S6RH內(nèi)部協(xié)議處理器無法在內(nèi)部數(shù)據(jù)總線中傳輸置0數(shù)據(jù)到相應(yīng)的內(nèi)部RAM,結(jié)果就是導(dǎo)致無法將“發(fā)送矢量字”和“服務(wù)請求位”置0。
針對上述總線競爭的解決方法,本項(xiàng)目給出兩種解決方法:
① B65170S6RH設(shè)置為零等待模式,MCU軟件對B65170S6RH的讀寫采用軟延時(shí),在MCU讀寫B(tài)65170S6RH之間加入15次的空操作(時(shí)間約為4.8 μs),人為強(qiáng)制將讀寫間隔時(shí)間變長,這樣就可滿足B65170S6RH器件要求的讀寫操作時(shí)間間隔大于3.4 μs的要求。
② 將B65170S6RH的READYD信號(hào)輸出引至AT697F的BRDY引腳上,將B65170S6RH設(shè)置為非零等待模式,即AT697F對B65170S6RH進(jìn)行讀寫操作時(shí),上一字(16位)讀寫時(shí),需等待B65170S6RH的READYD信號(hào)變低電平(即B65170S6RH芯片已完成內(nèi)部的總線處理),才可讀寫下一字(16位)。此方法由MCU根據(jù)READYD信號(hào)自動(dòng)判斷下次的讀寫操作,可有效避免AT697F與B65170S6RH之間讀寫的總線競爭。