本文对mcuboot(version 1.1.0)做一个简单介绍供参考,Github地址:https://github.com/runtimeco/mcuboot
以下内容都是针对(version 1.1.0)做介绍:
目前支持三种操作系统:
Zephyr
Mynewt
RIOT
镜像跳转方式支持两种:
1、两块镜像区域image_0和image_1;
2、三块镜像区域image_0、image_1和scratch;
两种方法都是app永远在image_0地址运行;
第1种情况的基本思路:
运行在image_0,如果需要升级app,则将app存储于image_1,重启装置,mcuboot检测到image_1有镜像,step1:擦除image_0,step2:将image_1的内容搬运到image_0,step3:跳转到image_0地址启动程序;
第2种情况的基本思路:
运行在image_0,如果需要升级app,则将app存储与image_1,重启装置,mcuboot检测到image_1有镜像,step1:image_0内容搬运到scratch中,step2:擦除image_0,step3:将image_1的内容搬运到image_0,step4:跳转到image_0地址启动程序;
对比两种方式各有优缺点:
第一种方式:
优点:镜像只有两个区域,对FLASH要求较低,镜像程序可以大一点;
缺点:如果升级一个错误的镜像则程序将无法运行,即装置会变砖,只能通过例如ST-LINK等工具重新刷固件;
第二种方式:
优点:即使升级的镜像有问题,那么还可以恢复到原来的固件,稳定性更强;
缺点:镜像有三个区域,对FLASH要求较高,镜像程序小的可以用这种方式;
2018年3月8日