ymodem协议及其程序升级应用

目录

一、ymodem协议

1、协议介绍

2、协议传输过程

3、传输数据帧格式

4、ymodem协议具体实现

二、基于YModem协议实现串口程序升级

1、实现方法

2、FLASH分区

3、升级过程


一、ymodem协议

1、协议介绍

YModem分成 YModem-1K 与 YModem-g;YModem-1K用1024字节信息块传输取代标准的128字节传输,数据使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。YModem-g传输形式与YModem-1K差不多,只是它去掉了数据的CRC校验码,同时在发送完一个数据块信息后,它不会等待接收端的ACK信号,而直接传输下一个数据块。正是它没有涉及错误校验与等待响应,才使得它的传输速度比YModem-1K来得快。我们常用的YModem一般是指带CRC校验的YModem-1K

2、协议传输过程

协议又接收端(从机)主动发起,在发送端(主机)收到 'C' 字符后,开启数据传输,传输过程如下。先发起始帧,告诉从机即将要发送的文件名称和文件大小;接着开始发送数据帧,将文件分包发送给从机;数据帧发送完成后,发送结束帧,结束此次的文件传输

ymodem协议及其程序升级应用

3、传输数据帧格式

起始帧数据格式

YModem的起始帧用于传输文件名与文件的大小,注意该数据包号为0,帧长=3字节的数据首部+128字节数据+2个字节CRC16校验码 = 133字节。数据结构为:

SOH 00 FF filename filezise NUL CRCH CRCL

数据帧数据格式

YModem的数据帧从第二包数据开始,注意该数据包号为1。帧长 = 3字节的数据首部+1024字节数据+2字节的CRC16校验码 = 1029字节。数据结构为:

STX/SOH + [编号] + 编号的取反 + data[0] + data[1] + data[2] + … + CRCH + CRCL

SOH 表示有128个字节, STX 表示有1024个字节。若文件数据的最后一包数据在128~1024之间,则数据部分剩余空间全部用0x1A填充;如果文件的大小小于或等于128字节或者文件数据最后剩余的数据小于128字节,则YModem会选择使用SOH数据帧,即用128字节来传输数据,如果数据不满128字节,剩余的数据用0x1A填充。

结束帧数据格式

当传输结束时,发送端需要发送结束标识EOT,并等待接收端的回复,最后还会再发送一包空数据包以表示传输真正结束,只是数据内容为空。帧长=3字节首部+128字节的数据+2字节CRC16校验码 = 133字节,其数据帧结构为:

SOH + 00 + FF + NULL + NULL + … + NULL + CRCH + CRCL

4、ymodem协议具体实现

软件结构如下,在更换硬件平台后,只需修改ymodem.c/h支持文件即可

ymodem协议及其程序升级应用

二、基于YModem协议实现串口程序升级

1、实现方法

根据IAP(在应用编程),可以在程序运行过程中对用户FLASH的部分区域进行编程;将程序分为boot引导程序、app应用程序、download待更新的应用程序,可以通过FOTA方式在app中对download进行更新,或是通过超级终端串口方法在直接在boot中对download进行更新,boot的功能就是接收超级终端发送的文件并写入download分区 和 将download分区拷贝到app分区, 以实现程序升级的功能。其中通过超级终端串口方法就是使用ymodem进行的固件文件传输的

2、FLASH分区

分区名

起始地址

分区大小

分区位置

功能

boot

0x8000000

自定义

片内FLASH

接收ymodem文件并写入download,更新app

app

自定义

自定义

片内FLASH

应用程序

download

自定义

自定义

片内FLASH或片外SPI FLASH

待升级固件

para

自定义

自定义

片内FLASH或片外SPI FLASH

设备参数(升级标志位)

3、升级过程

ymodem协议及其程序升级应用