奏奏奏 发表于 2019-6-10 17:43:09

如何防止MCU通过串口IAP升级后变砖

目前计划的MCU串口IAP升级方案是这样的:
(1)串口通讯符合IAP升级指令,则转换为升级模式;
(2)升级模式中不断接收升级数据,每包数据最多100个字节,包含包头、校验码、写入FLASH地址、写入数据有效长度、写入数据内容;
(3)接收到的数据搬运到 程序备份区(与目前运行程序区一样大),将升级标记保存到FLASH中指定区域;
(4)重启,重新上电后从升级标记读取程序备份区开始地址,通过Bootloader跳转到这个开始地址运行程序;
(5)将程序备份区的数据复制搬运到 FLASH中 主程序区域;
(6)重启,重新上电后从升级标记读取知道本次切换回主程序区域运行。

但是,上面过程中,我最担心的就是因为升级数据包出错,导致步骤(4)或者步骤(6)无法正常工作,变成一开机就变砖了。
看各位有MCU升级经验的大佬带带我。先谢谢各位

yklstudent-1794 发表于 2019-6-10 18:31:29

本帖最后由 yklstudent-179403 于 2019-6-10 18:33 编辑

保留或者预留一种方式可以强制进入bootloader区,运行bootloader程序即使APPlication挂了,还可以运行bootloader进行升级
然后就是对整各application程序进行校验,如果传输中断某一帧出错,可以识别出来

奏奏奏 发表于 2019-6-10 19:03:57

yklstudent-1794 发表于 2019-6-10 18:31
保留或者预留一种方式可以强制进入bootloader区,运行bootloader程序即使APPlication挂了,还可以运行bootl ...

整个APP程序所有数据进行校验和校验吗?
检验和应该是最简单的,相加后取低位就可以了。

发表于 2019-6-11 08:29:41

加和校验是最差的。可能会发生一致的时候。最好是加CRC校验,或者其他的高级校验方式。

奏奏奏 发表于 2019-6-11 09:24:51

安 发表于 2019-6-11 08:29
加和校验是最差的。可能会发生一致的时候。最好是加CRC校验,或者其他的高级校验方式。 ...

目前串口协议中用的是CRC16的校验方式,得到这个宝贵意见后我还是决定保持CRC16校验。
页: [1]
查看完整版本: 如何防止MCU通过串口IAP升级后变砖