标签:启动 follow 固件 memory 多个 空间 系统 html 数据
i.MXRT1060芯片支持flash重映射功能(flash remappingfunction),该功能允许用户重新映射挂载在flexspi接口的闪存地址,能够将当前闪存地址重新映射到预期的地址。
该功能有利于实现以下几点:
? 可以下载多个固件到flash
? 可根据条件切换不同的固件运行
? 可应用于OTA远程升级固件
一般升级流程是,通过app应用程序将固件接收之后烧写到flash中,然后执行校验检查,最后切换到新的固件运行。重映射功能有助于直接运行固件,无论它位于XIP flash的什么位置。
▲OK1061-S 开发板
以flash地址0x60000000和0x60010000为例,如果不设置这三个寄存器,即不使用重映射功能,我们通过下面这个图片可以看到,访问0x60000000地址的数据,返回就是实际物理地址0x60000000里面内容。
如果我们设置这三个寄存器值分别为:
IOMUXC_GPR_GP30 = 0X60000000;
IOMUXC_GPR_GP31 = 0X60010000;
IOMUXC_GPR_GP32 = 0X10000;
再去访问0X60000000地址数据,则返回的是0X60010000中的数据,如图:
i.MX RT1061片内ROM支持flash重映射功能。它支持烧写两个固件到flash,并且实现两个固件的任意切换运行。
使能此功能,只需要烧写一下fuse熔丝位即可。
上表中,0x6E0[23:16]设置的是固件镜像在flash中偏移地址。如果我们设置固件镜像空间为1M,偏移地址也设置为1M,则可以设置0x6E0[23:16]为4,0x6E0[15:12]为0。这样,我们可以把flash中前1M空间(0x0000000-0x00FFFFF)作为固件1存放空间,接下来的1M空间(0x0100000-0x01FFFFF)作为固件2存放空间。
程序运行之后,在固件1中调用固件切换函数,可以运行固件2,在固件2中调用固件切换函数,可以运行固件1。该功能可应用在OTA升级,使升级变得更可靠简单。
这是一个基于飞凌OK1061-S的简单的bootloder程序流程:
Flash空间分配memory map:
bootloder程序通过,启动之后通过判断更新标志,进行固件升级或者程序跳转。如果更新标志为0x55667788则认为有新的固件升级包,程序需要升级,则开始校验升级包,如果校验成功,则将新的升级包烧写到APP区域,同时也将更新标志更新为0xffffffff。然后,重启系统,再次进入bootloder程序,程序判断更新标志之后不需要升级程序,则直接跳转到APP程序。
升级包接收一般在 APP 程序中进行, APP 程序通过通信接口(如网络、 串口等) 接收服务器或上位机等其他设备发来的升级包, 经过校验之后将每个升级包烧写到 FLASH 中的升级包地址中。
原文链接:https://www.forlinx.com/article_view_251.html
标签:启动 follow 固件 memory 多个 空间 系统 html 数据
原文地址:https://blog.51cto.com/14771003/2485215