• Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议


    Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议

    1.Xmodem协议是最早的,传输128字节信息块。是一种发送等待协议,具有流量控制功能。收、发方均采用包传送。每个包由包头、数据、包尾组成。
    包头:包开始(SOH),包编号和包编号补码;
    数据:固定的128字节;
    包尾:存放校验和checksum。

    2.Ymodem协议是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。
    Ymodem协议指的就是Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。
    Ymodem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送会使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收回应后,才会继续传输下一个信息块,保证数据已经全部接收。
    YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议,支持16位CRC校验

    3.Zmodem协议是针对modem的一种错误校验协议。利用Zmodem协议,可以在modem上发送512字节的数据块。如果某个数据块发生错误,接收端会发送“否认”应答,因此,数据块就会被重传。
    它是Xmodem文件传输协议的一种增强形式,不仅能传输更大的数据。而且错误率小。包含一种名为检查点重启的特性,如果通信链接在数据传输过程中中断,能从断点处而不是从开始处恢复传输。

    Ymodem协议常用字符

    字符ASCII码16进制
    SOH0x01
    STX0x02
    ACK0x06
    NAK0x15
    EOT0x04
    C0x43

    Ymodem协议的传输过程:
    (这个协议常用于文件传输,比如在线升级过程中传输的bin文件或者传输一些码库文件。
    在Xshell软件中的串口传输过程中就有这种传输方式)
    1.起始帧的数据格式
    Ymodem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输。
    帧长 = 3字节数据首部+ 128字节数据+2字节CRC16位校验码=133字节
    数据格式如下:
    SOH + 00 + FF + filename + filesize + NULL + CRCH + CRCL
    起始帧是文件传输发送端发的第一条重要消息
    其中:
    SOH = 0x01 表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);
    00表示数据帧序号,初始是00依次向下排;
    FF表示帧序号的取反;
    filename表示要传输的文件名;
    filesize表示文件的大小;
    NULL表示数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充;
    CRCH和CRCL分别表示16位CRC校验码的高8位和低8位(注意是整条帧去掉前三个字节的CRC校验)
    2.数据帧的数据结构
    YModem的数据帧中会预留1024字节空间用来传输文件数据
    数据格式如下:
    STX/SOH + [编号] + 编号的反码 + data[0] + data[1] + data[2] + … + CRCH + CRCL
    STX 01 FE data[1024] CRCH CRCL
    其中:
    STX = 0x02 表示这帧数据后面包含着1024字节的数据部分;
    01表示帧序号,FF表示帧取反;再下一帧就是02 FD依次类推;
    data[1024]表示存放着1024字节的文件数据;
    CRCH+CRCL 表示整条帧(去掉前三个字节)的CRC16校验。
    注意:
    (如果最后一条数据的大小在128~1024字节之间,则还使用STX的1024字节传输,剩余空间全部用0x1A填充)
    (如果最后一条数据的大小小于128字节,则用SOH的128字节传输,剩余空间全部用0x1A填充)

    例如:
    STX 01 FE data[1024] CRCH CRC
    STX 02 FD data[1024] CRCH CRC
    STX 03 FC data[1024] CRC CRC
    STX 04 FB data[1024] CRC CRC
    SOH 05 FA data[100] 1A[28] CRC CRC

    3.结束帧的数据结构
    YModem的结束帧数据也采用SOH的128字节数据帧
    数据格式如下:
    SOH + 00 + FF + NULL[128] + CRCH + CRCL
    其中:
    SOH = 0x01 表示这个数据帧中包含着128个字节的数据(结束帧只有128个);
    结束帧的帧序也是00 FF;
    结束帧的128字节的数据部分不存放任何信息,即全部用00填充;
    CRCH+CRCL 表示整条帧(去掉前三个字节)的CRC16校验。

    传输过程:

    在这里插入图片描述

  • 相关阅读:
    摩尔纹是什么?如何消除摩尔纹?
    如何使用Python构建OTP验证系统?
    python “groupby” 操作实践之格式化输出星期字符串
    物联网AI MicroPython学习之语法 umqtt客户端
    逆向第一课---安装ADB工具,并使用夜神模拟器连接
    泛型的理解和好处
    jdbc 技术执行 insert 后获取自增列的值,插入操作时获取自增列的值
    随机森林(RandomForestClassifier)----概述与应用
    【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)
    Java中的Thread 类中的 yield 方法
  • 原文地址:https://blog.csdn.net/qq_45844792/article/details/125910528