天天看點

野火序列槽助手協定發送檔案通訊協定——XMODEM協定——YMODEM協定野火序列槽助手協定發送檔案通訊協定XMODEM協定YMODEM協定

野火序列槽助手協定發送檔案通訊協定

修訂曆史

日期 版本 更新内容
2020/6/22 0.0.1 首次釋出

XMODEM協定

上位機是現實了XModem-CRC16和XModem-1K;

  • XModem-CRC16使用CRC-16校驗方式,資料長度為128位元組
  • XModem-1K使用CRC-16校驗方式,資料長度為1024位元組

XModem協定字段定義

縮寫 十六進制 含義
SOH 0x01 資料包的大小為 128 bytes
STX 0x02 資料包的大小為 1024 bytes
EOT 0x04 傳輸結束
ACK 0x06 應答
NAK 0x15 非應答
CAN 0x18 取消
C 0x43 啟動傳輸

XModem協定格式詳解

XModem-CRC16

在XModem-CRC16的資料幀中使用128位元組空間用來傳輸檔案資料,幀格式如下:

協定頭 幀序号 幀序号補碼 資料 CRC高8位 CRC低8位
SOH 0x01 0xFE data[128] CRCH CRCL
  • 協定頭:SOH=0x01,表示這個資料幀包含128個位元組資料;
  • 幀序号、幀序号補碼:0x01是表示幀序号,0xFE是它的取反,再下一幀資料就是0x02 0xFD,以此類推;
  • 資料:存放了128位元組的檔案資料;
  • CRC高8位:CRC-16校驗資料的高8位;
  • CRC低8位:CRC-16校驗資料的低8位;

如果最後一幀剩餘的資料小于128位元組,則剩餘空間全部用0x1A(Ctrl-Z)填充;

XModem-1K

在XModem-1K的資料幀中使用1024位元組空間用來傳輸檔案資料,幀格式如下:

協定頭 幀序号 幀序号補碼 資料 CRC高8位 CRC低8位
STX 0x01 0xFE data[1024] CRCH CRCL
  • 協定頭:STX=0x02,表示這個資料幀包含1024個位元組資料;
  • 幀序号、幀序号補碼:0x01是表示幀序号,0xFE是它的取反,再下一幀資料就是0x02 0xFD,以此類推;
  • 資料:存放了1024個位元組的檔案資料;
  • CRC高8位:CRC-16校驗資料的高8位;
  • CRC低8位:CRC-16校驗資料的低8位;

如果最後一幀剩餘的資料小于1024位元組,則剩餘空間全部用0x1A(Ctrl-Z)填充;

XModem-CRC16檔案傳輸示例

下面以傳輸一個檔案為例來具體說明XModem檔案傳輸過程。

  • 檔案名為:foo.c,檔案大小為:356位元組;
序号 發送方 接收方
1 - C
2 STX 0x01 0xFE Data[128] CRC CRC -
3 - ACK
4 STX 0x02 0xFC Data[128] CRC CRC -
5 - NAK
6 STX 0x02 0xFC Data[128] CRC CRC -
7 - ACK
8 SOH 0x03 0xFB Data[100] CPMEOF[28] CRC CRC -
9 - ACK
10 EOT -
11 - ACK
  1. 接收方發送C(這裡C是告訴發送方我們要使用CRC-16的校驗方式)給發送方,告訴發送方可以開始傳輸資料了,然後發送方就會發送檔案資料給接收方了;
  2. 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
  3. 當檔案傳輸完成後,發送方會發送EOT,表示檔案發送完了,接收方傳回ACK表示檔案正式傳輸完成;

注意: 如果接收方不能接收檔案後,可以發送CAN給發送方來取消檔案傳輸。

XModem-1K檔案傳輸示例

下面以傳輸一個檔案為例來具體說明XModem檔案傳輸過程。

  • 檔案名為:foo.c,檔案大小為:3048位元組;
