XModem用在串口異步傳文件:

1 #define SOH 0x01 2 #define STX 0x02 3 #define EOT 0x04 4 #define ACK 0x06 5 #define NAK 0x15 6 #define CAN 0x18 7 #define CTRLZ 0x1A
標准Xmodem協議(每個數據包含有128字節數據)幀格
Xmodem包格式
Byte1 Byte2 Byte3 Byte4~131 Byte132~133
Start Of Header(SOH/STX) Packet NumberID ~(Packet NumberID) Packet Data 16-Bit CRC
0 發送發每次以128字節的幀結構發送,不足128字節則要用CTRLZ填充,每發送一次都要接收從機端回應的信息,因此效率較低,已經廢棄:
1 如果正確發下一包則ACK,錯誤重發則NACK;強制停止則<CAN>,主機不需要發送<EOT>確認
2 發送方發送完成則發送方發送<EOT>通知接收方。接收方回以<ACK>進行確認;
3 啟動發送由從機發起,'C'表示進行CRC16校驗,NAK表示進行累加和校驗。校驗先CRCH后 CRCL
Ymodem:
YModem協議是XModem的改進協議,快速(一次傳輸1024字節的信息塊,同時它還支持批文件傳輸),傳輸穩定。YModem分成YModem-1K(數據塊1K,幀頭STX,用的較多)與YModem-g(去掉CRC,不等待ACK所以速度快)
YModem的采用的是CRC16-CCITT歐洲版本的CRC校驗,它的生成多項式為:x16+x12+x5+1
1、起始幀的數據格式:
SOH 00 FF filename[多加00作為結束 ] filezise[多加00作為結束 ] NUL[表示剩余以00填充 ] CRCH CRCL
如果文件大小小於1024則
SOH 01 FE data[,1A ...1A ] CRCH CRCL
2、數據幀的數據格式:
STX 01 FE data[1024] CRCH CRCL
剩余128~1024則:不足1024的用1A填充: STX [Index] [~index] data[,1A ...1A ] CRCH CRCL
剩余0~18則:不足128的用1A填充: SOH [num] [~~num] data[ ,1A...1A] CRCH CRCL
3、結束幀數據結構:
SOH 00 FF NUL[128個00] CRCH CRCL
eg:j將文件名為foo.c,大小為4196Byte(16進制為0x1064)的文件作為傳輸的過程:sizeof("foo.c")=6;sizeof("1064")=5;
ZMODEM:精華在於實現了類似於TCP在保持一個可靠連接的同時,采用滑窗技術避免過長的確認信息等待,從而提高傳輸速度。其他特點還包括發送方自動發送、自動重傳;串流式(streaming)傳輸方式,傳輸速度較快,而且還具有自動改變區段大小和斷點續傳、快速錯誤偵測等功能,secureCRT中集成了一個zmodem協議.