0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCU双镜像机制的工作原理和应用实例

痞子衡嵌入式 来源:痞子衡嵌入式 2023-08-01 18:10 次阅读

一. 背 景

嵌入式设备升级过程中会由于断电、强行中断等外部因素,导致新固件写入Flash时不能完整写入,使系统启动时出现问题。或设备运行中,镜像文件被意外损坏,导致系统瘫痪,设备无法运行。面对以上问题,可以使用双镜像机制(dual image),它保证至少有一个镜像文件是可以启动,并且在任何时候都能正常工作。如果发生意外,引导加载程序检测并使用备用的镜像文件。

二. 原 理

LPC5536 ROM支持内部Flash的双镜像引导(也支持FlexSPI外部Flash,原理相同),即在Flash可以放置两个引导镜像,ROM根据镜像文件版本号决定启动哪个镜像,首先启动最新版本号的镜像,如果失败,则启动旧镜像文件。

通电启动时,ROM首先检测CMPA中关于重定位镜像文件的位置和大小,然后检测两个镜像的版本号,所以在使用双镜像机制时,主要对镜像文件重定位和版本号进行配置。

ROM从内部Flash启动双镜像文件流程图如下:

wKgaomTI2jSACjStAAJ2gajFZJE385.png

2.1 镜像文件重定位

LPC5536内部Flash支持重映射,当设置重映射偏移量后,Flash AHB 总线将访问偏移后的地址。例如,当偏移量设置为128K(0x20000),对0x0的访问将被重新映射到地址0x20000。通过这个特性,ROM可以实现双镜像引导。下面是一个关于内部Flash存放两个镜像文件的简图。

28c24a8e-3053-11ee-9e74-dac502259ad0.png

第二个镜像的偏移量和重映射大小由用户在CMPA区域设置,让ROM知道第二个镜像的位置。

wKgaomTI2jSAIM-JAAFWnr8VDEc123.png

2.2 配置镜像的版本

在头文件偏移量为0x24处设置镜像版本号,如下表格所示,第16位-31位设置镜像文件版本号,第10位表示镜像文件是否存在版本号,使用双镜像机制时,此位设置为1.

wKgZomTI2jSAeW_ZAAE5SHR-9cs524.png

三. 应 用

3.1 配置CMPA

配置CMPA中数据值

修改cmpa.bin文件,通过blhost把修改后的bin文件写入CMPA,以配置image1偏移量和重映射大小,流程如下:

a. 打开一个全0的cmpa.bin,修改0x3E23C处数据为0x20000,高位在右低位在左,如下:

wKgZomTI2jSAd0ENAAO4xpvSOVU050.png

b. 修改重映射大小。地址0x3E238处修改为0x1d800,如下:

wKgaomTI2jSAC23pAAIJ7FAFwwA110.png

c. 保存并重命名为cmpa_new.bin,另存为lhost_2.6.7lhost_2.6.7inwin

3.2 烧写cmpa_new.bin

借助blhsot 工具烧写,blhost 2.6.7是一个命令行调试工具,界面如下:

wKgZomTI2jSAHkj0AADJ1O0WiyM606.png

测试blhost与开发板通信是否正常:

首先,从设备管理器查看开发板与电脑连接端口

wKgZomTI2jWASb6XAABq-XlPv5g049.png

其次,开发板J43上使用跳线帽连接3和4,使能ISP启动;

然后,按下复位键,输入连接测试命令blhost -pcom12 -- get-property 1

判断是否正常通信,如连接成功会提示信息

wKgaomTI2jWAeJlyAACQF1QF3Ek143.png

写入修改好的bin文件数据到CMPA

通过使用blhost -pcom12 -- write-memory 0x3e200 cmpa_new.bin命令,写入CMPA:

wKgZomTI2jWAVY0iAACuqe8WSA8262.png

为确保正确写入,查看设置之后CMPA数据

通过命令blhost -pcom12 -- read-memory 0x3e200 512查看设置后的CMPA数据:

wKgaomTI2jWACjJBAAQwrYBSe1g263.png

3.2 双镜像版本设置

根据实验效果,Image0的功能是LPC5536-evk开发板上红灯闪烁,Image1功能是绿灯闪烁。

Image0 设置版本号为1,Image1 设置版本号为2:

打开红灯闪烁的工程,修改头文件偏移量0x24处为0x10400

wKgZomTI2jWAcGe3AAKuJw0K8-o310.png

打开绿灯闪烁的工程,修改头文件偏移量0x24处为0x20400

wKgaomTI2jWAQp6jAAJ4pmKg528123.png

3.3 分配Flash

LPC5536JBD100用户可用的内部Flash共246K,所以Image0 分配到0x0-0x1FFFF地址范围内,Image1分配到0x20000-0x3D7FF地址范围内。如果使用MCUXpresso ID,设置如下:

工程->右键属性->MCU settings,设置起始地址和大小,完成后点击应用按钮。

红灯闪烁工程:

wKgaomTI2jWAADqqAALYQNSCmVc081.png

绿灯闪烁工程:

wKgZomTI2jWAePlaAAGmbiOrveA742.png

重现编译工程。

3.4 功能测试

测试程序为两个点灯程序,分别为红灯闪烁和绿灯闪烁程序,红灯闪烁为image0,版本号1,绿灯闪烁为image0,版本号2,所以测试结果如果绿灯闪烁,则成功。

