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

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

3天内不再提示

RZT2H CR52双核BOOT流程和例程代码分析

RA生态工作室 2025-04-03 17:14 次阅读

RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

RZ T2H 简介

https://www.ramcu.cn/product/rz/t/t2h/

RZ/T2H具有工业机器人、运动控制器和可编程逻辑控制器 (PLC) 等控制器所需的处理能力和外设功能。

LSI reset release时,其内置的BOOTROM总是从CR52_0开始执行,即我们可以把CR52_0定义为主核。如果系统配置为程序从External XSPI_FLASH 启动,BOOTROM首先根据存放在external Flash起始位置的Parameter中的定义,从Flash中加载Loader程序。

Parameters for the Loader:

存放在External Memory区域的起始位置,存放着与程序加载相关的关键信息,如例如在各个启动模式下,启动期间的CPU缓存设置,用于与外部存储器通信的引导外设(xSPI或SDHI)的配置以及加载程序的size等等。

Parameters for Loader的结构如下:

wKgZO2fsk0qAZr5UAAFMtnI_9vk404.png

除了上述信息,其中DSET_ADDR_NML是跟多核启动相关的关键参数;该参数决定Loader Program的加载地址,而BOOTROM根据这个地址决定接下来在哪个核上,从哪个地址开始执行LOADER程序。

这里补充一下T2H程序结构和基本加载启动流程:

T2H平台,烧录到External Flash上的内容逻辑上分成3部分:

  1. 上述的Parameter for Loader;
  2. Loader program;
  3. Application program;

启动时,BOOTROM根据Parameter for Loader从Flash加载Loader program到指定位置开始执行,然后Loader program再加载Application program并跳转执行。

在T2H多核架构下(4xCA55+2xCR52)Loader parameter中的:DEST_ADDR_NML有2个可能的地址范围,即BTCM7或者7System SRAM:

wKgZPGfsk0qAdzn6AAEPsQBTjY4802.png

如果BOOTROM判断到加载地址是在BTCM中,那CR52_0继续执行(second boot CPU仍然是CR52_0),从加载地址开始执行LOADER PROGRAM,并完成整个启动流程。

如果BOOTROM判断到加载地址是SYSTEM,系统会认为second boot CPU是CA55_0,BOOTROM 就会Reset release CA55_0,并把CR52_0转换到WFI状态,然后让CA55_0执行Loader program。

以上介绍了在T2H多核系统中的主核First boot CPU和Second boot CPU的启动过程,但是其他的Core此时都还是在Reset 状态,等待 Second boot CPU为其加载程序和释放。

接下来以52双核为例,说明CR52_0如何完成自身程序加载和加载并启动CR52_1的过程;

在这个示例中,CR52_0用作Second boot CP-U,以下步骤是CR52_0的Loader Program需要完成的工作:

根据FSP时钟树,配置LSI的各个Clock;

初始化Loader Program的Data段和BSS段;

配置ADDRESS_EXPANDER_INIT:

Address EXPANDER的作用是:通过映射的方法,使能32 bit Master访问4G area之外的地址空间,详见UM 13.4.5;

TrustedZone 400初始化;

COPY应用程序的PRG段/DATA段/BSS段,到相应的运行RAM空间。如果需要启动其他内核,则把其他内核的PRG/DATA,也COPY到对应RAM区域,然后Release目标内核;

核间通信用到的信号量初始化;

Master MPU初始化;

GIC初始化和系统定义的中断的初始化配置;

TFU初始化;

Main()跳转应用;

其中步骤5中启动目标CPU(CR52_1)

的步骤如下图:

wKgZPGfsk0uAfiIzAAK8JTsGLJs484.png

上述步骤中需要特别强调的地方:

启动过程,需要从CR52_0访问CR52_1的ATCM空间。根据T2H的架构,这个访问只能通过AXI总线,且必须把CR52_1的ATCM region通过MPU配置为Device属性,并且只能使用LD和ST指令;

wKgZO2fsk0uASJqXAAIz3ixvGPk055.png

对应到代码中,上面的7个步骤在函数SystemInit()文件startup.c中都能找到对应的实现;

重点说明函数bsp_cpu_reset_release()该函数实现上述步骤的2,3,4,6,7;

重点分析步骤6:

代码段如下:

wKgZO2fsk0uAOftCAAGxVYrykPU559.png

这段代码完成的动作:

把1st分支指令[inst]经AXIS接口复制到CR52_1 ATCM的起始地址(dst_cpu1:0x2100_000);

复制跳转指令要用到的目标地址(addr);

操作到的存储地址如图示:

wKgZO2fsk0yATkjgAAE1as_PNXY961.png

最后步骤7:

wKgZPGfsk0yANoXSAAAkM9n_lG4759.png

CR52_1跳转到入口函数system_init,开始执行:

wKgZPGfsk0yAbBpvAAFA_7le4Ms386.png

以上,以双CR52 Core为例,说明了T2H多核系统的BOOT流程。

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

    关注

    68

    文章

    19772

    浏览量

    233123
  • Boot
    +关注

    关注

    0

    文章

    153

    浏览量

    36497
收藏 人收藏

    评论

    相关推荐
    热点推荐

    瑞萨RZT2H CR52BOOT流程例程代码分析

    CR52 Core为例,说明了T2H多核系统的BOOT流程
    的头像 发表于 04-02 09:28 947次阅读
    瑞萨<b class='flag-5'>RZT2H</b> <b class='flag-5'>CR52</b><b class='flag-5'>双</b><b class='flag-5'>核</b><b class='flag-5'>BOOT</b><b class='flag-5'>流程</b>和<b class='flag-5'>例程</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>

    u-boot启动流程分析

    今天给大家全面的分析一下u-boot启动流程。整理这篇文章花费时间较长,中间很长时间未更新,希望这篇文章对大家有所帮助。
    发表于 07-12 15:16 1111次阅读
    u-<b class='flag-5'>boot</b>启动<b class='flag-5'>流程</b><b class='flag-5'>分析</b>

    使用STM32CUBEMX生成 H745代码,利用cubeide debug时发现M7阻塞进入error_handler是为什么?

    使用STM32CUBEMX 生成 H745代码,利用cubeide debug时发现M7因为以下
    发表于 05-20 07:16

    STM32H7间如何通信?

    STM32H7间通信的方法,主要是CM7和CM4之间如何进行数据传递
    发表于 03-12 07:34

    如何在F28M35H52C1中调试程序?

    求助: 我用的是F28M35H52C1,C28和M3中都有程序,不知道怎样下载调试。已经看过controlSUITE,没有找到相关的教程,希望可以得到专业的帮助。 非常感谢!!
    发表于 08-28 08:41

    请问28377例程是如何运行的?

    麻烦各位能不能指导下如何在ccs6中运行例程的,例程选择的是lab1_led_cpu1和lab1_led_cpu2。我的想法是首先点击红
    发表于 09-12 11:02

    请问如何使用embedded studio调试 6750evk 的例程?

    如何使用embedded studio调试 6750evk 的例程? 在HPM_SDK中, 我只看到了脚本的调试, 请问在embed
    发表于 05-26 06:47

    STM32H747I-DISCO为啥需要

    我正在使用STM32H747I-Disco的开发板, 发现有许多AI相关的例程,但都只用了Cortex-M7,没有Cortex-M4的相关代码
    发表于 08-05 07:56

    U-Boot代码分析

    U-Boot代码分析for (;;) {len = readline (CFG_PROMPT);flag = 0; /* assume no special flags for now
    发表于 02-10 14:57 28次下载

    F28M35H52C原理图

    TI的芯片,F28M35H52C原理图
    发表于 11-02 10:58 9次下载

    STC89C52_51单片机_例程4_交通灯_C语言代码

    STC89C52_51单片机_例程3_交通灯_C语言代码代码及文件下载链接审核通过后挂上交通灯需要设置一个flag标志位,当到达1s时调用display()函数更新显示主要就是disp
    发表于 11-23 17:06 22次下载
    STC89C<b class='flag-5'>52</b>_51单片机_<b class='flag-5'>例程</b>4_交通灯_C语言<b class='flag-5'>代码</b>

    AN5557 STM32H745/755和STM32H747/757系列架构

    AN5557 STM32H745/755和STM32H747/757系列架构
    发表于 11-21 17:06 1次下载
    AN5557 STM32<b class='flag-5'>H</b>745/755和STM32<b class='flag-5'>H</b>747/757系列<b class='flag-5'>双</b><b class='flag-5'>核</b>架构

    UM2840_STM32H7安全手册

    UM2840_STM32H7安全手册
    发表于 11-22 08:21 0次下载
    UM2840_STM32<b class='flag-5'>H</b>7<b class='flag-5'>双</b><b class='flag-5'>核</b>安全手册

    Spring Boot启动 Eureka流程

    (String[] args) { SpringApplication .run (EurekaServer.class, args); }} 上面的代码是最最平常的 Spring Boot 启动类
    的头像 发表于 10-10 11:40 1087次阅读
    Spring <b class='flag-5'>Boot</b>启动 Eureka<b class='flag-5'>流程</b>

    安全启动Secure Boot流程

    安全启动-Secure Boot 除了NSPE和SPE两个环境的沟通流程之外,secure boot也是Trusted Firmware很重要的设计环节。 Secure boot最主要
    的头像 发表于 11-02 16:45 1806次阅读
    安全启动Secure <b class='flag-5'>Boot</b><b class='flag-5'>流程</b>