複製鏈接
請複製以下鏈接發送給好友

串口通信協議

鎖定
串口是顯控設備與信號處理板之間通信的主要接口,也是顯控設備與其他設備、設備與設備之間的協議數據幀通信傳輸的重要接口。 [2]  串口通信指串口按位(bit)發送和接收字節。儘管比特字節(byte)的串行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。串口通信協議是指規定了數據包的內容,內容包含了起始位、主體數據、校驗位及停止位,雙方需要約定一致的數據包格式才能正常收發數據的有關規範。串口通信協議是基於串口使得通信雙方能夠相互溝通信息的一種約定,其定義了雙方遵循的協議數據幀格式和其傳輸方式 [2]  在串口通信中,常用的協議包括RS-232RS-422RS-485
中文名
串口通信協議
外文名
Serial communication protocol
作    用
發送和接收字節
學    科
計算機學
協    議
RS-232、RS-422和RS-485

串口通信協議串口通信的基本原理

串口在嵌入式系統當中是一類重要的數據通信接口,其本質功能是作為 CPU 和串行設備間的編碼轉換器。當數據從 CPU 經過串行端口發送出去時,字節數據轉換為串行的位;在接收數據時,串行的位被轉換為字節數據。應用程序要使用串口進行通信,必須在使用之前向操作系統提出資源申請要求(打開串口),通信完成後必須釋放資源(關閉串口)。典型地,串口用於 ASCII 碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發送數據線,(3)接收數據線。串口通信最重要的參數是波特率數據位、停止位和奇偶校驗。對於兩個進行通行的端口,這些參數必須匹配:波特率是一個衡量通信速度的參數,它表示每秒鐘傳送的 bit 的個數;數據位是衡量通信中實際數據位的參數,當計算機發送一個信息包,標準的值是 5,7 和 8 位。如何設置取決於你的需求;停止位用於表示單個包的最後一位,典型的值為 1,1.5和 2 位,停止位不僅僅是表示傳輸的結束,並且提供計算機校正時鐘同步的機會;奇偶校驗位是串口通信中一種簡單的檢錯方式,有四種檢錯方式——偶、奇、高和低,也可以沒有校驗位 [1] 

串口通信協議有關規定

串口異步通訊中由於沒有時鐘信號,所以通訊雙方需要約定好波特率,即每個碼元的長度,以便對信號進行解碼。常見的波特率有4800、9600、115200等。
起始位、停止位
數據包從起始位開始,到停止位結束。起始信號用邏輯0的數據位表示,停止信號由0.5、1、1.5或2個邏輯1的數據位表示,只要雙方約定一致即可。
有效數據
起始位之後便是傳輸的主體數據內容了,也稱為有效數據,其長度一般被約定為5、6、7或8位長。
由於在通訊過程中易受到外部干擾導致傳輸數據出現偏差,所以在有效數據之後加上校驗位解決。校驗方法有奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)及無校驗(noparity)。奇校驗要求有效數據和校驗位中“1”的個數為奇數,比如一個8位長的有效數據為:01101001,此時共有4個“1”,為達到奇校驗效果,校驗位為“1”,最後傳輸的是8位有效數據加1位校驗位,共9位。
校驗剛好相反,要求有效數據和校驗位的“1”數量為偶數,則此時為達到偶校驗效果,校驗位為“0”。而0校驗則無論有效數據中是什麼數據內容,校驗位總是為“0”,1校驗校驗位總是為“1”。

串口通信協議常用協議

串口通信協議RS-232

RS-232(ANSI/EIA-232標準)是IBM-PC及其兼容機上的串行連接標準。可用於許多用途,比如連接鼠標、打印機或者Modem,同時也可以接工業儀器儀表。用於驅動和連線的改進,實際應用中RS-232的傳輸長度或者速度常常超過標準的值。RS-232只限於PC串口和設備間點對點的通信。RS-232串口通信最遠距離是50英尺。
DB-9針連接頭
9針串口連接口順序圖 9針串口連接口順序圖
從計算機串口截面圖。RS-232針腳的功能:
數據:
TXD(pin 3):串口數據輸出(Transmit Data)
RXD(pin 2):串口數據輸入(Receive Data)
握手:
RTS(pin 7):發送數據請求(Request to Send)
CTS(pin 8):清除發送(Clear to Send)
DSR(pin 6):數據發送就緒(Data Send Ready)
DCD(pin 1):數據載波檢測(Data Carrier Detect)
DTR(pin 4):數據終端就緒(Data Terminal Ready)
地線:
GND(pin 5):地線
其它
RI(pin 9):鈴聲指示

串口通信協議RS-422

RS-422(EIA RS-422-AStandard)是Apple的Macintosh計算機的串口連接標準。RS-422使用差分信號,RS-232使用非平衡參考地的信號。差分傳輸使用兩根線發送和接收信號,對比RS-232,它能更好的抗噪聲和有更遠的傳輸距離。在工業環境中更好的抗噪性和更遠的傳輸距離是一個很大的優點。

串口通信協議RS-485

