新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于GPIO實現RS485/422通信的研究

        關于GPIO實現RS485/422通信的研究

        作者: 時間:2014-03-26 來源:網絡 收藏

        1.引言

        本文引用地址:http://www.104case.com/article/235349.htm

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

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

        2.串行通信基本原理

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

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

         

         

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

        圖2是應用最普遍的串口形式之一的串口總線,RS485半雙工傳輸采用一對差分信號,由主控端的RE和DE來控制當前數據收發,收發不能同時進行;RS422全雙工傳輸采用兩對差分信號,主控端直接獨立收發,且收發可同時進行。

         

         

        本研究通過軟件控制改變端口的狀態,完成串口通信的時序。

        3.基本流程設計

        為提高軟件的質量和可維護性,收發通訊實現時均采用位、字節和幀三個處理層次。每層相對獨立,低層處理的結果通過狀態傳遞方式通知上一層。

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

        3.1 發送通信流程

        主動發送數據形式的流程如下:

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

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

         

         

         

         

        3.2 接收通信流程

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

        接收通信流程如下:

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

         

        通信相關文章:通信原理


        塵埃粒子計數器相關文章:塵埃粒子計數器原理

        上一頁 1 2 下一頁

        關鍵詞: GPIO RS485/422

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乌恰县| 中江县| 闸北区| 伊春市| 云龙县| 屏南县| 色达县| 昔阳县| 冕宁县| 卓尼县| 牙克石市| 全南县| 荆州市| 平南县| 江永县| 毕节市| 越西县| 大英县| 新乡市| 商城县| 乌审旗| 博客| 子长县| 那坡县| 通河县| 富平县| 永新县| 龙胜| 嘉祥县| 玉龙| 浮梁县| 长武县| 通化市| 湖南省| 玛纳斯县| 西乌珠穆沁旗| 辰溪县| 定西市| 恭城| 阳泉市| 右玉县|