Ymodem协议学习笔记

Ymodem协议学习笔记介绍  Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议

介绍

  Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。
  Xmodem协议是最早的,支持传输128字节信息块。
  Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。
  平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。
  YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。

数据帧格式

  Ymodem协议的每一帧数据包含:3字节帧头+帧内容+2字节帧尾。其中第一帧数据不直接传输文件内的数据,而是传输文件名与文件大小,之后的数据帧才传输文件内的数据。第一帧称为起始帧,最后一帧称为结束帧,其他的都称为数据帧。

YModem中用的标志位

字符 ASCII码16进制
SOH 0x01
STX 0x02
ACK 0x06
NAK 0x15
EOT 0x04
C 0x43

起始帧的数据格式

  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,也就是Byte,转换成十六进制就是0x21000,它在数据帧中的格式就是32 31 30 30 30 00,也就是ASCII的“21000”,同样最后要加上00表示结束
  • NUL就是数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充
  • CRCH和CRCL分别表示16位CRC校验码的高8位与低8位。

数据帧的数据格式

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

STX 01 FE data[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

结束帧数据结构

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

SOH 00 FF NUL[128] CRCH CRCL

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

文件传输过程

  文件的传输过程,以具体的例子说明。把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),大小为Byte(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 

YMODEM协议手册

YMODEM协议手册
在这里插入图片描述

今天的文章
Ymodem协议学习笔记分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89702.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注