序号 發送方 接收方
1 - C
2 STX 0x01 0xFE Data[1024] CRC CRC -
3 - ACK
4 STX 0x02 0xFC Data[1024] CRC CRC -
5 - NAK
6 STX 0x02 0xFC Data[1024] CRC CRC -
7 - ACK
8 STX 0x03 0xFB Data[1000] CPMEOF[24] CRC CRC -
9 - ACK
10 EOT -
11 - ACK
  1. 接收方發送C(這裡C是告訴發送方我們要使用CRC-16的校驗方式)給發送方,告訴發送方可以開始傳輸資料了,然後發送方就會發送檔案資料給接收方了;
  2. 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
  3. 當檔案傳輸完成後,發送方會發送EOT,表示檔案發送完了,接收方傳回ACK表示檔案正式傳輸完成;

注意: 如果接收方不能接收檔案後,可以發送CAN給發送方來取消檔案傳輸。

YMODEM協定

YModem是XModem的更新版協定,兩者最大的差別是YModem可以支援傳輸多個檔案。

通常所說的YModem協定是指的YModem-1K,除此之外還有YModem-G,YModem-G 無需無錯誤通道的認可或當數據機自糾錯時就可傳送,但是一旦出現錯誤傳送就會取消。,上位機沒有實作這協定。

YModem協定字段定義

縮寫 十六進制 含義
SOH 0x01 資料包的大小為 128 bytes
STX 0x02 資料包的大小為 1024 bytes
EOT 0x04 傳輸結束
ACK 0x06 應答
NAK 0x15 非應答
CAN 0x18 取消
C 0x43 啟動傳輸

YModem協定格式詳解

1.起始幀的資料格式

幀長=3位元組資料首部+128位元組資料+2位元組CRC16校驗碼=133位元組。它的資料結構如下:

協定頭 幀序号 幀序号補碼 檔案名 檔案大小 CRC高8位 CRC低8位
SOH 0x00 0xFF filename filezise NUL CRCH CRCL
  • 協定頭:SOH=0x01,表示這個資料幀包含128個位元組資料;
  • 幀序号、幀序号補碼:表示傳輸的幀數,大于0xFF後從0x00重新開始,補碼是了為了確定傳輸的正确性;
  • 檔案名:要傳輸的檔案名,以’\0’結束;
  • 檔案大小:要傳輸的檔案大小,用字元串表示,緊跟在檔案名後面,例如要傳輸1234個位元組的檔案,那麼就是:0x31 0x32 0x33 0x34 0x00;
  • 空:除去檔案名和檔案大小,剩下的資料使用0填充;
  • CRC高8位:CRC-16校驗資料的高8位
  • CRC低8位:CRC-16校驗資料的低8位

2.資料幀的資料格式

在YModem的資料幀中使用1024位元組空間用來傳輸檔案資料,它跟起始幀格式差不多,如下:

協定頭 幀序号 幀序号補碼 資料 CRC高8位 CRC低8位
STX 0x01 0xFE data[1024] CRCH CRCL
  • 協定頭:STX=0x02,表示這個資料幀包含1024個位元組資料;
  • 幀序号、幀序号補碼:0x01是表示幀序号,0xFE是它的取反,再下一幀資料就是0x02 0xFD,以此類推;
  • 資料:存放了1024個位元組的檔案資料;
  • CRC高8位:CRC-16校驗資料的高8位;
  • CRC低8位:CRC-16校驗資料的低8位;

檔案的最後一幀分三種特殊情況:

  1. 最後一幀剩餘的資料大于128位元組:使用STX的1024位元組傳輸,但是剩餘空間全部用0x1A(Ctrl-Z)填充;
  2. 最後一幀剩餘的資料等于128位元組:使用SOH的128位元組傳輸;
  3. 最後一幀剩餘的資料小于128位元組:使用SOH的128位元組傳輸,但是剩餘空間全部用0x1A(Ctrl-Z)填充;

3.結束幀資料結構

YModem的結束幀資料也采用SOH的128位元組資料幀,它的結構如下:

協定頭 幀序号 幀序号補碼 資料 CRC高8位 CRC低8位
SOH 0x00 0xFF NUL[128] CRCH CRCL

結束幀以SOH開頭,表示後面資料大小為128位元組,但128位元組的資料部分不存放任何資訊,即全部用00填充;結束幀的幀序号也認為是0x00 0xFF。

YModem檔案傳輸示例

