內容提要:本文描述了使用XMOMDEM檔案傳輸通訊協定的通訊程式設計,該設計為具有FLASH 儲存空間的嵌入式系統提供了和PC機上超級終端軟體之間的檔案傳輸功能,在PC機上不安裝專用通訊軟體情況下,實現程式在板升級、資料在板定製等,給現場調試和維護帶來方便。另外,本文也描述了基於狀態矩陣的通訊軟體編程方法。
關 鍵 字: XMODEM 檔案下載 FSM 狀態矩陣
1 設計目的與用途
2 XMODEM協議介紹
3 協議分層與層間介面
3.1 協議分層
3.2 鏈路層和物理層間的介面
3.3 鏈路層和應用程式層間的介面
4 分層協議實現
4.1 協議的OS平台
4.2 應用程式層軟體實現
4.3 鏈路層軟體實現
4.4 物理層軟體實現
5 軟體移植
6 軟體調試方法
參考文獻
附錄1:XMODEM協議通訊的異常情況列表
附錄2:XMODEM協議的狀態跳躍表
附錄3:原始碼檔案清單
附錄4:完整原始碼
1 設計目的與用途
嵌入式系統的程式碼一般存放在FLASH儲存空間或者OTP儲存空間中,後者實際上是一種一次性可程式化的EPROM,成本低,適合於批量大的產品使用,但程式寫入後不能修改,使用FLASH的優點是程式可以隨時在板更換,這種特點給現場調試和軟體升級、修改帶來極大方便。
對印製板上FLASH編程有幾種方法,原始的方法是使用編程器,由於要將晶片取下,十分不便,也有一些廠家生產的處理器通過JTAG介面或者串口串連到PC機上(如PHILIPS公司的P89C51RD),可以實現處理器內部FLASH的在板編程,但需要專用下載編程軟體(一般由晶片生產廠商提供),無法對處理器外部的FLASH進行編程。
使用XMODEM協議進行程式下載是目前很多產品通用的做法,比如CISCO公司的路由器產品,HUAWEI公司的ISDN終端產品,這種方法使用WINDOWS內建的超級終端軟體來傳送檔案,無需安裝專用軟體。只要在目標板上增加一斷實現XMODEM協議的代碼【圖表1】,就可以方便地實現程式或者資料檔案的下載了。在下文中,就敘述XMODEM協議程式的實現方法。
圖表 1:目標板程式由二部分組成:下載程式和應用程式
2 XMODEM協議介紹
XMODEM協議【文獻1】是最早出現的2台電腦間通過RS232非同步串口進行檔案傳輸的通訊協定標準,相對於YMODEM,ZMODEM等其他檔案傳送協議來說,XMODEM協議實現簡單,適合於那些儲存空間有限的場合。
XMODEM檔案發送方將檔案分解成128位元組的定長資料區塊,每發送一個資料區塊,等待對方應答後才發送下一個資料區塊,資料校正採用垂直累加和校正,也可以採用16位的CRC校正。屬於簡單ARQ(自動請求重發)協議,所以也適合於2線制的半雙工的RS485網路中使用。
2.1 術語
在具體敘述XMODEM協議的具體內容前,我們先給出協議用到的術語縮寫【圖表2】。
術語 數值 含義 備忘
十進位 十六進位
SOH 1 01H 資料區塊開始
EOT 4 04H 發送結束
ACK 6 06H 認可響應
NAK 21 15H 不認可響應 對於CRC校正的協議軟體,本訊號用字母“C”(43H)代替。
DLE 16 10H 中止資料連線
X-on 17 11H 資料傳送啟動 當通訊雙方的速度不一致時,可採用該字元來調節通訊速度,比如接收方速度太慢而導致接收緩衝器滿時,發送“X-off”給發送方,使發送方暫停發送資料。相當於RS232介面的DSR,CTS等訊號。
X-off 19 13H 資料傳送停止
SYN 22 16H 同步
CAN 24 18H 撤銷傳送
圖表 2:XMODEM協議的控制字元
上表中各個縮寫也是標準ASCII碼的一個字元,在XMODEM協議中需要使用這些字元來表達協議的狀態。而其基本含義如表中所述。
2.2 資料框架格式與檔案分解
XMODEM協議每次傳送的資料幀長度為132位元組,其中檔案資料佔128位元組,其他4個位元組分別為開始標誌,塊序號,塊序號的補碼和校正位元組。其中開始標誌,塊序號,塊序號的補碼位於資料區塊開始, 校正位元組位於資料區塊結尾,如【圖表3】:
位移 位元組數 名稱 描述 說明
名稱 數值(HEX)
0 1 SOH 01 起始位元組標誌
1 1 Seq 1~FFh 塊序號
2 1 cmpl FFH-seq 塊序號的補碼
3 128 data ? 檔案內容資料
131 1 csum ? 垂直累加和校正 1:XMODEM協議允許使用2種校正碼。2:校正碼只從128位元組的資料進行計算後得出,頭部3個位元組不參加校正和運算。
2 CRC ? 16位迴圈冗餘校正
圖表 3:XMODEM協議的資料框架格式
如果檔案長度不是128位元組的整數倍,最後一個資料區塊的有效內容必然小於幀長,剩下部分需要用其他資料來填充,XMODEM建議使用“CTRL-Z”(=26(01aH)),這種情況下,接收方如何區別該幀中屬於檔案的內容和填充的內容呢。
如果傳送的檔案是只包含字母、數字和可顯示符號的文字檔(例如C程式原始碼檔案),那麼根據內容本身接收方是可以區分的(“26”不是字母或者數位ASCII碼),如果傳送的是任意數值的二進位檔案(如程式目標碼),則接收方是無法區分檔案內容和填充內容。
重要提示:XMODEM協議不能保證接收方接收的檔案長度和發送方完全一致,接收方所接收的檔案資料長度總是128位元組的整數倍,比傳送檔案的實際長度要大1到127位元組。多出的內容位於檔案結尾處。
XMODEM協議的這種缺點對於用於嵌入式系統的程式碼下裝沒有實際影響,處理器不會將填充內容當作代碼執行,只要程式儲存空間的容量足夠,能儲存接收的所有資料就可以了。如果將XMODEM協議用於資料庫下裝,應當考慮多餘內容的影響,一般標準資料庫檔案中均有表示資料庫尺寸、欄位數、記錄數等資料庫結構參數,所以也不會把填充內容當作資料庫的記錄本身。
同樣,對於漢字型檔這種資料庫,使用XMODEM協議來下載也不會產生問題。
2.3 校正演算法
校正碼是對發送資料進行某種計算得到的編碼,為了防止資料在發送途中某些位發生錯誤,各種資料通訊協定規定發送方除了發送應用資料外,還要發送校正碼,而資料接收方則根據同樣演算法從收到的應用資料中計算出校正碼,並和發送方發送的校正碼比較,如相等,才認為收到了正確的資料。
在XMODEM協議中,可使用垂直累加和或者CRC校正,使用CRC校正的通訊軟體可以自動從CRC校正自動切換到累加和校正模式。在本應用中,我們使用垂直累加和校正。
累加和校正碼是將所有發送資料的和按位元組累加,保留其最低位元組作為校正碼,例如,發送的3個位元組資料分別為255(FFh),5(05h),6(06h), 則:
1 1 1 1 1 1 1 1 FFH
0 0 0 0 0 1 0 1 05H
0 0 0 0 0 1 1 0 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
將高位丟棄後,得到累加和校正碼為0Ah(10)。在上例中,如果原來資料在途中發生了變化,如FFH變為FEH,06H變為07H, 05H未變,則接收方所計算的校正碼為:
接收 發送
1 1 1 1 1 1 1 0 FEH <- FFH
0 0 0 0 0 1 0 1 05H < - 05H
0 0 0 0 0 1 1 1 07H <- 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
校正碼也為0AH。可見,在資料中有2位改變時,接收方所計算的校正碼仍然與發送方一致,這種校正方式不能檢測偶數位的誤碼。
XMODEM協議的校正碼只對資料幀中的128位元組資料進行計算後得出,頭部3個位元組不參加校正和運算。
2.4 XMODEM協議的啟動
XMODEM協議開始是檔案接收方發出“NAK”位元組,檔案發送方在收到該訊號後發送資料幀,雙方開始正常通訊過程。而檔案發送方進入XMODEN協議後,等待對方發送”NAK”,如果等待時間超過60秒,則退出本次通訊【圖4B】。
接收方發出“NAK”後,如果10秒後對方還沒有發送第一個資料幀,則重複發送“NAK”,這種重複次數最多允許10次,仍然沒有收到第一個資料區塊,則退出本次通訊【圖4A】。
(A):發送方軟體延遲100秒以上工作導致不能啟動協議
(B):接收方軟體延遲60秒發送”NAK”訊號導致不能啟動協議
圖表 4 XMODEM協議不能啟動的2種情況
在嵌入式系統通過PC機來下載軟體的應用中,嵌入式系統軟體是檔案接收方,PC機超級終端軟體是檔案發送方。按照協議規定,嵌入式系統的通訊軟體進入XMODEM協議狀態後,PC機軟體必須在100秒內進入協議狀態(即執行超級終端的XMODEM檔案傳輸功能),反之,後者先進入協議狀態,前者必須在60秒內進入協議狀態,顯然,通過人工來操作,這種時間差有些緊張。解決辦法只有加長嵌入式系統載入軟體的啟動等待時間,這種修改不會引起協議理解的歧義。
重要提示:為了發送和接收方能夠更容易啟動XMODEM協議,在設計中,將延長嵌入式系統下載軟體的啟動延時時間,在以下的代碼中,將這種延時時間改為600秒(10分鐘)。或者將等待時間設定為無限長,一致發出”NAK”訊號,直到PC機上的超級終端軟體運行為止。
2.5 XMODEM的正常傳輸過程
【圖5】中給出了一次正常的XMODEM通訊中收發雙方的通訊過程。
圖 5:沒有差錯的檔案傳輸過程
檔案接收方每收到一個資料幀後,如沒有校正差錯、序號差錯等情況,均發送一個“ACK”字元作為應答,發送方在收到應答後才開始發送下一個字元,如此反覆,直到檔案內容傳送完畢,發送方傳送“EOT”字元表示傳送完成,發送方收到後再次以“ACK”回應,至此,整個檔案傳輸過程就結束了。
2.6 XMODEM協議的中止
在通訊進行過程中,雙方中的任意一方如果希望中止本次通訊,可以發送“CAN”字元給對方,現在很多XMODEM協議軟體要求發送2個”CAN”字元來實現,
協議軟體的主動中止通訊一般是人為發起的,例如按下超級終端軟體的“取消”按鈕。或者通過拔碼開關來控制嵌入式系統的下載軟體退出通訊。
2.7 XMODEM協議的異常處理
在通訊過程中,總是要出現各種異常情況,比如通訊線路的突然中斷,一方機器停電而導致軟體中止執行等;通訊軟體必須能夠檢測這些錯誤,並作出合理的處理。在前面的協議啟動一節中已經涉及到了錯誤偵測的問題,XMODEM對錯誤的規定很詳細,共計有8種情況,協議文本沒有說明是如何引起的,【附錄 1】中給出了可能原因,
在嵌入式系統中,考慮到下載軟體一般均有人操作的,也可不考慮錯誤處理,這樣實現實現代碼會減小。在本文中,考慮到協議的完整性,考慮了各種錯誤的處理。
2.8 CRC校正與累加和校正方式的切換
XMODEM協議要求支援CRC校正的通訊軟體也能支援累加和校正,這樣就可以和那些只支援累加和校正的軟體進行通訊,如果檔案接收方只支援累加和,而發送方可支援CRC,接收方發送啟動訊號為“NAK”,發送方收到後自動按累加和方式發送資料幀;如果相反,接收方支援CRC,而發送方支援累加和,接收方首先發出字母“C”來作為啟動訊號,這時接收方應不理睬此訊號,發送方在3秒後繼續發送訊號“C”,共三次未收到應答後,改為發送“NAK”訊號,表示使用累加和方式進行通訊了。
如果通訊雙方均採用CRC校正,上述通訊握手訊號“NAK”用字母“C來代替,其他過程同上。
因為PC機超級終端軟體支援CRC模式,嵌入式系統作為檔案接收方,只要發送“NAK”訊號就能使對方自動按照校正和方式通訊了。
3 協議分層與層間介面
3.1 協議分層
我們將協議代碼分成3層:物理層,鏈路層和協議應用程式層。物理層用於控制UART器件,鏈路層處理XMODEM協議,應用程式層負責將收到的單個128 位元組資料區塊組合成一個完成的資料區塊,並寫入程式儲存空間緩衝區。這種分層,在程式移植時只要修改和硬體相關的物理層、應用程式層代碼,無需修改實現XMODEM 協議的鏈路層代碼。
層與層之間通過訊息來通訊,XMODEM協議沒有規定分層結構和層間訊息格式,這裡將鏈路層與應用程式層之間、鏈路層和物理層之間的訊息格式統一規定如下:
typedef struct {
int len; /* 訊息內容長度,即Message中的內容位元組數 */
char mType; /* 層間訊息類型, */
char Message[MAX_ MESSAGE_LEN]; /* 訊息內容, 由發送進程填寫 */
} MessageOfLayer;
考慮到XMODEM資料幀為132位元組,定義常量“MAX_MESSAGE_LEN”為132位元組,按OSI標準,層間訊息原語有資料請求、資料指示、響應、證實4種類型【文獻5】。【圖7】給出了A方發送資料,B方接收資料時的層間訊息類型圖 6: 單向資料傳送的層間訊息順序:①②③④
訊息1,2是承載實際資料的資料幀,訊息3,4是傳送過程中的應答幀,表明資料已經正確傳送,必須說明的是,在發送資料的證實訊息3不是從對方發出的,物理層在發送出資料後,立即向上一層發出證實訊息。
在實際應用中,處理正常的資料傳送所需要的訊息外,也需要定義一些控制管理訊息,下面具體說明層間訊息類型和作用。
3.2 鏈路層和物理層間的介面
n 資料請求:該訊息用於向物理層發送XMODEM幀資料,包括132位元組的檔案資料幀和NAK,ACK,CAN單位元組訊號幀等,下載軟體只是接收檔案,不需要發送132位元組的檔案資料幀。
n 資料證實:物理層收到鏈路層的資料請求幀後,送到UART的緩衝器中,等發送緩衝器為空白後,表明該位元組資料發送完成,向鏈路層發送證實訊息,鏈路層接收到此訊息後,就可以發送下一個位元組,實際上物理層傳送是一個無串連,證實訊息不是由接收方產生的,不能表明對方已經正確接收到資料,而只表明已經發出資料。物理層協議一般也不提供有應答的傳輸機制。
n 資料指示:物理層在接收緩衝器滿後,將資料發送給鏈路層。
除了以上3個訊息外,物理層和應用程式層之間還有以下2個訊息:
n 啟動電路:由鏈路層向物理層發出,物理層在收到該協議後將串口進行初始化。
n 電路出錯:由物理層向鏈路層發出,用於報告物理層在資料傳送過程中的錯誤。
“資料響應”訊息在本應用中不使用。
3.3 鏈路層和應用程式層間的介面
鏈路層和應用程式層之間的資料轉送訊息有二個:
n 資料區塊指示:由鏈路層收到一個XMODEM協議幀(128位元組)後嚮應用層發出,應用程式層收到資料幀後寫入flash memory(PC版本寫入檔案)。
n 資料區塊塊響應:應用程式層收到XMODEM資料幀後,並寫入flash memory(PC版本寫入檔案)後向鏈路層發出的響應訊號。鏈路層收到響應後,向檔案發送方發出“ACK”訊號。
其他管理控制訊息定義了3個:
n 協議啟動:應用程式層通知鏈路層啟動XMODEM協議。
n 通訊結束:鏈路層在收到對方的EOT訊號後嚮應用層發出,應用程式層收到此訊息後,可以轉入應用程式入口,從而執行應用程式。
n 通訊中止:鏈路層因為各種情況無法繼續進行XMODEM傳輸時嚮應用層傳送該訊息,應用程式層收到此訊息後,丟棄已經收到的資料,發出通訊錯誤指示。
4 分層協議實現
4.1 協議的OS平台
為了實現分層協議,使用【文獻4】中的非搶先式作業系統作為軟體平台,各層分別作為一個進程。
4.2 應用程式層軟體實現
嵌入式系統下載軟體只接收代碼檔案,對於協議中作為檔案發送方的處理代碼可不編寫,應用程式層的任務是接收鏈路層的資料包,根據收到資料包的先後次序寫入程式儲存空間,在PC機上類比實現時,我們將資料存放在一個緩衝區內,完成後寫入檔案中,使用windiff軟體和傳送檔案進行比較,以判斷代碼的是否正確。
應用程式層的進程初始化代碼的作用是:
n 擦除程式儲存空間所使用的FLASH MEMORY(在本例中按29F010來編寫代碼)。
n 啟動一個10秒定時器,10秒後通知鏈路層啟動XMODEM協議。
n
串口基本常識 2006-8-28 11:24:40
作者:東方部落格 宋軍罡 宋軍罡 的個人首頁 【大 中 小】
串口引腳圖
串口通訊的基本概念:
1,什麼是串口。
2,什麼是RS-232。
3,什麼是RS-422。
4,什麼是RS-485。
5,什麼是握手。
1,什麼是串口
串口是電腦上一種非常通用裝置通訊的協議(不要與通用序列匯流排Universal Serial Bus或者USB混淆)。大多數電腦包含兩個基於RS232的串口。串口同時也是儀器儀錶裝置通用的通訊協定;很多GPIB相容的裝置也帶有RS-232口。同時,串口通訊協定也可以用於擷取遠程採集裝置的資料。
串口通訊的概念非常簡單,串口按位(bit)發送和接收位元組。儘管比按位元組(byte)的並行通訊慢,但是串口可以在使用一根線發送資料的同時用另一根線接收資料。它很簡單並且能夠實現遠距離通訊。比如IEEE488定義並行通行狀態時,規定裝置線總常不得超過20米,並且任意兩個裝置間的長度不得超過2米;而對於串口而言,長度可達1200米。
典型地,串口用於ASCII碼字元的傳輸。通訊使用3根線完成:(1)地線,(2)發送,(3)接收。由於串口通訊是非同步,連接埠能夠在一根線上發送資料同時在另一根線上接收資料。其他線用於握手,但是不是必須的。串口通訊最重要的參數是傳輸速率、資料位元、停止位和同位。對於兩個進行通行的連接埠,這些參數必須匹配:
a,傳輸速率:這是一個衡量通訊速度的參數。它表示每秒鐘傳送的bit的個數。例如300傳輸速率表示每秒鐘發送300個bit。當我們提到刻度時,我們就是指傳輸速率例如如果協議需要4800傳輸速率,那麼時鐘是4800Hz。這意味著串口通訊在資料線上的採樣率為4800Hz。通常電話線的傳輸速率為14400,28800和36600。傳輸速率可以遠遠大於這些值,但是傳輸速率和距離成反比。高傳輸速率常常用於放置的很近的儀器間的通訊,典型的例子就是GPIB裝置的通訊。
b,資料位元:這是衡量通訊中實際資料位元的參數。當電腦發送一個資訊包,實際的資料不會是8位的,標準的值是5、7和8位。如何設定取決於你想傳送的資訊。比如,標準的ASCII碼是0~127(7位)。擴充的ASCII碼是0~255(8位)。如果資料使用簡單的文本(標準 ASCII碼),那麼每個資料包使用7位元據。每個包是指一個位元組,包括開始/停止位,資料位元和同位位元。由於實際資料位元取決於通訊協定的選取,術語“包”指任何通訊的情況。
c,停止位:用於表示單個包的最後一位。典型的值為1,1.5和2位。由於資料是在傳輸線上定時的,並且每一個裝置有其自己的時鐘,很可能在通訊中兩台裝置間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供電腦校正時鐘同步的機會。適用於停止位的位元越多,不同時鐘同步的容忍程度越大,但是資料轉送率同時也越慢。
d,同位位元:在串口通訊中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校正位也是可以的。對於偶和奇數同位的情況,串口會設定校正位(資料位元後面的一位),用一個值確保傳輸的資料有偶個或者奇個邏輯高位。例如,如果資料是011,那麼對於偶校正,校正位為0,保證邏輯高的位元是偶數個。如果是奇數同位,校正位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查資料,簡單置位邏輯高或者邏輯低校正。這樣使得接收裝置能夠知道一個位的狀態,有機會判斷是否有雜訊幹擾了通訊或者是否傳輸和接收資料是否不同步。
2,什麼是RS-232。
RS-232(ANSI/EIA-232標準)是IBM-PC及其相容機上的串列串連標準。可用於許多用途,比如串連滑鼠、印表機或者Modem,同時也可以接工業儀器儀錶。用於驅動和連線的改進,實際應用中RS-232的傳輸長度或者速度常常超過標準的值。RS-232隻限於PC串口和裝置間點對點的通訊。RS-232串口通訊最遠距離是50英尺。
/ 1 2 3 4 5 /
/ 6 7 8 9 /
-------
從電腦連出的線的截面。
RS-232針腳的功能:
資料:
TXD(pin 3):串口資料輸出
RXD(pin 2):串口資料輸入
握手:
RTS(pin 7):發送資料請求
CTS(pin 8):清除發送
DSR(pin 6):資料發送就緒
DCD(pin 1):資料偵測載波
DTR(pin 4):資料終端機就緒
地線:
GND(pin 5):地線
其他
RI(pin 9):鈴聲指示
3,什麼是RS-422。
RS-422(EIA RS-422-A Standard)是Apple的Macintosh電腦的串口串連標準。RS-422使用差分訊號,RS-232使用非平衡參考地的訊號。差分傳輸使用兩根線發送和接收訊號,對比RS-232,它能更好的抗雜訊和有更遠的傳輸距離。在工業環境中更好的抗噪性和更遠的傳輸距離是一個很大的優點。
4,什麼是RS-485。
RS-485(EIA-485標準)是RS-422的改進,因為它增加了裝置的個數,從10個增加到32個,同時定義了在最大裝置個數情況下的電氣特性,以保證足夠的訊號電壓。有了多個裝置的能力,你可以使用一個單個RS-422口建立裝置網路。出色抗噪和多裝置能力,在工業應用中建立連向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和RS-422的引腳的功能
資料:TXD+(pin 8),TXD-(pin 9),RXD+(pin 4),RXD-(pin 5)
握手:RTS+(pin 3),RTS-(pin 7),CTS+(pin 2),CTS-(pin 6)
地線:GND (pin 1)
5,什麼是握手。
RS-232通行方式允許簡單串連三線:Tx、Rx和地線。但是對於資料轉送,雙方必須對資料定時採用使用相同的傳輸速率。儘管這種方法對於大多數應用已經足夠,但是對於接收方過載的情況這種使用受到限制。這時需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟體握手、硬體握手和Xmodem。
a,軟體握手:我們討論的第一種握手是軟體握手。通常用在實際資料是控制字元的情況,類似於GPIB使用命令字串的方式。必須的線仍然是三根:Tx,Rx和地線,因為控制字元在傳輸線上和一般字元沒有區別,函數SetXModem允許使用者使能或者禁止使用者使用兩個控制字元XON和OXFF。這些字元在通訊中由接收方發送,使發送方暫停。
例如:假設發送方以高傳輸速率發送資料。在傳輸中,接收方發現由於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 Set Ready)。這些現主要用於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,但使DRT維持高電平。
如果連接埠關閉,庫函數置低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控制字元的值,從而導致通訊故障。
XMODEM協議 XMODEM Protocol
XMODEM協議是一種使用撥號數據機的個人電腦通訊中廣泛使用的非同步檔案運輸協議。這種協議以128位元組塊的形式傳輸資料,並且每個塊都使用一個校正和過程來進行錯誤偵測。如果接收方關於一個塊的校正和與它在發送方的校正和相同時,接收方就向發送方發送一個認可位元組。然而,這種對每個塊都進行認可的策略將導致低效能,特別是具有很長傳播延遲的衛星串連的情況時,問題更加嚴重。
使用迴圈冗餘校正的與XMODEM相應的一種協議稱為XMODEM-CRC。還有一種是XMODEM-1K,它以1024位元組一塊來傳輸資料。ZMODEM是最有效一個XMODEM版本,它不需要對每個塊都進行認可。事實上,它只是簡單地要求對損壞的塊進行重發。ZMODEM對按塊收費的封包交換網路是非常有用的。不需要認可回送分組在很大程度上減少了通訊量。
YMODEM也是一種XMODEM的實現。它包括XMODEM-1K的所有特徵,另外在一次單一會話期間為發送一組檔案,增加了批次檔傳輸模式。
相關條目:Asynchronous Communication非同步通訊;Communication 通訊;Modems數據機。
xmodem協議主要由這麼幾個東西組成
1>基本型
<SOH> 1 byte <BlockNo> 1 byte <~BlockNo> 1 byte <Data> 128 bytes <Checksum> 1 byte
soh 頭標誌
blockno 塊號, 1-255
<~BlockNo> 塊號取反就是了
data 段定長, 128byte,不足ctrl_z補足
checksum: 算術和
由接收端發出hankshake, 傳輸端發送資料包作為應答,接收端對收到的資料做出應答(根據chksum),任何一方都可終止該流程
2> 其他類型
XModem CRC 檢驗和採用crc16, 握手訊號不一樣
XModem 1k 檢驗和採用crc16, 資料長度可達1024byte,
XModem 1kG