zoukankan      html  css  js  c++  java
  • Ymodem协议详解

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

    Xmodem协议是最早的,传输128字节信息块。

    Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。

    平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。

    YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送回使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。

    1.起始帧的数据格式

    YModem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输,它的帧长=3字节数据首部+128字节数据+2字节CRC16校验码=133字节。它的数据结构如下:

    SOH 00 FF  filename  filezise NUL  CRCH CRCL

    其中SOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个),00表示数据帧序号,初始是0,依次向下排,FF是帧序号的取反,filename是要传输的文件名,如USTB_V3_1.0.1.26_NMEA.Bin,它在数据帧中的格式为:55 53 54 42 5F 56 33 5F 31 2E 30 2E 31 2E 32 36 5F 4E 4D 45 41 2E 42 69 6E 00,也就是把ASCII码转成十六进制,但是最后一定要在文件名后加上00,表示文件名的结束;filesize表示文件的大小,如上面的USTB_V3_1.0.1.26_NMEA.Bin大小是132KB,也就是135168Byte,转换成十六进制就是0x21000,它在数据帧中的格式就是32 31 30 30 30 00,也就是ASCII的“21000”,同样最后要加上00表示结束,NUL就是数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充,CRCH和CRCL分别表示16位CRC校验码的高8位与低8位。
    2.数据帧的数据格式

    YModem的数据帧中会预留1024字节空间用来传输文件数据,它跟起始帧接收差不多,如下:

    STX 01 FEdata[1024] CRCH CRCL

    其中STX=0x02,表示这帧数据帧后面包含着1024字节的数据部分;01是表示帧序号,FE是它的取反,再下一帧数据就是02 FD,以此类推;data[1024]表示存放着1024字节的文件数据;CRCH与CRCL是CRC16检验码的高8位与低8位。

    如果文件数据的最后剩余的数据在128~1024之前,则还是使用STX的1024字节传输,但是剩余空间全部用0x1A填充,如下结构:

    STX 01 FE data[1024] 1A 1A……… CRCH CRCL

    有一种特殊的情况:如果文件大小小于等于128字节或者文件数据最后剩余的数据小于128字节,则YModem会选择SOH数据帧用128字节来传输数据,如果数据不满128字节,剩余的数据用0x1A填充这是数据帧的结构就变成了:

    文件大小小于128字节:               SOH 01 FE data[ ] 1A ...1A CRCH CRCL

    文件最后剩余数据小于128字节:  SOH 01 FE data[ ] 1A...1A CRCH CRCL

    3.结束帧数据结构

    YModem的结束帧数据也采用SOH的128字节数据帧,它的结构如下:

    SOH 00 FF NUL[128] CRCH CRCL

    结束帧同样以SOH开头,表示后面跟着128字节大小的数据;结束帧的帧序也认为是00 FF;结束帧的128字节的数据部分不存放任何信息,即全部用00填充。

    4.文件传输过程

    文件的传输过程,以具体的例子说明。把USTB_V3_1.0.1.26_NMEA.Bin,大小为135168Byte(16进制为0x21000,它在数据帧中的格式就是32 31 30 30 30 00)的文件作为传输的对象,则它的传输过程如下:

    发送端                                                                                        接收端

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

    SOH 00 FF [55 53…6E 00]" "[32…30 00]'' NUL[96] CRC CRC >>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C

    STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    SOH 05 FA data[100]  1A[28] CRC CRC>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   NAK

    EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

    SOH 00 FF NUL[128] CRCCRC >>>>>>>>>>>>>>>>>>>>>>>

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    请注意这里 是要发送两次EOT!

    原文链接:https://blog.csdn.net/lcmsir/article/details/80550821

  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/jxl123456/p/14777222.html
Copyright © 2011-2022 走看看