新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于GPIO實(shí)現(xiàn)RS485/422通信的研究

關(guān)于GPIO實(shí)現(xiàn)RS485/422通信的研究

作者: 時(shí)間:2014-03-26 來源:網(wǎng)絡(luò) 收藏

1.引言

本文引用地址:http://2s4d.com/article/235349.htm

工程實(shí)踐中,對(duì)于解決同一個(gè)問題,我們常面臨兩種選擇:要么硬件簡單軟件復(fù)雜,要么軟件復(fù)雜硬件簡單。如某引信系統(tǒng)的DSP電路,需要與內(nèi)部兩個(gè)組部件以及外部多個(gè)系統(tǒng)進(jìn)行接口或者信息交互,且總體要求采用異步串口方式進(jìn)行通信。此類問題主要有三種解決方案:第一,在DSP的并行總線上擴(kuò)展UART芯片,通過硬件轉(zhuǎn)換實(shí)現(xiàn),軟件最簡單;第二,在DSP的McBSP串行總線上擴(kuò)展UART芯片,軟件有一定的復(fù)雜度;第三,不擴(kuò)展其他硬件直接利用IO引腳通過軟件控制實(shí)現(xiàn),該方法軟件最復(fù)雜。根據(jù)以往文獻(xiàn)可知在硬件資源允許的前提下,前兩種方法已經(jīng)得到了廣泛的研究。

然而在產(chǎn)品的研制過程中,常出現(xiàn)引信硬件資源緊張的情況,無法擴(kuò)展?jié)M足需求的UART,只能選擇第三種解決方式,總體的高波特率和高可靠性要求增加軟件設(shè)計(jì)的難度。筆者通過軟件的合理設(shè)計(jì),成功地解決了以上問題。

2.串行通信基本原理

串行通信的基本原理是以改變數(shù)字電平的方式將數(shù)據(jù)按照一定的時(shí)間寬度(波特率)按位(通常低位在前高位在后)順序傳輸,分為同步串口和異步串口兩類。同步串口通信主要應(yīng)用于傳輸速率高但傳輸距離要求不高的場(chǎng)合,異步串口則側(cè)重于傳輸速率要求稍低的情形。

圖1給出了異步串行通信的數(shù)據(jù)基本格式,對(duì)于一個(gè)完整的字節(jié),傳輸時(shí)包含起始位、數(shù)據(jù)位、校驗(yàn)位。

 

 

實(shí)現(xiàn)同步串口通信通常需要6根總線,即收、發(fā)數(shù)據(jù)線,收、發(fā)幀同步線,收、發(fā)位時(shí)鐘線。而異步串口則最少可只需2條總線(最多4條)便實(shí)現(xiàn)數(shù)據(jù)通信,如果采用差分傳輸還可以有效地提高傳輸距離,根據(jù)能否同時(shí)收發(fā)數(shù)據(jù)又分為全雙工和半雙工兩種工作模式。

圖2是應(yīng)用最普遍的串口形式之一的串口總線,RS485半雙工傳輸采用一對(duì)差分信號(hào),由主控端的RE和DE來控制當(dāng)前數(shù)據(jù)收發(fā),收發(fā)不能同時(shí)進(jìn)行;RS422全雙工傳輸采用兩對(duì)差分信號(hào),主控端直接獨(dú)立收發(fā),且收發(fā)可同時(shí)進(jìn)行。

 

 

本研究通過軟件控制改變端口的狀態(tài),完成串口通信的時(shí)序。

3.基本流程設(shè)計(jì)

為提高軟件的質(zhì)量和可維護(hù)性,收發(fā)通訊實(shí)現(xiàn)時(shí)均采用位、字節(jié)和幀三個(gè)處理層次。每層相對(duì)獨(dú)立,低層處理的結(jié)果通過狀態(tài)傳遞方式通知上一層。

研究中采用的數(shù)據(jù)傳輸格式:1bit起始位“0”,8bit數(shù)據(jù)位(先低后高),無校驗(yàn)位,1bit停止位“1”,每個(gè)字節(jié)累計(jì)為10bit.

3.1 發(fā)送通信流程

主動(dòng)發(fā)送數(shù)據(jù)形式的流程如下:

1)底層:位發(fā)送。在波特率控制的時(shí)間間隔內(nèi)將發(fā)送數(shù)據(jù)管腳置為和當(dāng)前bit一致的電平狀態(tài)。

2)中間層:字節(jié)發(fā)送,如圖3所示。發(fā)送當(dāng)前bit,發(fā)送完位計(jì)數(shù)器+1,如果位數(shù)達(dá)到10位,則當(dāng)前字節(jié)發(fā)送結(jié)束,并通知頂層;3)頂層:幀發(fā)送,如圖4所示。首先檢測(cè)串口當(dāng)前狀態(tài)是否為發(fā)送允許,如果不是則將串口置為接收禁止、發(fā)送允許狀態(tài),確定了發(fā)送允許后進(jìn)入幀發(fā)送。幀發(fā)送按照?qǐng)?bào)文格式順序發(fā)送各字節(jié),發(fā)送結(jié)束將串口設(shè)為發(fā)送禁止、接收允許狀態(tài)。

 

 

 

 

3.2 接收通信流程

接收通信需要把每一個(gè)bit的數(shù)據(jù)準(zhǔn)確地檢測(cè)出來,確定字節(jié)的起止位,判斷幀的起止字節(jié),也就是說通過分析和計(jì)算將數(shù)據(jù)格式和通信協(xié)議所規(guī)定的每一個(gè)細(xì)節(jié)精確定位。對(duì)于幀起始時(shí)刻的判斷,根據(jù)圖1數(shù)據(jù)格式知在數(shù)據(jù)傳輸?shù)倪^程中,即使數(shù)據(jù)位為全“1”或全“0”,由于有起始位和停止位的存在,也不會(huì)出現(xiàn)連續(xù)10個(gè)bit的“1”或“0”的情況,于是當(dāng)連續(xù)出現(xiàn)10個(gè)bit的“1”時(shí),則數(shù)據(jù)線處于停止傳輸?shù)臓顟B(tài);而連續(xù)出現(xiàn)10個(gè)bit的“0”時(shí),則數(shù)據(jù)線處于異常狀態(tài)。于是接收通信開始后至少連續(xù)10個(gè)bit的“1”之后的“0”可以作為幀的起始位。這里的“幀”不是指通信協(xié)議中的完整報(bào)文,只是指收到的一段數(shù)據(jù),至于當(dāng)前字節(jié)是否為報(bào)文頭,則需根據(jù)協(xié)議判斷。好處是不漏任何數(shù)據(jù),可靠接收約定報(bào)文。

接收通信流程如下:

1)底層:位接收,如圖5所示。位接收在由波特率確定的時(shí)間間隔到達(dá)時(shí),采樣接收數(shù)據(jù)線的電平狀態(tài)作為當(dāng)前bit值,同時(shí)判斷幀起始位,幀開始后的位接收完成,通知中間層進(jìn)行字節(jié)處理。

 

通信相關(guān)文章:通信原理


塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理

上一頁 1 2 下一頁

關(guān)鍵詞: GPIO RS485/422

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