MCUboot系列(5-2)RADirectXIP模式在FSP中的支持[完结篇]

原创 瑞萨MCU小百科 2024-06-20 16:30


前篇回顾:

  • MCUboot系列(1-1)简介以及在RA FSP上的支持
  • MCUboot系列(1-2)简介以及在RA FSP上的支持
  • MCUboot系列(2-1)RA Overwrite模式在FSP中的支持
  • MCUboot系列(2-2)RA Overwrite模式在FSP中的支持
  • MCUboot系列(3-1)RA Swap模式在FSP中的支持
  • MCUboot系列(3-2)RA Swap模式在FSP中的支持
  • MCUboot系列(3-3)RA Swap模式在FSP中的支持
  • MCUboot系列(4)RA Swap模式下代码回滚在FSP中的支持
  • MCUboot系列(5-1)RA Direct XIP模式在FSP中的支持


2

将Application Project和Bootloader关联起来


接下来,我们要利用该Bootloader调试目标Application Project,如何才能将Bootloader和Application关联起来呢?就需要借助刚才提到的Bootloader Project Build所生成的***.bld文件。


除了新建Project,也可以将任意一个现有的Project跟Bootloader关联起来,此时,该Project编译的地址为Primary Slot起始地址加上Header大小。


假如我们新建一个Blinky Project,且命名为ra2l1_prim。


Application Project会利用.bld中的内容替代原始的链接脚本文件(linker script file)。编译的起始地址来自标号FLASH_IMAGE_START,图中的值为0x00004100,可以看到,Header大小0x100已经包含进来。

 

另外,由于需要使用Python对Application Image进行处理,因此需要在本地安装Python以及相关插件的支持。该操作仅需执行一次。


具体的步骤如下,在Project Tree界面下找到ra\mcu-tools\MCUboot\scripts,鼠标点击右键,Command Window,则会在打开命令行界面,并进入scripts文件夹。键入如下命令,安装Python所需的lib。


pip3 install --user -r scripts/requirements.txt


Python安装所需Lib的提示信息

 

Python命令中包含e2 studio中的Placeholder,针对某个具体的Project,在执行的时候会解析为Workspace下的Project路径以及Project名称。


通过环境变量将Application Project关联起来


打开Application Project的属性界面,在C/C++ Build → Build Variables下添加.bld文件。


添加.bld文件到Application Project的Build Variables


同时,对Application Project Image进行签名操作所需的公钥放在Bootloader中,因此也需要将该文件链接到Application Project中,具体的实现方式如下:


添加Public Key for Sign


注意,此时Public Key for Sign依然位于Bootloader Project所在路径,该配置只是引入该文件的地址,使得在Application Project中调用Python脚本对Image进行签名操作时找到该Public Key。


另外,Image文件的版本信息可以通过添加Environment variable实现,配置方式如下:


将Image版本号添加到Environment variable


最终生成的版本信息会以4字节添加到Header中。


为保证每次Environment variables有变化或者Bootloader生成的***.bld发生改变时,Application Project都可以重新编译,需在Pre-build中增加以下内容:


rm -f ${ProjName}.elf


Pre-build step添加删除***.elf的操作

 

完成了以上的所有基础配置后,可以编译Application Project。在Console界面查看Build Log,可以发现编译完成后,增加了对Image文件的处理。


对Image签名操作对应的Python内容


此时生成的***.bin.signed文件包含了Header,TLV和Trailer等内容,可以被Bootloader识别并运行。利用工具打开该文件,可以发现它不同于原始的Application Image文件:


.bin.signed文件结构


开始的0x100字节是Header信息,在e2 studio中通过Environment variable传入的版本信息1.0.0在0x14地址偏移上。关于其他部分的细节,感兴趣的朋友可自行查阅。


Application Image开始的0x100处,第二个4字节即当前的中断向量表起始地址,可以看到是小端格式的0x00004c3d,在Primary Slot地址空间(0x00004100~0x00021FFF)内。


3

调试Application Project

由于芯片上电后需要从0地址(具体地说是0004h地址处)的中断向量开始运行,因此,调试Application Project时需要下载Bootloader文件,我们在Application Project的Debug Configuration中添加相关部分。


