1.引言
工程實踐中,對于解決同一個問題,我們常面臨兩種選擇:要么硬件簡單軟件復(fù)雜,要么軟件復(fù)雜硬件簡單。如某引信系統(tǒng)的DSP電路,需要與內(nèi)部兩個組部件以及外部多個系統(tǒng)進行接口或者信息交互,且總體要求采用異步串口方式進行通信。此類問題主要有三種解決方案:第一,在DSP的并行總線上擴展UART芯片,通過硬件轉(zhuǎn)換實現(xiàn),軟件最簡單;第二,在DSP的McBSP串行總線上擴展UART芯片,軟件有一定的復(fù)雜度;第三,不擴展其他硬件直接利用IO引腳通過軟件控制實現(xiàn),該方法軟件最復(fù)雜。根據(jù)以往文獻可知在硬件資源允許的前提下,前兩種方法已經(jīng)得到了廣泛的研究。
然而在產(chǎn)品的研制過程中,常出現(xiàn)引信硬件資源緊張的情況,無法擴展?jié)M足需求的UART,只能選擇第三種解決方式,總體的高波特率和高可靠性要求增加軟件設(shè)計的難度。通過軟件的合理設(shè)計,成功地解決了以上問題。
2.串行通信基本原理
串行通信的基本原理是以改變數(shù)字電平的方式將數(shù)據(jù)按照一定的時間寬度(波特率)按位(通常低位在前高位在后)順序傳輸,分為同步串口和異步串口兩類。同步串口通信主要應(yīng)用于傳輸速率高但傳輸距離要求不高的場合,異步串口則側(cè)重于傳輸速率要求稍低的情形。
圖1給出了異步串行通信的數(shù)據(jù)基本格式,對于一個完整的字節(jié),傳輸時包含起始位、數(shù)據(jù)位、校驗位。
實現(xiàn)同步串口通信通常需要6根總線,即收、發(fā)數(shù)據(jù)線,收、發(fā)幀同步線,收、發(fā)位時鐘線。而異步串口則最少可只需2條總線(最多4條)便實現(xiàn)數(shù)據(jù)通信,如果采用差分傳輸還可以有效地提高傳輸距離,根據(jù)能否同時收發(fā)數(shù)據(jù)又分為全雙工和半雙工兩種工作模式。
圖2是應(yīng)用最普遍的串口形式之一的RS485/422串口總線,RS485半雙工傳輸采用一對差分信號,由主控端的RE和DE來控制當(dāng)前數(shù)據(jù)收發(fā),收發(fā)不能同時進行;RS422全雙工傳輸采用兩對差分信號,主控端直接獨立收發(fā),且收發(fā)可同時進行。
本研究通過軟件控制改變GPIO端口的狀態(tài),完成RS485/422串口通信的時序。
3.基本流程設(shè)計
為提高軟件的質(zhì)量和可維護性,收發(fā)通訊實現(xiàn)時均采用位、字節(jié)和幀三個處理層次。每層相對獨立,低層處理的結(jié)果通過狀態(tài)傳遞方式通知上一層。
研究中采用的數(shù)據(jù)傳輸格式:1bit起始位“0”,8bit數(shù)據(jù)位(先低后高),無校驗位,1bit停止位“1”,每個字節(jié)累計為10bit.
3.1 發(fā)送通信流程
主動發(fā)送數(shù)據(jù)形式的流程如下:
1)底層:位發(fā)送。在波特率控制的時間間隔內(nèi)將發(fā)送數(shù)據(jù)管腳置為和當(dāng)前bit一致的電平狀態(tài)。
2)中間層:字節(jié)發(fā)送,如圖3所示。發(fā)送當(dāng)前bit,發(fā)送完位計數(shù)器+1,如果位數(shù)達到10位,則當(dāng)前字節(jié)發(fā)送結(jié)束,并通知頂層;3)頂層:幀發(fā)送,如圖4所示。首先檢測串口當(dāng)前狀態(tài)是否為發(fā)送允許,如果不是則將串口置為接收禁止、發(fā)送允許狀態(tài),確定了發(fā)送允許后進入幀發(fā)送。幀發(fā)送按照報文格式順序發(fā)送各字節(jié),發(fā)送結(jié)束將串口設(shè)為發(fā)送禁止、接收允許狀態(tài)。
3.2 接收通信流程
接收通信需要把每一個bit的數(shù)據(jù)準確地檢測出來,確定字節(jié)的起止位,判斷幀的起止字節(jié),也就是說通過分析和計算將數(shù)據(jù)格式和通信協(xié)議所規(guī)定的每一個細節(jié)精確定位。對于幀起始時刻的判斷,根據(jù)圖1數(shù)據(jù)格式知在數(shù)據(jù)傳輸?shù)倪^程中,即使數(shù)據(jù)位為全“1”或全“0”,由于有起始位和停止位的存在,也不會出現(xiàn)連續(xù)10個bit的“1”或“0”的情況,于是當(dāng)連續(xù)出現(xiàn)10個bit的“1”時,則數(shù)據(jù)線處于停止傳輸?shù)臓顟B(tài);而連續(xù)出現(xiàn)10個bit的“0”時,則數(shù)據(jù)線處于異常狀態(tài)。于是接收通信開始后至少連續(xù)10個bit的“1”之后的“0”可以作為幀的起始位。這里的“幀”不是指通信協(xié)議中的完整報文,只是指收到的一段數(shù)據(jù),至于當(dāng)前字節(jié)是否為報文頭,則需根據(jù)協(xié)議判斷。好處是不漏任何數(shù)據(jù),可靠接收約定報文。
接收通信流程如下:
1)底層:位接收,如圖5所示。位接收在由波特率確定的時間間隔到達時,采樣接收數(shù)據(jù)線的電平狀態(tài)作為當(dāng)前bit值,同時判斷幀起始位,幀開始后的位接收完成,通知中間層進行字節(jié)處理。
2)中間層:字節(jié)接收,如圖6所示。當(dāng)新bit接收完成時,將當(dāng)前Bit值按照格式組合到字節(jié)數(shù)據(jù)。當(dāng)字節(jié)位計數(shù)器滿一個字節(jié)時,如果滿足起始位“0”和停止位“1”的條件,字節(jié)接收完成,并通知頂層進行幀接收控制,否則字節(jié)無效。
3)頂層:幀接收,如圖7所示。首先檢測串口當(dāng)前狀態(tài)是否為接收允許,如果不是則將串口置為接收允許、發(fā)送禁止狀態(tài),在確任接收允許后開始收數(shù)。在新字節(jié)接收完成后,將新字節(jié)寫入接收緩沖區(qū),同時根據(jù)通信協(xié)議啟動報文識別,直到收到一幀完整的報文,結(jié)束接收通信。根據(jù)實際需要可以加入通信超時控制。
4.面向?qū)ο髮崿F(xiàn)方法
在DSP中,對某一個GPIO管腳操作,需要對某一個寄存器的某一位進行置位或者清零。
為避免每次對管腳操作時去尋找寄存器的地址和位地址這個易出錯的缺點,軟件設(shè)計時采用C++類結(jié)構(gòu)的方式進行數(shù)據(jù)封裝,使用時只需在初始化時一次性的傳入寄存器及其位地址,其余用處均采用交互性良好的助記符。
4.1 GPIO管腳類數(shù)據(jù)結(jié)構(gòu)
在構(gòu)建GPIO管腳類時,圍繞寄存器以及位地址操作和電平操作進行。
軟件數(shù)據(jù)類型與處理器的型號相關(guān),本文采用TMS3206713處理器,為有效控制數(shù)制,將硬件支持數(shù)制和編譯系統(tǒng)符號相對應(yīng),將C6000數(shù)據(jù)類型重定義,在GPIO操作中主要使用無符號數(shù)。
4.2 串口類數(shù)據(jù)結(jié)構(gòu)
為了區(qū)分當(dāng)前使用的串口類型,故定義串口類型號枚舉,為串口操作程序提供識別入口。
由類的構(gòu)造函數(shù)知,由于RS422和RS485所使用的管腳不同,為了將每種操作統(tǒng)一到一個函數(shù)中,采用了swtich結(jié)構(gòu),其他成員函數(shù)類似。其中發(fā)射函數(shù)Sending()對應(yīng)圖3、4中的流程,接收函數(shù)Receving()對應(yīng)圖5、6、7中的流程。
軟件設(shè)計以定時器為中心,由使用目的屬性來區(qū)分發(fā)送還是接收,以中斷方式控制通信時序,能夠?qū)崿F(xiàn)全雙工通信。在全雙工通信中,當(dāng)出現(xiàn)收發(fā)定時中斷沖突的極端情況時,可設(shè)定發(fā)送優(yōu)先,由于端口操作時間為納秒級,接收滯后處理的影響可以忽略不計。
5.位檢測與接收通信可靠性
由于每一個bit的檢測結(jié)果直接決定著接收數(shù)據(jù)是否正確,按照波特率所確定的時間間隔對端口電平采樣一次來確定bit的值來實現(xiàn)的軟件,實驗室拷機時存在誤碼現(xiàn)象,因此通過提高bit的檢測能力,降低誤碼率。bit檢測改進方法如下:
(1)接收通信的位采樣仍然采用由波特率確定的時間間隔,但對于位檢測時,采用讀3次管腳電平然后進行表決的方式確定當(dāng)前bit的值,有效降低了誤碼率,但仍有字節(jié)出錯的問題,因為3取2的方式可以部分地剔除納秒級的高頻毛刺,但不能有效抑制強干擾引起的電平翻轉(zhuǎn),需進一步改進。
( 2 )將每一b i t檢測的時間間隔縮短到1/3,即對每一個bit進行三次檢測,然后做3取2判決,并將連續(xù)30個1/3bit的高電平后的首個1/3bit低電平作為幀起點的先決條件,確保正常情況下每一bit的3個1/3bit都是同樣的電平值,這樣做的好處是每一個bit的檢測可以允許一個1/3bit出錯。
以下進行簡要分析,令改進之前的誤碼率是p,引起誤碼的噪聲為非相干的,第一次改進后,對于任一bit的三次檢測中允許有一次出錯,因此在理想狀態(tài)下的誤碼率為檢測出錯兩次和三次的條件概率:
如果p=10-6,那么最終的誤碼率可以降低到約為1.4×10-25,分析表明改進措施應(yīng)該有效。
經(jīng)改進的軟件在實驗室進行了30小時通訊強度試驗,試驗中20ms完成一輪收發(fā),報文長度為20個字節(jié),在約1.08×108字節(jié)的接收通信中,未發(fā)現(xiàn)一個字節(jié)的通信錯誤。此后在產(chǎn)品8個月的調(diào)試與外場試驗統(tǒng)計數(shù)據(jù)表明,除了有一次因通信接口芯片損壞以及一次不明原因的通信出錯以外,沒有出現(xiàn)因為軟件產(chǎn)生的通信故障,證實了接收通信的可靠性。
6.結(jié)論
本文在GPIO模擬通用RS485/422串口通信的研究中,采用分層處理技術(shù)、優(yōu)化bit檢測方法、面向?qū)ο笤O(shè)計手段,實現(xiàn)了全雙工通訊,具有邏輯清晰、易于實現(xiàn)、可靠性高和易于改進、維護和移植的優(yōu)點;但也存在一定的局限性,如軟件不宜采用匯編語言實現(xiàn),全雙工通信是以定時器為中心進行統(tǒng)籌實現(xiàn)的,并不是真正獨立意義上的全雙工,其波特率受工作頻率的限制較大。
責(zé)任編輯:gt
-
dsp
+關(guān)注
關(guān)注
554文章
8058瀏覽量
349575 -
芯片
+關(guān)注
關(guān)注
456文章
51037瀏覽量
425476 -
總線
+關(guān)注
關(guān)注
10文章
2894瀏覽量
88227
發(fā)布評論請先 登錄
相關(guān)推薦
評論