機(jī)載計(jì)算機(jī)RS422A通訊的軟硬件設(shè)計(jì)與實(shí)現(xiàn)
摘要 RS422A、RS485等異步串行通訊技術(shù)廣泛應(yīng)用于機(jī)載計(jì)算機(jī)實(shí)時(shí)控制系統(tǒng),提高了飛機(jī)的可維護(hù)性和可擴(kuò)展性。為使其穩(wěn)定工作,不僅需要可靠硬件平臺,還需嚴(yán)密的軟件算法°文中描述了某機(jī)載計(jì)算機(jī)為實(shí)現(xiàn)與多個(gè)設(shè)備進(jìn)行實(shí)時(shí)異步串行通訊,設(shè)計(jì)了統(tǒng)一的硬件平臺,并根據(jù)每個(gè)設(shè)備不同的通訊協(xié)議,給出了不同的軟件算法,重點(diǎn)闡述了軟件設(shè)計(jì)及原理。根據(jù)該原理研制的產(chǎn)品已經(jīng)過試驗(yàn)、聯(lián)試和用戶使用,證明其工作可靠、性能良好。
關(guān)鍵詞 RS422A;RS485;通訊軟件設(shè)計(jì)
1 RS422A標(biāo)準(zhǔn)
RS422A是一種在工程中廣泛使用的接口標(biāo)準(zhǔn),其采用差分傳輸方式,也稱為“平衡傳輸”,標(biāo)準(zhǔn)全稱是“平衡電壓數(shù)字接口電路的電氣特性”??梢奟S422A定義的是接口電路的電氣特性,而對數(shù)據(jù)格式未作定義。RS422A是全雙工通信,通信的雙方均含有一個(gè)發(fā)送、接收驅(qū)動器。其中接收驅(qū)動器的兩個(gè)平衡線連接端點(diǎn)定義為A和B,發(fā)送驅(qū)動器的兩個(gè)平衡線連接端點(diǎn)定義為Y和Z,通常使用平衡雙絞線將一端的Y和A、Z和B相連。通常發(fā)送驅(qū)動器端Y、Z之間的正電平在2~6 V,代表正邏輯,負(fù)電平在-6~-2 V,代表負(fù)邏輯。在接收端,當(dāng)A、B之間有>+ 200 mV的電平時(shí),輸出正邏輯電平-200 mV時(shí),輸出負(fù)邏輯電平。RS422A最大傳輸距離為4 000英尺(約1 219 m),最大傳輸速率為10 Mbit· s-1。其中平衡雙絞線的長度與傳輸速率成反比,在100 kbit·s-1速率下,才可達(dá)到最大傳輸距離。只有在較短的距離下才能獲得最高速率傳輸。一般100 m長的雙絞線可獲取的最大傳輸速率為1Mbit·s-1。
2 硬件設(shè)計(jì)
對于RS422A、RS485等異步串行通訊的硬件設(shè)計(jì),主要有兩種方式。
(1)采用協(xié)議芯片加接口驅(qū)動芯片的方式。該方式技術(shù)較成熟,但使用的元器件較多,占用印制板的板面較大。
(2)采用SOC的方式,將協(xié)議芯片的邏輯功能在可編程邏輯器件FPGA中編程實(shí)現(xiàn)。該方式使用的元器件較少,但在FPGA中寫出較完善的協(xié)議邏輯的難度較大。
本工程中采用第一種方式,用協(xié)議芯片16C552或16C554加接口驅(qū)動芯片進(jìn)行通訊。并設(shè)計(jì)回繞自測試電路。采用16C552芯片實(shí)現(xiàn)全雙工收發(fā)RS-422器功能,RS-422驅(qū)動電路由DS26LS31MJ(4路RS-422發(fā)送器)、DS26LS32MJ(4路RS-422接收器)、終端匹配電路和保護(hù)電路組成。
3 軟件設(shè)計(jì)
3.1 通訊協(xié)議的定義
RS422A標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定而不涉及協(xié)議,因此可定義自身的高層通信協(xié)議。在本設(shè)計(jì)方案中,在底層以Byte為單位通信,采用UART字的格式。在上層協(xié)議中采用數(shù)據(jù)包為單位通信。
通信協(xié)議中主要規(guī)定:(1)通訊雙方的傳送控制方式,即主從命令響應(yīng)方式或周期通訊方式等。(2)通訊周期。(3)通訊速率,即波特率。(4)通訊字格式。通訊的最小信息單位是UART字,每個(gè)UART字由11位二進(jìn)制數(shù)組成,如圖1所示。
第1位:起始位(邏輯“0”狀態(tài)為有效);第2~9位:信息位;第10位:奇偶校驗(yàn)位(約定為偶校驗(yàn));第11位:停止位(邏輯“1”狀態(tài)為有效)。每個(gè)UART字按低位到高位的先后順序串行傳送。對于16位二進(jìn)制數(shù)據(jù)分成兩個(gè)UART字,按由低到高的先后順序傳送。(5)通訊包格式。通訊傳送的基本單位是通訊包,通訊包由包頭、包狀態(tài)、數(shù)據(jù)字和包尾組成,最后的包尾是校驗(yàn)和字,其結(jié)構(gòu)如圖2所示。
校驗(yàn)和字為通訊包中除校驗(yàn)和字外所有字累加和的補(bǔ)碼。校驗(yàn)和校驗(yàn)正確的依據(jù)為接收到的UART字塊中所有字的累加和等于0。
包頭通常規(guī)定為0xAA55或0x55AA,與數(shù)據(jù)字相同的概率較小。包頭一旦與數(shù)據(jù)字相同,則可能誤認(rèn)為該數(shù)據(jù)字為包頭,從而組包錯誤。
通訊協(xié)議應(yīng)規(guī)定每個(gè)數(shù)據(jù)字中每一位的定義。若通訊協(xié)議中存在多種包長或多種數(shù)據(jù)包定義,則應(yīng)在包狀態(tài)中說明該包的包長或包序號,由包序號可明確該包數(shù)據(jù)的詳細(xì)定義。
3.2 接收數(shù)據(jù)
首先,需確定接收數(shù)據(jù)的方式,即選擇查詢接收或是中斷接收。嵌入式實(shí)時(shí)控制系統(tǒng)應(yīng)盡量減少中斷的使用,在查詢接收可滿足通訊要求,且不影響實(shí)時(shí)性的情況下,盡量采用查詢的方式接收數(shù)據(jù)。
若通訊協(xié)議規(guī)定,要接收的數(shù)據(jù)包的長度小于或等于硬件接收FIFO緩沖區(qū)的長度,且兩包數(shù)據(jù)間的間隔時(shí)間大于或等于最小查詢周期,則可采用查詢的方式接收數(shù)據(jù)。否則需采用中斷的方式接收,才能保證數(shù)據(jù)不丟失。
采用查詢的方式接收數(shù)據(jù)時(shí),以最小周期進(jìn)行反復(fù)查詢,若硬件接收FIFO緩沖區(qū)中有數(shù)據(jù)則收入軟件中設(shè)定的容量較大的先入先出隊(duì)列緩沖區(qū)。
采用中斷的方式接收數(shù)據(jù)時(shí),硬件接收FIFO緩沖區(qū)中有數(shù)據(jù)則會引發(fā)中斷,中斷服務(wù)程序中將硬件接收FIFO緩沖區(qū)中有數(shù)據(jù)則收入軟件中設(shè)定的容量較大的先入先出隊(duì)列緩沖區(qū)。
而后,再以通訊協(xié)議規(guī)定的接收數(shù)據(jù)周期,從軟件隊(duì)列緩沖區(qū)中取數(shù)、找包頭、按包長組包、算校驗(yàn)和。當(dāng)未收到完整數(shù)據(jù)包或校驗(yàn)和錯時(shí),進(jìn)行錯誤計(jì)數(shù)。
上述分兩步接收數(shù)據(jù)的流程示意如圖3所示。以該方式,可無需消耗多余的時(shí)間,并確保數(shù)據(jù)不丟失。
3.3 發(fā)送數(shù)據(jù)
發(fā)送數(shù)據(jù)作為主動的行為,盡量不使用中斷。當(dāng)需發(fā)送的數(shù)據(jù)包長度小于或等于硬件發(fā)送FIFO緩沖區(qū)時(shí),可直接發(fā)送。當(dāng)需發(fā)送的數(shù)據(jù)包長度大于硬件發(fā)送FIFO緩沖區(qū)時(shí),可分為多次發(fā)送。軟件將要發(fā)送的數(shù)據(jù)組織好后存入容量較大的先入先出隊(duì)列緩沖區(qū)。再以軟件運(yùn)行的最小周期,將隊(duì)列緩沖區(qū)中的數(shù)據(jù)分批裝入硬件發(fā)送FIFO緩沖區(qū)進(jìn)行發(fā)送。
4 數(shù)據(jù)組包的算法
以通訊協(xié)議規(guī)定的接收數(shù)據(jù)周期,從軟件隊(duì)列緩沖區(qū)中取數(shù),進(jìn)行數(shù)據(jù)組包的算法是較為重要的,其保證了軟件采信數(shù)據(jù)的有效性和完整性。并和通訊協(xié)議密切相關(guān)。包長固定時(shí)的流程如圖4所示,其主要步驟如下:
(1)確認(rèn)要接收的通道號是否合法。
(2)在軟件隊(duì)列緩沖區(qū)中,當(dāng)剩余字節(jié)數(shù)大于等于包長時(shí),才有可能取得新的一包完整數(shù)據(jù)。剩余字節(jié)數(shù)小于包長則認(rèn)為無新的一包完整數(shù)據(jù),等到下個(gè)周期再組包接收。
(3)在剩余字節(jié)數(shù)大于等于包長的條件下,按照通訊協(xié)議中規(guī)定的包頭,從隊(duì)列中依次查找,非包頭則拋掉,直至找到包頭。
(4)以包頭為起始,按包長取出一包數(shù)據(jù),計(jì)算校驗(yàn)和。若校驗(yàn)和正確則得到一包有效數(shù)據(jù)。
(5)軟件隊(duì)列緩沖區(qū)中若還有足夠數(shù)據(jù),則繼續(xù)查找包頭并組包,若有新的一包有效數(shù)據(jù)則采用最新數(shù)據(jù),防止數(shù)據(jù)積壓。
用該算法,當(dāng)有錯誤數(shù)據(jù)出現(xiàn)時(shí),可檢查出錯誤并丟棄出錯的數(shù)據(jù)包,找出下一包正確的數(shù)據(jù)。不會因一包數(shù)據(jù)出錯而影響后續(xù)多包數(shù)據(jù)。
要接收的數(shù)據(jù)包長變化時(shí),通訊協(xié)議需規(guī)定,根據(jù)包頭后的包狀態(tài)字明確該包數(shù)據(jù)的包長。先假定當(dāng)前要接收的是最短包,以緩沖區(qū)中剩余字節(jié)數(shù)大于或等于最短包長,作為找包頭的前提條件。找到包頭后,根據(jù)包狀態(tài)字確定該包包長,若緩沖區(qū)中剩余字節(jié)數(shù)小于該包包長,則認(rèn)為數(shù)據(jù)未完成接收,將包頭和包狀態(tài)字仍留存在緩沖區(qū)中,等待下個(gè)周期補(bǔ)充新數(shù)據(jù)后再進(jìn)行組包接收。包長變化時(shí)接收數(shù)據(jù)組包的流程較復(fù)雜,如圖5所示。
5 結(jié)束語
文中設(shè)計(jì)的算法充分考慮了傳輸過程可能出現(xiàn)的各種情況,分兩步完成數(shù)據(jù)接收,小周期或中斷僅進(jìn)行硬件緩沖區(qū)的接收,滿足實(shí)時(shí)性要求且保證數(shù)據(jù)不會因未及時(shí)接收而丟失;大周期進(jìn)行數(shù)據(jù)組包,并以最快捷的方式找到有效數(shù)據(jù)包。系統(tǒng)與12個(gè)設(shè)備進(jìn)行RS422A或RS485通訊,經(jīng)驗(yàn)證,文中設(shè)計(jì)的算法綜合機(jī)載計(jì)算機(jī)實(shí)時(shí)控制系統(tǒng)的實(shí)時(shí)性和可靠性要求。
評論