Application Project Debug Configuration Startup选项卡配置


增加对于Bootloader的加载,类型选项设定为Image and Symbols,这样调试状态下可以跟踪Bootloader中代码运行的状态。


同时,将Application Project对应的***.elf → Load type设定为Symbols only,仅下载标号。由于加载了Application Project对应的symbol,因此我们可以调试时检查代码的运行状态。但实际下载到code flash的内容是经过了Python脚本处理,增加了Header,TLV和Trailer等信息的***.bin.signed文件,因此可以通过Bootloader的安全校验。


按下Debug按钮,启动调试,此时可以发现PC停在Bootloader的reset向量处。


调试Application Project


点击Load Ancillary按钮,将Application Project Debug文件夹下的***.bin.signed下载到芯片上,注意选择地址为Primary Slot起始地址0x4000。


将1.0.0版本Image ***.bin.signed文件下载到Primary Slot的起始地址0x4000


在memory窗口检查当前Primary Slot中的内容,可以看到Image版本为1.0.0。


PC Primary Slot中存储了1.0.0版本的Image


点击Resume,可以发现PC指针停在Primary Slot的Application Project Reset向量处,此时PC指针地址0x00004c3c位于Primary Slot地址空间范围(0x4000~0x21FFF)。如下图所示:


PC指针运行在Primary Slot中


再次点击resume,则可以观察到代码运行在Primary Slot的Application Project中。

 

4

升级并验证

由于升级方式是基于应用层面的实现,因此依赖客户的设计。如果需要展示,则建议参考下面链接应用手册中的内容,对应的示例代码包含了遵循XModem协议利用UART传输Image。


RA6 MCU Advanced Secure Bootloader Design using MCUboot and Code Flash Dualbank Mode

https://www.renesas.com/us/en/document/apn/ra6-mcu-advanced-secure-bootloader-design-using-mcuboot-and-code-flash-dualbank-mode


在调试状态下,可以通过将待更新的Image文件下载到Secondary Slot中,重启即可使得升级生效。


在e2 studio中导入刚才的application project,并重新命名,如从之前的ra2l1_prim改为ra2l1_seco。


为使得代码可以在Secondary Slot中运行,需编辑ra2l1_seco\script\fsp.ld,将XIP_SECONDARY_SLOT_IMAGE = 1; 使能。


将XIP_SECONDARY_SLOT_IMAGE使能

 

在Application Project上稍作修改,比如原始的Project在EK-RA2L1上使三个LED(红绿蓝)一起闪烁,而我们将代码更新为只有一个LED(蓝色)闪烁。同时,将Image Version从1.0.0更改为1.1.0,重新Build Project,确认Debug文件夹下的.bin.signed重新生成了。


由于需要在调试ra2l1_prim时追踪代码在Secondary Slot的运行状态,因此我们需要将Secondary Slot对应***.elf文件加载到Debug Configuration中,如下图所示:


将secondary slot对应Image Symbol添加到primary slot Debug Configuration

 

现在将1.1.0版本的Image烧录到Secondary Slot中,点击Load Ancillary,选中***.bin.signed,目标地址选择0x22000。


将1.1.0版本Image下载到Secondary Slot中


下载成功后查看Memory中的内容,可以确认Secondary Slot存储了1.1.0版本的Image。


Secondary Slot保存了1.1.0版本的Image


按下Reset按钮,使得Bootloader运行,启动代码升级。


可以看到EK-RA4M3从三颗LED闪烁变为仅有一颗蓝色LED闪烁,表明升级成功。


假如在ra2l1_seco的hal_entry()循环中增加一个断点,则可以看到代码停在断点处。同时,PC指针(0x000225fc)位于Secondary Slot地址范围(0x00022000~0x0003FFFF)内。


PC指针在Secondary Slot中

 

升级完成后查看Primary Slot和Secondary Slot,发现两个Slot依然保留了原来的内容。Primary Slot中保存了1.0.0版本的Image文件,而Secondary Slot中保存了1.1.0版本的Image文件,如下图所示。


