硬件:串口握手基礎知識筆記


 RS-232通行方式允許簡單連接三線:Tx、Rx和地線。但是對於數據傳輸,雙方必須對數據定時采用使用相同的波特率。盡管這種方法對於大多數應用已經足夠,但是對於接收方過載的情況這種使用受到限制。這時需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟件握手、硬件握手和Xmodem。

  1、軟件握手

  我們討論的第一種握手是軟件握手。通常用在實際數據是控制字符的情況,類似於GPIB使用命令字符串的方式。必須的線仍然是三根:Tx、Rx和地線,因為控制字符在傳輸線上和普通字符沒有區別,函數SetXModem允許用戶使能或者禁止用戶使用兩個控制字符XON和OXFF。這些字符在通信中由接收方發送,使發送方暫停。

640?wx_fmt=jpeg

  例如:假設發送方以高波特率發送數據。在傳輸中,接收方發現由於CPU忙於其他工作,輸入buffer已經滿了。為了暫時停止傳輸,接收方發送XOFF,典型的值是十進制19,即十六進制13,直到輸入buffer空了。一旦接收方准備好接收,它發送XON,典型的值是十進制17,即十六進制11,繼續通信。輸入buffer半滿時,LabWindows發送XOFF。此外,如果XOFF傳輸被打斷,LabWindows會在buffer達到75%和90%時發送XOFF。顯然,發送方必須遵循此守則以保證傳輸繼續。

  2、硬件握手

  第二種是使用硬件線握手。和Tx和Rx線一樣,RTS/CTS和DTR/DSR一起工作,一個作為輸出,另一個作為輸入。第一組線是RTS(RequesttoSend)和CTS(CleartoSend)。當接收方准備好接收數據,它置高RTS線表示它准備好了,如果發送方也就緒,它置高CTS,表示它即將發送數據。另一組線是DTR(DataTerminalReady)和DSR(DataSetReady)。這些現主要用於Modem通信。使得串口和Modem通信他們的狀態。例如:當Modem已經准備好接收來自PC的數據,它置高DTR線,表示和電話線的連接已經建立。讀取DSR線置高,PC機開始發送數據。一個簡單的規則是DTR/DSR用於表示系統通信就緒,而RTS/CTS用於單個數據包的傳輸。

640?wx_fmt=jpeg

  在LabWindows,函數SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下規則:當PC發送數據:RS-232庫必須檢測CTS線高后才能發送數據。

  當PC接收數據:

  如果端口打開,且輸入隊列有空接收數據,庫函數置高RTS和DTR。

  如果輸入隊列90%滿,庫函數置低RTS,但使DTR維持高電平。

  如果端口隊列近乎空了,庫函數置高RTS,但使DRT維持高電平。

  如果端口關閉,庫函數置低RTS和DTR。

  3、XModem握手

  最后討論的握手叫做XModem文件傳輸協議。這個協議在Modem通信中非常通用。盡管它通常使用在Modem通信中,XModem協議能夠直接在其他遵循這個協議的設備通信中使用。在LabWindows中,實際的XModem應用對用戶隱藏了。只要PC和其他設備使用XModem協議,在文件傳輸中就使用LabWindows的XModem函數。函數是XModemConfig,XModemSend和XModemReceive。

640?wx_fmt=jpeg

  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控制字符的值,從而導致通信故障。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM