目录
一、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' 字符后,开启数据传输,传输过程如下。先发起始帧,告诉从机即将要发送的文件名称和文件大小;接着开始发送数据帧,将文件分包发送给从机;数据帧发送完成后,发送结束帧,结束此次的文件传输
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协议实现串口程序升级
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、升级过程