野火序列槽助手協定發送檔案通訊協定
修訂曆史
日期 | 版本 | 更新内容 |
---|---|---|
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 |
- 接收方發送C(這裡C是告訴發送方我們要使用CRC-16的校驗方式)給發送方,告訴發送方可以開始傳輸資料了,然後發送方就會發送檔案資料給接收方了;
- 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
- 當檔案傳輸完成後,發送方會發送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 |
- 接收方發送C(這裡C是告訴發送方我們要使用CRC-16的校驗方式)給發送方,告訴發送方可以開始傳輸資料了,然後發送方就會發送檔案資料給接收方了;
- 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
- 當檔案傳輸完成後,發送方會發送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位;
檔案的最後一幀分三種特殊情況:
- 最後一幀剩餘的資料大于128位元組:使用STX的1024位元組傳輸,但是剩餘空間全部用0x1A(Ctrl-Z)填充;
- 最後一幀剩餘的資料等于128位元組:使用SOH的128位元組傳輸;
- 最後一幀剩餘的資料小于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 |
- 接收方發送C給發送方,告訴發送方可以開始傳輸資料了,接收方第一次收到C後會傳輸檔案名和檔案大小資訊;
- 接收方在次發送C給發送方後,就正式開始檔案内容的傳輸了;
- 當接收方到正确的資料後傳回ACK,不正确時傳回NAK,此時發送方将會重新發送上一次的資料;
- 當檔案傳輸完成後,發送會發送EOT,接收方第一次收到EOT時應放回NAK,如果再次收到EOT,則傳回ACK,這樣做的目的是確定檔案傳輸結束了,而不是其他幹擾資料;
- 接收方接收完一個檔案後,再次發送C給發送方,如果發送方還有待發送的檔案,則會發送帶有檔案名和大小的SOH幀;如果發送方沒有待發送的檔案,則會發送SOH資料幀,其中128位元組資料都是0x00。
注意: 如果接收方不能接收檔案後,可以發送CAN給發送方來取消檔案傳輸。
野火大學堂——(敲黑闆)這是重點,要考的
【野火大學堂】簡介
野火大學堂是一個電腦用戶端,主要用來友善使用者下載下傳野火所有産品的資料,是一款集資料下載下傳,線上文檔,線上視訊和資料更新推送于一體的軟體,
免費登入,下載下傳速度快過百度雲。以後野火的資料釋出和更新主要是通過野火大學堂來完成。
以後嵌入式學習,不妨來【野火大學堂】看看,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(百度雲下載下傳)
【野火大學堂】登入方式
- 微信:手機微信掃碼登入(推薦);
- 野火論壇:論壇帳号登入,沒有帳号的可以先到野火論壇www.firebbs.cn先注冊個帳号(推薦);
- QQ:要想使用QQ掃碼登入,必須先綁定論壇帳号,如果沒有論壇帳号的可以先到野火論壇www.firebbs.cn先注冊個帳号,并将論壇帳号與QQ綁定;
- Github:Gitbub帳号登入。