下面以傳輸兩個檔案為例來具體說明YModem檔案傳輸過程。

  • 第一個檔案名為:foo.c,檔案大小為:2148位元組;
  • 第二個檔案名為:b.c,檔案大小為:2024位元組。
序号 發送方 接收方
1 C
2 SOH 0x00 0xFF [0x66…0x63] 0x00 [0x32…0x38] 0x00 NUL[117] CRC CRC -
3 - ACK
4 - C
5 STX 0x01 0xFE Data[1024] CRC CRC -
6 - ACK
7 STX 0x02 0xFC Data[1024] CRC CRC -
8 - NAK
9 STX 0x02 0xFC Data[1024] CRC CRC -
10 - ACK
11 SOH 0x03 0xFB Data[100] CPMEOF[28] CRC CRC -
12 - ACK
13 EOT -
14 - NAK
15 EOT -
16 - ACK
17 - C
18 SOH 0x00 0xFF 0x62 0x2E 0x63 0x00 [0x32…0x34] 0x00 NUL[119] CRC CRC -
19 - ACK
20 - C
21 STX 0x01 0xFB Data[1024] CRC CRC -
22 - ACK
23 STX 0x01 0xFB Data[1000] CPMEOF[24] CRC CRC -
24 - ACK
25 EOT -
26 - NAK
27 EOT -
28 - ACK
29 - C
30 SOH 0x00 0xFF NUL[128] CRC CRC -
31 - ACK
  1. 接收方發送C給發送方,告訴發送方可以開始傳輸資料了,接收方第一次收到C後會傳輸檔案名和檔案大小資訊;
  2. 接收方在次發送C給發送方後,就正式開始檔案内容的傳輸了;
  3. 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
  4. 當檔案傳輸完成後,發送會發送EOT,接收方第一次收到EOT時應放回NAK,如果再次收到EOT,則傳回ACK,這樣做的目的是確定檔案傳輸結束了,而不是其他幹擾資料;
  5. 接收方接收完一個檔案後,再次發送C給發送方,如果發送方還有待發送的檔案,則會發送帶有檔案名和大小的SOH幀;如果發送方沒有待發送的檔案,則會發送SOH資料幀,其中128位元組資料都是0x00。

注意: 如果接收方不能接收檔案後,可以發送CAN給發送方來取消檔案傳輸。

野火大學堂——(敲黑闆)這是重點,要考的

【野火大學堂】簡介

野火序列槽助手協定發送檔案通訊協定——XMODEM協定——YMODEM協定野火序列槽助手協定發送檔案通訊協定XMODEM協定YMODEM協定

野火大學堂是一個電腦用戶端,主要用來友善使用者下載下傳野火所有産品的資料,是一款集資料下載下傳,線上文檔,線上視訊和資料更新推送于一體的軟體,

免費登入,下載下傳速度快過百度雲。以後野火的資料釋出和更新主要是通過野火大學堂來完成。

以後嵌入式學習,不妨來【野火大學堂】看看,stm32,rt1052,linux,fpga,freertos,rt-thread,ucos,liteos,emwin,emxgui,lwip等資料應有盡有,一站式學習,省時又省力。

【野火大學堂】下載下傳位址(複制至浏覽器打開)

  • 下載下傳位址1:http://t.cn/A6w7JiKs (境外,sourceforge)
  • 下載下傳位址2:https://cloud.embedfire.com/software/FireClass/package/FireClass-Installer-x64-v1.0.2.4.exe
  • 下載下傳位址3:https://pan.baidu.com/s/1N6ODCAO4i2x8rXXOLMJm4Q 提取碼:hn4w(百度雲下載下傳)

【野火大學堂】登入方式

  1. 微信:手機微信掃碼登入(推薦);
  2. 野火論壇:論壇帳号登入,沒有帳号的可以先到野火論壇www.firebbs.cn先注冊個帳号(推薦);
  3. QQ:要想使用QQ掃碼登入,必須先綁定論壇帳号,如果沒有論壇帳号的可以先到野火論壇www.firebbs.cn先注冊個帳号,并将論壇帳号與QQ綁定;
  4. Github:Gitbub帳号登入。

繼續閱讀