RS-485EIA-485標準)是RS-422的改進,因為它增加了設備的個數,從10個增加到32個,同時定義了在最大設備個數情況下的電氣特性,以保證足夠的信號電壓。有了多個設備的能力,你可以使用一個單個RS-485口建立設備網絡。出色抗噪和多設備能力,在工業應用中建立連向PC機的分佈式設備網絡、其他數據收集控制器、HMI或者其他操作時,串行連接會選擇RS-485。RS-485是RS-422的超集,因此所有的RS-422設備可以被RS-485控制。RS-485可以用超過4000英尺的線進行串行通行。
DB-9 引腳連接
--------------
\ 1 2 3 4 5 /
\ 6 7 8 9 /
---------
從計算機連出的線的截面。
RS-485的引腳的功能
數據:1(DATA-)2(DATA+)
地線:5

串口通信協議握手

RS-232通信方式允許簡單連接三線:Tx、Rx和地線。但是對於數據傳輸,雙方必須對數據定時採用使用相同的波特率。儘管這種方法對於大多數應用已經足夠,但是對於接收方過載的情況這種使用受到限制。這時需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟件握手、硬件握手和Xmodem。
a,軟件握手:我們討論的第一種握手是軟件握手。通常用在實際數據是控制字符的情況,類似於GPIB使用命令字符串的方式。必須的線仍然是三根:Tx,Rx和地線,因為控制字符在傳輸線上和普通字符沒有區別,函數SetXModem允許用户使用或者禁止用户使用兩個控制字符XON和XOFF。這些字符在通信中由接收方發送,使發送方暫停。
例如:假設發送方以高波特率發送數據。在傳輸中,接收方發現由於CPU忙於其他工作,輸入buffer已經滿了。為了暫時停止傳輸,接收方發送XOFF,典型的值是十進制19,即十六進制13,直到輸入buffer空了。一旦接收方準備好接收,它發送XON,典型的值是十進制17,即十六進制11,繼續通信。輸入buffer半滿時,LabWindows發送XOFF。此外,如果XOFF傳輸被打斷,LabWindows會在buffer達到75%和90%時發送XOFF。顯然,發送方必須遵循此守則以保證傳輸繼續。
b,硬件握手:第二種是使用硬件線握手。和Tx和Rx線一樣,RTS/CTS和DTR/DSR一起工作,一個作為輸出,另一個作為輸入。第一組線是RTS(Request to Send)和CTS(Clear to Send)。當接收方準備好接收數據,它置高RTS線表示它準備好了,如果發送方也就緒,它置高CTS,表示它即將發送數據。另一組線是DTR(Data Terminal Ready)和DSR(Data SetReady)。這些線主要用於Modem通信,使得串口和Modem通信他們的狀態。例如:當Modem已經準備好接收來自PC的數據,它置高DTR線,表示和電話線的連接已經建立。讀取DSR線置高,PC機開始發送數據。一個簡單的規則是DTR/DSR用於表示系統通信就緒,而RTS/CTS用於單個數據包的傳輸。
在LabWindows,函數SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下規則:
當PC發送數據:
RS-232庫必須檢測CTS線高後才能發送數據。
當PC接收數據:
如果端口打開,且輸入隊列有空接收數據,庫函數置高RTS和DTR。
如果輸入隊列90%滿,庫函數置低RTS,但使DTR維持高電平
如果端口隊列近乎空了,庫函數置高RTS,但使DTR維持高電平。
如果端口關閉,庫函數置低RTS和DTR。
c,XModem握手:最後討論的握手叫做XModem文件傳輸協議。這個協議在Modem通信中非常通用。儘管它通常使用在Modem通信中,XModem協議能夠直接在其他遵循這個協議的設備通信中使用。在LabWindows中,實際的XModem應用對用户隱藏了。只要PC和其他設備使用XModem協議,在文件傳輸中就使用LabWindows的XModem函數。函數是XModemConfig,XModemSend和XModemReceive。
XModem使用介於如下參數的協議:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。這些參數需要通信雙方認定,標準的XModem有一個標準的定義;然而,可以通過XModemConfig函數修改,以滿足具體需要。這些參數的使用方法由接收方發送的字符neg_ack確定,這通知發送方其準備接收數據。它開始嘗試發送,有一個超時參數start_delay;當超時的嘗試超過max_ties次數,或者收到接收方發送的start_of_data,發送方停止嘗試。如果從發送方收到start_of_data,接收方將讀取後繼信息數據包。包中含有包的數目、包數目的補碼作為錯誤校驗、packet_size字節大小的實際數據包,和進一步錯誤檢查的求和校驗值。在讀取數據後,接收方會調用wait_delay,然後向發送方發送響應。如果發送方沒有收到響應,它會重新發送數據包,直到收到響應或者超過重發次數的最大值max_tries。如果一直沒有收到響應,發送方通知用户傳輸數據失敗。
由於數據必須以pack_size個字節按包發送,當最後一個數據包發送時,如果數據不夠放滿一個數據包,後面會填充ASCII碼NULL(0)字節。這導致接收的數據比原數據多。在XModem情況下一定不要使用XON/XOFF,因為XModem發送方發出包的數目很可能增加到XON/OFF控制字符的值,從而導致通信故障。
參考資料