STM32串口IAP固件升级探讨--Ymodem协议浅析
STM32串口IAP固件升级思考
之前的一些项目中,设备的软件升级都是用的USB升级方式,先将升级文件考到U盘里,然后插上U盘就可以进行固件升级,很方便,而且USB通信也很可靠。但是,最近刚好碰到开发的设备没有USB接口,只有一个串口,无奈之下只有借助串口来实现升级,用串口实现升级的方式也很多,但是各有利弊,下面就我最近思考过的一些升级方式进行简单分析,最终Ymodem协议方案更具可行性。
串口ISP下载方式
首先对正常设计的串口电路进行相应优化,然后用专门的串口下载软件(MCUISP、FLASHLOADER等),可以一键实现将Hex文件下载到内部Flash中,不需要设置BOOT1/BOOT2引脚电平。但是,一般项目中所用的升级文件都是经过加密处理的Hex或bin文件,因此无法通过此方法进行下载。 
利用串口调试助手
因为有些串口调试助手具有文件发送功能,因此可以将任意格式的文件直接透传到设备中,然后由设备的bootloader进行文件解析和IAP编程。但是串口调试助手的文件传输仅仅是数据传输,不能暂停、不能重发,也没有数据校验,除非设备带有足够的RAM才可以,数据传输过程的准确性难以保证。因此此方法也不可行。

自制上位机下载软件
也可以根据需求编写上位机软件,这种方式灵活性较好,通信协议随便选,可以采用MODBUS等标准协议,也可以自制协议,传输的文件类型也不受限制。但是,需要专门的上位机软件开发人员配合,开发周期不确定较大,因此也暂不考虑,当然一些大咖有时间和精力也是可以自行设计的。
基于Ymodem协议方式
YModem协议是一种标准通信协议,帧结构简单,每包数据最多可以达到1024字节,同时数据包带CRC校验,能够保证数据传输的可靠性,是一个非常高效的文件传输协议。同时,超级终端或SecureCRT等软件直接支持YModem协议,这样也就免去了自行设计上位机软件的周期,开发效率更高。
YModem协议浅析
下面我们直接进入正题,既然选择采用YModem协议,那么必须对该协议进行深入的研究和了解。下图1给出了主从方的通信过程,只要了解该流程,基本上后续的编程思路就会很清晰。其中的SENDER为发送方,一般为电脑,RECEIVER为接受方,一般为待升级设备。

------------------------------------------图1 通信过程-----------------------------------------------
帧格式
SOH | 00 | FF | data | NULL[123] | CRCH | CRCL
第1字节为 类型码:类型码SOH表示本包数据区大小为128字节,如果类型码为STX,则表示本包数据区大小为1024。
第2字节为 编号:第1包为00,第2包为01,第3包为02,依次加1,加到FF后,返回0再循环递增。
第3字节为编号的反码:编号00 的反码对应 FF,编号01 则对应FE,以此类推。
第4字节到最后两字节为数据区:
(1)第0帧:数据区内容为文件名和文件大小,不满128字节以0填充。
(2)其他帧:数据区内容为升级文件对应的真正数据,如果不满128字节,则以0补满。
最后两字节为CRC校验:高字节在前,低字节在后,CRC计算方式为Ymodem协议方式,与Modbus协议里的CRC校验计算结果是不同的,请留意。
基本通信流程
以下为Ymodem协议的基本通信流程,结合图1,基本上可以对Ymodem协议的整个通信过程有一个比较清晰的认识。
第一步:先由接收方,发送一个字符’C’,发送方收到’C’后,发送第1帧数据(文件名等信息),接收方收到第1帧数据后,发送ACK正确应答。
第二步:然后由接收方再发送一个字符’C’。发送方收到’C’后,开始发送第2帧,第二帧(文件实际内容)。
第三步:接收方收到第1帧数据后,发送ACK正确应答。然后等待下一包数据传送完毕,继续ACK应答,直到所有数据传输完毕。
第四步:数据传输完毕后,发送方发EOT,第一次接收方以NAK应答,进行二次确认。发送方收到NAK后,重发EOT,接收方第二次收到结束符,就以ACK应答。
最后,接收方再发送一个’C’,发送方发送空数据包。接收方应答ACK后,正式结束数据传输。
总结
通过上述对Ymodem协议的帧格式和基本通信流程进行简单的介绍后,大家基本上对整个通信过程的来龙去脉有了一个基本的认识,但是其中肯定有些疑惑的地方,若据此进行编程,可能还有一些不清楚的地方,可参考博文《STM32串口IAP固件升级探讨–Ymodem协议仿真》,希望对大家会有一些帮助,若有疑问请留言。
本文探讨了在没有USB接口的STM32设备上,如何通过串口进行IAP固件升级。分析了串口ISP、串口调试助手、自制上位机软件的优缺点,最终选择了Ymodem协议作为解决方案。详细介绍了Ymodem协议的帧格式、通信流程,并提供了一个简要的总结。

4288

被折叠的 条评论
为什么被折叠?