下载程序

使用IDE中GUI Flash Tool,分别下载两个镜像文件到开发板中:

wKgZomTI2jWAbzeSAAEaNRYodVo087.png

在“File to program”中选择烧写的文件,点击run按钮后,程序会下载到Flash:

wKgaomTI2jWALKTyAAFn0b4IfHQ586.png

下载完成后,点击确定:

wKgZomTI2jWAMoz_AAE22dWkppY441.png

同样的方式下载另外一个程序,注意在烧写第二个程序时,不能勾选“masserase”,如果使用其它工具烧写,也应关闭和”masserase”相同功能的选项,避免擦除第一个镜像文件。

测试结果

下载程序后,复位,绿灯闪烁。

升级测试:将红灯闪烁工程版本号修改为3,即修改0x10400为0x30400,重新烧写镜像文件,应该会看到红灯闪烁。

四. 总结

双镜像机制为嵌入式设备的升级和启动增加保险,应用过程中需要注意在CMPA区域设置镜像偏移量、重映射大小和配置镜像版本的方式,同时也需要注意两个工程中Flash配置。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343680
  • 嵌入式
    +关注

    关注

    4983

    文章

    18295

    浏览量

    288582
  • FlaSh
    +关注

    关注

    10

    文章

    1551

    浏览量

    146699
  • ROM
    ROM
    +关注

    关注

    4

    文章

    525

    浏览量

    84828
  • 嵌入式设备
    +关注

    关注

    0

    文章

    104

    浏览量

    16831

原文标题:MCU双镜像机制如何使能?

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分享点胶机制造与工作原理

    1. 工作原理:压缩空气送入胶瓶(注射器),将胶压进与活塞室相连的进给管中,当活塞处于上冲程时,活塞室中填满胶,当活塞向下推进滴胶针头时,胶从针嘴压出。滴出的胶量由活塞下冲的距离决定,可以手工调节
    发表于 06-25 23:33

    极型晶体管工作原理

    极型晶体管工作原理
    发表于 08-20 08:53

    红绿色点阵工作原理,程序

    红绿色点阵工作原理,程序。
    发表于 07-28 17:50

    MCU工作原理

    MCU使用,8位寄存器指针就是用来确定MCU究竟要使用哪个寄存器的。本方案中,主程序会不断更新传感器的配置寄存器,这会使传感器工作于单步模式,每更新一次就会测量一次温度。  要读取传感器测量值寄存器
    发表于 07-06 11:09

    舵机的内部结构/闭环检测机制/工作原理

    简单的流程图说明,结合上面所说的闭环检测机制内容,相信你很轻松的就可以了解舵机的工作流程和工作原理了。    工作原理  说到舵机的控制信号,一般是脉宽调制(PWM)信号,如下图,直观
    发表于 01-11 16:16

    AD834的工作原理是什么? AD834的应用实例有哪些?

    AD834的主要特性有哪些?AD834的工作原理是什么?AD834的应用实例有哪些?
    发表于 04-21 07:19

    踪示波器的工作原理是什么?怎样对它进行日常维护?

    踪示波器的工作原理是什么?踪示波器是由哪几部分组成的?怎样对踪示波器进行日常维护?
    发表于 05-10 06:34

    机器视觉系统的工作原理是什么?有哪些应用实例

    机器视觉系统的工作原理是什么?机器视觉系统的特点有哪些?机器视觉系统的结构是由哪些部分组成的?机器视觉系统有哪些应用实例
    发表于 07-16 08:06

    闭环直流调速系统的工作原理是什么

    闭环直流调速系统的工作原理是什么?闭环直流调速系统是由哪些部分组成的?闭环直流调速系统两个调节器有何作用?
    发表于 09-27 08:50

    dde与opc技术的工作机制

    本内容介绍了dde与opc技术的工作机制,详细分析了DDE技术的工作原理机制,及OPC技术的知识
    发表于 02-02 15:30 2345次阅读
    dde与opc技术的<b class='flag-5'>工作</b><b class='flag-5'>机制</b>

    51MCU中断和定时计数系统的工作原理

    本资料是关于51MCU中断和定时计数系统的工作原理的介绍,希望对大家有所帮助~~
    发表于 07-30 15:53 47次下载

    固态继电器工作原理和应用实例

    固态继电器工作原理和应用实例,快来学习下载吧
    发表于 01-12 18:31 0次下载

    Doherty功放工作原理和设计实例

    Doherty 功放工作原理和设计实例
    发表于 02-09 17:09 2次下载

    LPC5536: 双镜像机制使用指南

    问题,可以使用双镜像机制(dual image),它保证至少有一个镜像文件是可以启动,并且在任何时候都能正常工作。如果发生意外,引导加载程序检测并使用备用的
    的头像 发表于 07-06 08:50 453次阅读
    LPC5536: 双<b class='flag-5'>镜像</b><b class='flag-5'>机制</b>使用指南

    STM32 MCU工作原理、基本结构及优缺点

    STM32 MCU是STMicroelectronics公司生产的一款基于ARM Cortex-M内核的32位微控制器,广泛应用于汽车电子、工业控制、消费电子等领域。本文将介绍STM32 MCU工作原理、基本结构以及优缺点。
    发表于 09-09 16:36 1738次阅读