XModem与YModem

时间:2023-03-08 19:49:26

XModem用在串口异步传文件:

 #define SOH 0x01
#define STX 0x02
#define EOT 0x04
#define ACK 0x06
#define NAK 0x15
#define CAN 0x18
#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;

XModem与YModem

ZMODEM:精华在于实现了类似于TCP在保持一个可靠连接的同时,采用滑窗技术避免过长的确认信息等待,从而提高传输速度。其他特点还包括发送方自动发送、自动重传;串流式(streaming)传输方式,传输速度较快,而且还具有自动改变区段大小和断点续传、快速错误侦测等功能,secureCRT中集成了一个zmodem协议.

XModem与YModem