<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > GPIO實(shí)現高可靠性RS485/422通信的研究

GPIO實(shí)現高可靠性RS485/422通信的研究

作者: 時(shí)間:2014-02-10 來(lái)源:網(wǎng)絡(luò ) 收藏

  1.引言

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

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

  2.串行通信基本原理

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

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

  

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

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

  

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

  3.基本流程設計

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

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

  3.1 發(fā)送通信流程

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

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

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

  

  

  3.2 接收通信流程

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

  接收通信流程如下:

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


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: GPIO RS485 RS422通信

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>