风险投资基金邮箱:Xmodem说明书

来源:百度文库 编辑:九乡新闻网 时间:2024/09/21 11:18:31

1.1.    Xmodem简介

FTP即File Transfer Protocol的缩写,串行通信的文件传输协议主要有:Xmodem、Ymodem、Zmodem和KERMIT等。

  

Xmodem 协议一般支持128 字节的数据包,并且支持累加和校验、CRC 两种校验方式,在出现数据包错误的情况下支持多次重传(一般为10次)。Xmodem 协议传输由接收程序和发送程序完成。先由接收端发送协商字符,协商校验方式,协商通过之后发送端就开始发送数据包,接收程序接收到完整的一个数据包之后按照协商的方式对数据包进行校验。校验通过之后发送确认字符,然后发送程序继续发送下一包;如果校验失败,则发送否认字符,发送程序重传此数据包。

 

1.2.    Xmodem协议

1.2.1.相关说明

1>   控制字符定义:

SOH 0x01

         EOT       0x04

         ACK       0x06

         NAK       0x15

         CAN       0x18

2>   UART格式: Asynchronous(异步)、8Bit data (8Bit数据)、no

parity(无校验)、one stop bit(1个停止位)

1.2.2.协议简介

   Xmodem协议是由Ward Chritensen于70年代提出并实现的,传输数据单位为信息包,包含一个标题开始字符,一个单字节包序号,一个包序号的补码,128个字节数据和一个单字节的校验和。它把数据划分成128个字符的小包进行发送,每发送一个小包都要检查是否正确,如果信息包正确接收方发送一个字节的应答;有错重发则发送一个字节应答,要求重发。因此Xmodem是一种发送等待协议,具有流量控制功能。优点:简单通用,几乎所有通信软件都支持该协议。缺点:慢。检验和信息包格式如图1-1所示。

 

Byte1

Byte2

Byte3

Byte4--131

Byte132

Start of Hearder

Package Number

~(Package Number)

Package Data

Check Sum

图1-1校验和信息包格式

               

    Xmodem协议的数据包格式在90年代经过一次修改,传输数据单位仍为信息包,包含一个标题开始字符SOH,一个单字节包序号,一个包序号的补码,128个字节数据和一个双字节的CRC16校验。所以新的协议格式信息包如图1-2所示。

Byte1

Byte2

Byte3

Byte4--131

Byte132--133

Start of Hearder

Package Number

~(Package Number)

Package Data

16-Bit CRC

图1-2 CRC校验信息包格式

      1.2.3. 校验和信息包

1>  信息包校验和

<255-blk #><--128 databytes-->

其中:

        =01hex

 =信息包序号,从 01开始以发送一包将加1,加到FF hex将循环。

<255-blk #>  =信息包序号的补码。

    =保留字节,丢掉进位的和校验。

2>  校验和方式数据传输流程

接收方要求发送方以校验和方式发送时以NAK来请求,发送方将对此做出应答。如表1-1所示传输5包数据的示意过程。

Sender

Flow

Receiver

 

ß

NAK

 

 

Time out after 3 Second

 

ß

NAK

SOH|0X01|0XFE|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

SOH|0X02|0XFD|DATA[0--127]|CHKSUM

à

Line hit during transmission

 

ß

NAK

SOH|0X02|0XFD|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

SOH|0X03|0XFC|DATA[0--127]|CHKSUM

à

Packed Ok

ACK get garbaged

ß

ACK

SOH|0X03|0XFC|DATA[0--127]|CHKSUM

à

Duplicate Packed

 

ß

NAK

SOH|0X04|0XFB|DATA[0--127]|CHKSUM

à

Uart Framing err on any byte

 

ß

NAK

SOH|0X04|0XFB|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

SOH|0X05|0XFA|DATA[0--127]|CHKSUM

à

UART Overrun err on any byte

 

ß

NAK

SOH|0X05|0XFA|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

EOT

à

Packed Ok

ACK get garbaged

ß

ACK

EOT

à

Packed Ok

Finished

ß

ACK

表1-1 校验和数据传输过程

1.2.4.CRC校验信息包

1CRC校验信息包

<255-blk #><--128 databytes-->其中:

        =01 hex

 = 信息包序号,从 01开始以发送一包将加1,加到FF hex将循环。

<255-blk #>  = 信息包序号的补码。

        = CRC16高字节。

    = CRC16低字节。

2、CRC描述

计算16-BitCRC校验的除数多项式为X^16 + X^12 + X^5 + 1,信息包中的128数据字节将参加CRC校验的计算。在发送端CRC16的高字节在先,低字节在后。

如表1-2所示传输3包数据的示意过程。

Sender

Flow

Receiver

 

ß

‘C’

 

 

Time out after 3 Second

 

ß

‘C’

SOH|0X01|0XFE|DATA[0--127]|CRC16

à

Packed Ok

 

ß

ACK

SOH|0X02|0XFD|DATA[0--127]|CRC16

à

Line hit during transmission

 

ß

NAK

SOH|0X02|0XFD|DATA[0--127]|CRC16

à

Packed Ok

 

ß

ACK

SOH|0X03|0XFC|DATA[0--127]|CRC16

à

Packed Ok

 

ß

ACK

EOT

à

Packed Ok

ACK get garbaged

ß

ACK

EOT

à

Packed Ok

Finished

ß

ACK

表1-2 CRC校验数据传输过程

3CRC校验方式数据传输流程

接收方要求发送方以CRC校验方式发送时以‘C’来请求,发送方将对此做出应答。

4、在发送方仅支持校验和传输方式时,就应对其请求NAK,要求以CheckSum的校验方式来发送数据,如表1-1所示过程。如果发送方仅仅支持CRC校验的传输方式,应以’C’来请求发送,如表1-2所示过程。如果两者都支持的话,将优先以’C’来请求发送。所以接收程序的实现过程将如表1-3所示。

Sender

Flow

Receiver

 

ß

‘C’

 

 

Time out after 3 Second

 

ß

NAK

 

 

Time out after 3 Second

 

ß

‘C’

 

 

Time out after 3 Second

 

ß

NAK

SOH|0X01|0XFE|DATA[0--127]|CHKSUM

à

   

 

ß

ACK

SOH|0X02|0XFD|DATA[0--127]|CHKSUM

à

Line hit during transmission

 

ß

NAK

SOH|0X02|0XFD|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

SOH|0X03|0XFC|DATA[0--127]|CHKSUM

à

Packed Ok

 

ß

ACK

EOT

à

Packed Ok

ACK get garbaged

ß

ACK

EOT

à

Packed Ok

Finished

ß

ACK

5信息包中如果剩余的数据不足128-Byte信息包的格式为:

【SOH 04 0xFB Data[100] CPMEOF[28] CRC CRC】,不足的CPMEOF[28]将以0x1A(^Z)填充。