在我們的xp系統中有一個超級終端,他是系統中自帶的串口程序,在許多時候我們可以使用它來調試嵌入式設備的程序,另外這個程序還有另外一種功能就是文件傳遞。在超級終端中支持多種傳送協議,本文以Xmodem爲例來實現PC機與單片機完成文件傳遞。
首先先介紹一下Xmodem協議,XMODEM協議是一種使用撥號調制解調器的個人計算機通信中廣泛使用的異步文件運輸協議。這種協議以128字節塊的形式傳輸數據,並且每個塊都使用一個校驗和過程來進行錯誤檢測。如果接收方關於一個塊的校驗和與它在發送方的校驗和相同時,接收方就向發送方發送一個認可字節。然而,這種對每個塊都進行認可的策略將導致低性能,特別是具有很長傳播延遲的衛星連接的情況時,問題更加嚴重。
使用循環冗餘校驗的與XMODEM相應的一種協議稱爲XMODEM-CRC。還有一種是XMODEM-1K,它以1024字節一塊來傳輸數據。ZMODEM是最有效的一個XMODEM版本,它不需要對每個塊都進行認可。事實上,它只是簡單地要求對損壞的塊進行重發。ZMODEM對按塊收費的分組交換網絡是非常有用的。不需要認可回送分組在很大程度上減少了通信量。
YMODEM也是一種XMODEM的實現。它包括XMODEM-1K的所有特徵,另外在一次單一會話期間爲發送一組文件,增加了批處理文件傳輸模式。
Xmodem 協議 [ 2006-3-4 16:32:37 | Author: job ]
/*
XMODEM transfer protocol
-----------------------------------------
author: christensen
2004-3-25 10:08
noted: Job Nelson
*/
1。 幀格式
__________________________________________________
| | | | | |
| SOH | 信息包序號 | 信息包序號的補碼 | 數據區段 | 算術校驗和 |
|_____|________ _|________________|________|__________|
說明:
SOH 幀的開頭字節,代表信息包中的第一個字節
信息包序號: 對 256 取模所得到當前包號,第一個信息包的序號爲 1
而信息包序號範圍 0~255
信息包序號的補碼: 當前信息包號的補碼
數據區段: 數據區段的長度固定爲 128 字節,其內容沒有任何限制,可以是
文本數據或二進制數據
算術校驗和: 1字節的算術校驗和,只對數據區段計算後對 256 取模而得
2。 傳輸邏輯
1> 收發雙方撥號連通後,發送方等待接收方傳來 NAK 信號。當第一個 NAK 到達,
發送方解釋爲 開始發送第一個包
2> 發送方一旦收到第一個 NAK ,啓動了傳輸,發送方就將數據以每次 128 字節
打包成幀格式傳送,再等待接收方的確認信號
3> 發送方收到接收方傳來的 ACK 信號,解釋爲信息包被正確接收,並有發送下一
個包的含義
4> 發送方收到接收方傳來的 NAK 信號,解釋爲請求重發同一數據包
5> 發送方收到接收方傳來的 CAN 信號,解釋爲請求無條件停止傳輸過程
6> 發送方正常傳輸完全部數據,需要正常結束,發送 EOT 信號通知接收方。接收
方用 ACK 進行確認
7> 接收方發送 CAN 無條件停止傳輸過程,發送方收到 CAN 後,不發送 EOT 確認
8> 雖然信息包是以 SOH 來標誌一個信息包的起始的,但在 SOH 位置上出現的 EOT
則表示數據傳輸結束,再也沒有數據傳過來
9> 接收方首先應確認信息包序號的完整性,通過對信息包序號取補,然後和信息包
序號的補碼異或,結果爲 0 表示正確,結果不爲 0 則發送 NAK 請求重傳
10> 接收方確認信息包序號正確後,然後檢查是否期望的序號。如果不是期望得到的
信息包序號,說明發生嚴重錯誤,應該發送一個 CAN 來中止傳輸
11> 對於10>情況的唯一例外,是收到的包的信息包序號與前一個信息包序號相同,
此中情況,接收方簡單忽略這個重複的包,向發送方發出 ACK ,準備接收下一個包
12> 接收方確認了信息包序號的完整性和是正確期望的後,只對 512 字節的數據區段
進行算術和校驗,結果與幀中最後一個字節(算術校驗和)比較,相同 發送 ACK,
不同發送 NAK
3。 超時處理
1> 接收方等待一個信息包的到來所具有的超時時限爲 10 秒,每個超時後發送 NAK
2> 當收到包時,接收過程中每個字符的超時間隔爲 1 秒
3> 爲保持“接收方驅動”,發送方在等待一個啓動字節時不應該採用超時處理
4> 一旦傳輸開始,發送方採用單獨的 1 分鐘超時時限,給接收方充足的時間做發送
ACK ,NAK ,CAN 之前的必須處理
5> 所有的超時及錯誤事件至少重試 10 次
4。 控制字符
控制字符符合 ASICII 標準定義,長度均爲 1 字節
SOH 0x01
EOT 0x04
ACK 0x06
NAK 0x15
CAN 0x18
這是 Xmodem 協議的最基本的一個版本,在其上還有 Xmode-1K 這樣的擴展,加大了傳輸封包的大小(1K),用來提高傳輸速率;增加了 CRC 校驗,用來提高傳輸的可靠性;區別在於:當啓用 Xmodem 時,接收方發送 C 字符。發送方收到 C 字符判定爲採用 Xmodem-1K 擴展;否則,當超時後,按照基本的版本傳輸。
未完待續~~