这次来分析下Bootloader的制作和IAP升级
现在升级肯定是必不可少的,IAP(在应用中升级就是比较常见的)
首先FLASH划分为BootLoader区,APP应用区,备份FLASH区。
基本流程是这样,
1.在APP里接收完bin文件(包括版本号,整个文件大小,整个文件的CRC),
2.并且存储到备份FLASH区中,
3.对备份FLASH里的数据做CRC校验,和下发bin文件的整个文件CRC做对比。
4.确定无误后软复位重启
5.重启后程序进入bootLoader区域,这时候会判断版本号
6.如果确定版本号不同,就进行升级模式,将备份FLASH拷贝到APP FLASH中。拷贝完之后,对APP FLASH做CRC校验,确保写入APP FLASH是正确不出错的
7.在FLASH里更新版本号
8.BootLoader跳转到APP去。
注意事项:
1.在BootLoader中首先判断版本号,备份FLASH里的版本号和APP的版本号做对比,如果一样则直接跳转到APP。如果不一样,进入升级状态。
1.如果在下载过程中出现断电了,那么这个时候备份FLASH里接收到的文件是不完整的。重启到BootLoader时按照整个文件大小进行CRC校验,会发现CRC校验不通过,认定程序是错误的。因此不会进入升级模式,直接跳转到APP
2.如果备份FLASH是完整的,但是在拷贝到APP中出现错误,可以让它软复位重启,再次将备份FLASH拷贝到APP中。也可以什么不做,断电重启后,自己还是会将备份FLASH拷贝到APP中。如果在拷贝到APP一直出错,导致CRC校验一直没通过,这是其它情况了。正常来说是不会出现这样的情况。
3备份FLASH只有在APP接收完bin文件的情况下才会擦除覆盖