×
单片机 > 单片机程序设计 > 详情

STM32学习笔记之Bootloader升级Ymodem协议简介

发布时间:2020-06-05 发布时间:
|

YModem协议

YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议 。


源码宏定义

#define SOH (0x01) /* start of 128-byte data packet /

#define STX (0x02) / start of 1024-byte data packet /

#define EOT (0x04) / end of transmission /

#define ACK (0x06) / acknowledge /

#define NAK (0x15) / negative acknowledge /

#define CA (0x18) / two of these in succession aborts transfer /

#define CRC16 (0x43) / ‘C’ == 0x43, request 16-bit CRC */


下面先看下YModem协议传输的完整的握手过程:


SENDER:发送方;

RECEIVER:接收方;

第一步先由接收方,发送一个字符’C’;

发送方收到’C’后,发送第一帧数据包,内容如下:


SOH 00 FF Foo.c NULL[123] CRCH CRCL


**第1字节SOH:**表示本包数据区大小为128字节,如果头为STX表示本包数据区大小为1024;

第2字节00: 编号,第一包为00,第二包为01,第三包为02依次累加,到FF后继续从0循环递增。

**第3字节FF:**编号的反码,编号为 00 对应 FF,为 01 对应FE,以此类推。

第4字节到最后两字节:若第1字节为SOH时有128字节,为STX时有1024字节,这部分为数据区。“Foo.c” 文件名, 超级终端下,在文件名后还有文件大小。官方dome也是因为使用了这个文件大小进行比对。 在文件名和文件大小之后,如果不满128字节,以0补满。

最后两字节:这里需要注意,只有数据部分参与了效CRC验,不包括头和编码部分。16位CRC效验,高字节在前,低字节在后。


接收方收到第一帧数据包后,发送ACK正确应答。

然后再发送一个字符’C’。

发送方收到’C’后,开始发送第二帧,第二帧中的数据存放的是第一包数据。

接收方收到数据后,发送一个ACK然后等待下一包数据传送完毕,继续ACK应答。直到所有数据传输完毕。

数据传输完毕后,发送方发EOT,第一次接收方以NAK应答,进行二次确认。

发送方收到NAK后,重发EOT,接收方第二次收到结束符,就以ACK应答。

最后接收方再发送一个’C’,发送方在没有第二个文件要传输的情况下,

发送如下数据:

SOH 00 FF 00~00(共128个) CRCH CRCL

接收方应答ACK后,正式结束数据传输。


以上部分,为YMODEM协议的基本操作流程。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析