分享

Ymodem协议要点

 xingwangjy 2020-04-28

1.写在前面

  在进行文件传输时,为使文件能被正确识别和传送,需要在两台计算机之间建立统一的传输协议,协议需要包括了文件的识别、传送的起止时间、错误的判断与纠正等内容。常用的文件传输协议有:

【1】ASCII:传输速度快最快,但只能传送文本文件。

【2】Xmodem:协议古老悠久,传输速度较慢,采用了CRC校验算法,传输的准确率可高达99.6%;每次传输信息块为128字节。

【3】Ymodem:Ymodem是Xmodem的改进版,每次传输信息块最大1024字节,速度比Xmodem快;同时还支持传输多个文件。

【4】Zmodem:Zmodem采用了串流式(streaming)传输方式,传输速度较快,而且还具有自动改变区段大小和断点续传、快速错误侦测等功能。Zmodem目前最流行的文件传输协议。

  Ymodem协议用于计算机间传输文件,同样适用于嵌入式领域,如MCU升级固件时,可以使用Ymodem协议传输固件文件,传输总线不限于USB、UART、CAN等。

2.Ymodem 帧格式

  Ymodem 有两种帧格式,主要区别是信息块长度不一样。

名称 帧头 包号 包号反码 信息块 校验

简写        SOH/STX     PN XPN        DATA    CRC

字节数     1             1            1        1024/128       2

2.1 帧头

  帧头表示两种数据帧长度,主要是信息块长度不同。

帧头                 SOH(0x01)     STX(0x02)

信息块长度 128字节              1024字节

2.2 包序号

  数据包序号只有1字节,因此计算范围是0~255;对于数据包大于255的,序号归零重复计算。

2.3 帧长度

【1】以SOH(0x01)开始的数据包,信息块是128字节,该类型帧总长度为133字节。

【2】以STX(0x02)开始的数据包,信息块是1024字节,该类型帧总长度为1029字节。

2.4 校验

  Ymodem采用的是CRC16校验算法,校验值为2字节,传输时CRC高八位在前,低八位在后;CRC计算数据为信息块数据,不包含帧头、包号、包号反码。

3.Ymodem握手信号

  握手信号由接收方发起,在发送方开始传输文件前,接收方需发送YMODEM_C (字符C,ASII码为0x43)命令,发送方收到后,开始传输起始帧。

4.Ymodem起始帧

  Ymodem起始帧并不直接传输文件内容,而是先将文件名和文件大小置于数据帧中传输;起始帧是以SOH 133字节长度帧传输,格式如下。

帧头  包号   包号反码    文件名称           文件大小          填充区         校验高位     校验低位

SOH   0x00   0xff   File name+0x00   File size+0x00  NULL(0x00) CRC-H    CRC-L

  其中包号为固定为0;Filename为文件名称,文件名称后必须加0x00作为结束;Filesize为文件大小值,文件大小值后必须加0x00作为结束;余下未满128字节数据区域,则以0x00填充。

5.Ymodem数据帧

  Ymodem数据帧传输,在信息块填充有效数据。

帧头          包号 包号反码   有效数据 校验高位    校验低位

SOH/STX  PN          XPN    DATA          CRC-H      CRC-L

  传输有效数据时主要考虑的是最后一包数据的是处理,SOH帧和STR帧有不同的处理。

【1】对于SOH帧,若余下数据小于128字节,则以0x1A填充,该帧长度仍为133字节。

【2】对于STX帧需考虑几种情况:

  ●余下数据等于1024字节,以1029长度帧发送;

  ●余下数据小于1024字节,但大于128字节,以1029字节帧长度发送,无效数据以0x1A填充。

  ●余下数据等于128字节,以133字节帧长度发送。

  ●余下数据小于128字节,以133字节帧长度发送,无效数据以0x1A填充。

6.Ymodem结束帧

  Ymodem的结束帧采用SOH 133字节长度帧传输,该帧不携带数据(空包),即数据区、校验都以0x00填充。

帧头          包号 包号反码       数据区 校验高位       校验低位

SOH  0x00 0xff               0x00           0x00        0x00

7.Ymodem命令

命令 命令码 备注

YMODEM_SOH 0x01 133字节长度帧

YMODEM_STX         0x02 1024字节长度帧

YMODEM_EOT 0x04 文件传输结束命令

YMODEM_ACK 0x06 接收正确应答命令

YMODEM_NAK 0x15 重传当前数据包请求命令

YMODEM_CAN 0x18 取消传输命令,连续发送5个该命令

YMODEM_C         0x43 字符C

————————————————

版权声明:本文为CSDN博主「Acuity.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_20553613/article/details/88881227

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多