Primary Slot保存了1.0.0版本的Image,Secondary Slot保存了1.1.0版本的Image


需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/



1

END

1


推荐阅读

MCUboot系列(3-2)RA Swap模式在FSP中的支持

MCUboot系列(3-3)RA Swap模式在FSP中的支持

MCUboot系列(4)RA Swap模式下代码回滚在FSP中的支持

更多精彩,敬请关注

评论 (0)
  • ADB(Android Debug Bridge)是Google提供的命令行工具,用于帮助开发者与安卓设备进行通信。它在安卓应用开发和设备管理中非常重要,因为它可以帮助开发者安装、调试和卸载应用,访问设备文件系统,以及获取设备日志等。通过ADB,开发者能够在多种测试场景中模拟用户操作,优化应用性能和用户体验。 要使用ADB,首先需要确保电脑已安装ADB驱动,并且手机已开启USB调试模式。在Windows系统中,通常不需要手动下载ADB驱动,因为Windows 8/10/11已经自带了相应的驱动
    丙丁先生 2024-07-15 07:27 58浏览
  •     丝印层(Silkscreen Layer)位于PCB的外表面,采用白色或者其他颜色的墨水(ink)制作,没有电气特性。    丝印层得名于制造它所用的Silkscreen工艺。这个工艺很像创作版画,或者给T恤上做装饰图:先在一个网板(stencil)上刻划出图案,然后用辊子涂刷墨水,让墨水透过网板附着在PCB上,然后用紫外线或者加热的方式使墨水固化。    丝印层主要起指示作用。丝印层上面的字符、指示线可以直观地告诉观察PCB的
    电子知识打边炉 2024-07-13 14:27 22浏览
  • “颠覆与涅槃,颠覆自我与重新涅槃,让企业在变革中更完美的蜕变。”这是小鹏汽车董事长兼CEO何小鹏,在2024年开年时候说的话。如今2024年已经过去了一半,小鹏汽车的处境,似乎并没有变得更好,反而是状况不断。据不完全统计,近一年来,从小鹏汽车离职的高管团队,并不在少数。从此前宣布加入英伟达的智驾负责人吴新宙,到后面的AI负责人刘兰个川(Patrick)、软件负责人Parixit Aghera,再到此次离职的矫青春,小鹏汽车近一年都处于内部动荡之中。而在这种动荡之外,小鹏汽车也正在经历一场“冰与火
    刘旷 2024-07-15 09:56 60浏览
  •     PCB表面绝缘电阻(SIR, Surface Insulative Resistance)有IPC和Bellcore GR78-CORE两个主要标准。    IPC-TM-650 方法2.6.3.7 是针对SIR的。这个标准的英文版本可以免费从IPC官网下载获得。IPC(国际电子工业联接协会)是PCB标准化主要组织。    这个测试方法针对PCB裸板(即安装元器件之前的PCB),而且是使用IPC推荐的测试板/图案(Vehicle
    电子知识打边炉 2024-07-14 22:07 45浏览
  •     PCB上不同电气网络的连线之间,要有绝缘间隙(Clearance)和爬电距离(Creepage Distance)。画过PCB的朋友都知道,原理图上的电气连线(Wire)对应PCB Layout上的电气连线,PCB Layout上的电气连线对应铜导线。铜导线是在PCB覆铜层上,利用掩模(mask)和化学蚀刻(Etching)的方法,把PCB Layout上的铜导线部分留下,并去除非导线部分而做出来的。不同电气网络的连线中间要足够绝缘,足够干净,否则轻则漏电,重则短路。
    电子知识打边炉 2024-07-14 16:06 30浏览
  •     这篇分享对化学腐蚀/离子迁移的学习。    化学腐蚀的本质是氧化还原反应,即原电池。反应条件是:     1. 有可溶性电解质。电解质可能来自PCB的电镀或清洗工序,也可能来自残留的助焊剂(flux)。常见的有氯离子(有卤flux、汗液、盐雾)、酸(flux的酸);     2. 有溶剂。常见的是水(湿气),也可以是有机溶剂。树脂材料内部会吸附湿气,PCB加工过程有湿气,质量差的孔内壁会吸附湿气,V-cut分
    电子知识打边炉 2024-07-14 17:07 37浏览
  • UAVDT数据集是一个专为无人机图像检测而设计的数据集,其特点包括丰富的标注和多样化的场景,对无人机图像处理领域的研究具有重要的价值。 UAVDT(Unmanned Aerial Vehicle for Detection and Tracking)数据集是为了在无人机图像中进行目标检测和跟踪研究而创建的。这个数据集主要由从无人机捕获的高清视频序列组成,涵盖了各种环境和场景,如城市、乡村、森林和海边等。 在UAVDT数据集中,图像主要包括小型车辆、行人和自行车等类别的目标,这些目标在图像中被
    丙丁先生 2024-07-15 07:33 59浏览
  • 概述 SiPM测试系统的信号处理板使用了ADI的单片4通道的高速差分ADC信号,所以FPGA需要通过LVDS接口来收取差分高速ADC送出的差分串行数据。 本文讨论FPGA如何例化LVDS模块,以及几种用来收取外部ADC采样后送来的高速差分串行数据。10代器件LVDS实例化界面 在Intel的10代器件中有Arria、Cyclone、MAX以及Stratix几种,我们使用的是Cyclone系列10代GX产品。图1:LVDS模块例化界面 如图1所示为LVDS例化界面,具体使用方法可以参考1“LVDS
    coyoo 2024-07-14 12:25 105浏览
  • 在+24V输入增加了软起电路和防反接电路,先看电路原理图,如下,防反接电路的原理一目了然,G极达到Vth值,U28和U5就会导通,电流从D极导通到S极,详细规格书见下面。VDS,RDS(on)和ID很重要,如下,之前选的这款为何还是有问题呢,可以从温度和电压电流的应力入手,考察U28的软起参数是否合理。首先,看一看之前测的温度参数,用K型线的热电偶点的,如下,充电的时候,U28温度达到了123℃,如下,放电的时候,U28温度达到了120℃,如下,从上面的数据看,这样的U28温度,我们是接收不了的
    liweicheng 2024-07-13 19:06 42浏览
  • 非常荣欣参加了这次《运放电路环路稳定性设计》试读体验活动,同时非常感谢面包板论坛举办此活动。本书印刷还是非常新颖,具有精美漫画。下图为图书正面。 本书利用“原理分析、仿真计算、样机测试”三步学习法对运放电路环路进行稳定性设计,使读者能够对已有电路彻底理解,并且通过计算和仿真分析对原有电路进行改进,以便设计出符合实际要求的运放电路,达到实际应用的目的。首先,进行简单运放电路分析,运用反馈控制理论和稳定性判定准则进行时域/频域计算和仿真,当计算结果和仿真结果致时再进行实际电路测试,使三者有机统一;
    shenwen2007_656583087 2024-07-13 12:53 21浏览
  •     这篇分享对PCB电化学迁移(ECM, Electrochemical Migration)的学习。     ECM发生在导体之间,是一种需要PCB通电才能持续的电化学反应,和电镀的原理相同。反应条件是:     1. 有电场。存在电位差/电压降,一般来说电位差/电压降越大,电化学反应的速度越快。     2. 有可溶性电解质和溶剂,这个和化学腐蚀机理相同。     3. 有迁移通道。即电荷
    电子知识打边炉 2024-07-14 17:40 38浏览
  •   读报见文《中国的AI价格战和“不知道怎么用AI”的日本人 - FT中文网》  如题,好奇,中日两国对AI表现怎么是这样呢?  我人在中国,看新闻与现实,“中国的AI价格战”不足为奇。  没去过日本,只有看新闻,好奇的是日本人“不知道怎么用AI”?  第一想到的是日本不是很早就搞机器人了吗?  百度看看,日本什么时候开始使用机器人?  日本在20世纪80年代开始在各个领域推广使用机器人。日本将1980年称之为“机器人普及元年”。到了1985年以后,日本进入了被称为“智能机器人的时代”。  智能
    自做自受 2024-07-13 22:40 184浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