初探RT1061 flash remapping功能的使用

clip_image001.png

i.MXRT1060芯片支持flash重映射功能(flash remappingfunction),该功能允许用户重新映射挂载在flexspi接口的闪存地址,能够将当前闪存地址重新映射到预期的地址。

该功能有利于实现以下几点:

❶ 可以下载多个固件到flash

❷ 可根据条件切换不同的固件运行

❸ 可应用于OTA远程升级固件

一般升级流程是,通过app应用程序将固件接收之后烧写到flash中,然后执行校验检查,最后切换到新的固件运行。重映射功能有助于直接运行固件,无论它位于XIP flash的什么位置。

RT1061开发板.jpg
▲OK1061-S开发板

clip_image003.png

clip_image004.png

以flash地址0x60000000和0x60010000为例,如果不设置这三个寄存器,即不使用重映射功能,我们通过下面这个图片可以看到,访问0x60000000地址的数据,返回就是实际物理地址0x60000000里面内容。

clip_image005.jpg

如果我们设置这三个寄存器值分别为:

IOMUXC_GPR_GPR30 = 0X60000000;

IOMUXC_GPR_GPR31 = 0X60010000;

IOMUXC_GPR_GPR32 = 0X10000;

再去访问0X60000000地址数据,则返回的是0X60010000中的数据,如图:

clip_image006.jpg

clip_image007.png

i.MX RT1061片内ROM支持flash重映射功能。它支持烧写两个固件到flash,并且实现两个固件的任意切换运行。

使能此功能,只需要烧写一下fuse熔丝位即可。

clip_image008.jpg

上表中,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程序流程:

https://mmbiz.qpic.cn/mmbiz_png/VYHFtvABrwY0PP50jcquyAP4pAQIZwrG4NVMibDob0t7yKPmNE9c1Irb7dOI7oBbsIUVyiaN0iaTJ1Q6DVtOiafTsw/640?wx_fmt=png

Flash空间分配memory map:

clip_image010.png

bootloder程序通过,启动之后通过判断更新标志,进行固件升级或者程序跳转。如果更新标志为0x55667788则认为有新的固件升级包,程序需要升级,则开始校验升级包,如果校验成功,则将新的升级包烧写到APP区域,同时也将更新标志更新为0xffffffff。然后,重启系统,再次进入bootloder程序,程序判断更新标志之后不需要升级程序,则直接跳转到APP程序。

升级包接收一般在 APP 程序中进行, APP 程序通过通信接口(如网络、 串口等) 接收服务器或上位机等其他设备发来的升级包, 经过校验之后将每个升级包烧写到 FLASH 中的升级包地址中。

clip_image011.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是关于ROS2中的gazebo_ros的使用方法: 1. 首先,在ROS2中安装gazebo_ros包。在终端中输入以下命令: ``` sudo apt-get install ros-<distro>-gazebo-ros-pkgs ``` 其中`<distro>`是你所使用的ROS2发行版的名称,例如`dashing`或`foxy`等。 2. 在启动文件中加载gazebo_ros节点,例如: ``` <launch> <!-- Load Gazebo ROS package --> <package name="gazebo_ros" prefix="gazebo_ros"> <executable name="spawn_entity.py" /> </package> <!-- Load URDF --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen" args="- use_sim_time:=true"> <param name="robot_description" textfile="$(find my_robot_description)/urdf/my_robot.urdf" /> </node> <!-- Spawn robot in Gazebo --> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_entity.py" respawn="false" output="screen"> <arg name="entity_name" value="my_robot" /> <arg name="topic" value="/robot_description" /> <param name="robot_description" textfile="$(find my_robot_description)/urdf/my_robot.urdf" /> <param name="initial_joint_states" textfile="$(find my_robot_description)/urdf/my_robot.gazebo" /> </node> </launch> ``` 这个启动文件加载了gazebo_ros节点和URDF,然后在Gazebo中生成了机器人。 3. 使用Gazebo中的ROS2插件。在URDF中添加ROS2插件,例如: ``` <gazebo> <plugin name="my_plugin" filename="libmy_plugin.so"> <ros> <namespace>/my_robot</namespace> <remapping>cmd_vel:=cmd_vel</remapping> </ros> </plugin> </gazebo> ``` 这个插件将机器人的`cmd_vel`话题重映射到`/my_robot/cmd_vel`话题。 希望这些步骤能够帮助你使用ROS2中的gazebo_ros包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值