查看: 722|回复: 1

[分享] LPC5536 :如何使用双镜像机制

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20033
最后登录
2024-4-26
发表于 2023-5-30 17:54:50 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2024-3-27 16:16 编辑

LPC5536 :如何使用双镜像机制
一、背景
嵌入式设备升级过程中会由于断电、强行中断等外部因素,导致新固件写入flash时不能完整写入,使系统启动时出现问题。或设备运行中,镜像文件被意外损坏,导致系统瘫痪,设备无法运行。面对以上问题,可以使用双镜像机制(dual image),它保证至少有一个镜像文件是可以启动,并且在任何时候都能正常工作。如果发生任何意外,引导加载程序检测并使用备用的镜像文件。
二、原理
LPC5536 ROM支持内部flash的双镜像引导(也支持FlexSPI外部flash,原理相同),即在flash可以放置两个引导镜像,ROM根据镜像文件版本号决定启动哪个镜像,首先启动最新版本号的镜像,如果失败,则启动旧镜像文件。
上电启动时,ROM首先检测CMPA中关于重定位镜像文件的位置和大小,然后检测两个镜像的版本号,所以在使用双镜像机制时,主要对镜像文件重定位和版本号进行配置。
ROM从内部flash启动双镜像文件流程图如下:
555555.png
2.1 镜像文件重定位
LPC5536内部flash支持重映射,当设置重映射偏移量后,Flash AHB 总线将访问偏移后的地址。例如,当偏移量设置为128K(0x20000),对0x0的访问将被重新映射到地址0x20000。通过这个特性,ROM可以实现双镜像引导。下面是一个关于内部FLASH存放两个镜像文件的简图。
图片1_简图.png
第二个镜像的偏移量和重映射大小由用户在CMPA区域设置,让ROM知道第二个镜像的位置。
图片2_第二个镜像位置.png
2.2 配置镜像的版本
在头文件偏移量为0x24处设置镜像版本号,如下表格所示,第16位-31位设置镜像文件版本号,第10位表示镜像文件是否存在版本号,使用双镜像机制时,此位设置为1.

图片3_版本.png

三、应用

3.1 配置CMPA
1)配置CMPA中数据值
修改cmpa.bin文件,通过blhost把修改后的bin文件写入CMPA,以配置image1偏移量和重映射大小,具体过程如下:
首先,打开一个全0的cmpa.bin,修改0x3E23C处数据为0x20000,高位在右低位在左,如下图所示:
图片4.png

然后,修改重映射大小。地址0x3E238处修改为0x1d800,如下图所示:
图片5.png
修改后保存,重命名为cmpa_new.bin, 另存为\blhost_2.6.7\blhost_2.6.7\bin\win。
2)烧写cmpa_new.bin
借助blhsot 工具烧写,Blhost 2.6.7是一个命令行调试工具,打开界面如下:
图片7.png
测试blhost与开发板通信是否正常:
首先,从设备管理器查看开发板与电脑连接端口号.
图片8.png
其次,开发板J43上使用跳线帽连接3和4,使能ISP启动。
然后,按下复位键,输入连接测试命令blhost -pcom12 -- get-property 1
判断是否正常通信,如连接成功会提示信息,如下图所示:
图片9.png
写入修改好的bin文件数据到CMPA
通过使用blhost -pcom12 -- write-memory 0x3e200 cmpa_new.bin命令,写入CMPA,如下图所示:
图片10.png
为确保正确写入,查看设置之后CMPA数据
通过命令blhost -pcom12 -- read-memory 0x3e200 512查看设置后的CMPA数据,如下图所示:
图片11.png
3.2 双镜像版本设置
为了实验效果,Image0的功能是LPC5536-evk开发板上红灯闪烁,Image1功能是蓝灯闪烁。
Image0 设置版本号为1,Image1 设置版本号为2:
打开红灯闪烁的工程,修改头文件偏移量0x24处为0x10400
图片12.png

打开蓝灯闪烁的工程,修改头文件偏移量0x24处为0x20400
图片13.png

3.3 分配Flash
LPC5536JBD100用户可用的内部flash共246K,所以Image0 分配到0x0-0x1FFFF地址范围内,Image1分配到0x20000-0x3D7FF地址范围内。如果使用MCUXpresso ID,设置如下:
选中工程->右键属性->MCU settings,设置起始地址和大小,完成后点击应用按钮。
红灯闪烁工程修改如下:
图片14.png
蓝灯闪烁工程修改如下:
图片15.png
重现编译工程。
3.4功能测试
测试程序为两个点灯程序,分别为红灯闪烁和蓝灯闪烁程序,红灯闪烁为image0,版本号1,蓝灯闪烁为image1,版本号2,所以测试结果如果蓝灯闪烁,则成功。
下载程序:
使用IDE中GUI Flash Tool,分别下载两个镜像文件到开发板中:
图片16.png
打开,弹出如下界面,在“File to program”中选择烧写的文件,点击run按钮后,程序会下载到flash。
图片17.png
下载完成后,点击确定。
图片18.png
同样的方式下载另外一个程序,注意在烧写第二个程序时,不能勾选“masserase”,如果使用其它工具烧写,也应关闭和”masserase”相同功能的选项,避免擦除第一个镜像文件。
测试结果
下载程序后,复位,蓝灯闪烁。
升级测试:将红灯闪烁工程版本号修改为3,即修改0x10400为0x30400,重新烧写镜像文件,会看到红灯闪烁。
四、总结
双镜像机制为嵌入式设备的升级和启动增加保险,在应用过程中需要注意在CMPA区域设置镜像偏移量、重映射大小和配置镜像版本的方式,同时也需要注意两个工程中Flash配置。










dual image.zip

16.57 MB, 下载次数: 4, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    慵懒
    5 小时前
  • 签到天数: 1941 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17298
    最后登录
    2024-4-26
    发表于 2023-5-30 18:02:19 | 显示全部楼层
    学习学习
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 05:18 , Processed in 0.150645 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表