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

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

3天内不再提示

瑞萨RZ/T2H平台多核异构的应用场景分析

瑞萨嵌入式小百科 来源:瑞萨嵌入式小百科 2025-12-15 11:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文以RZ/T2H多轴控制/驱动的实例,介绍RZ/T2H平台的多核异构应用场景。分为:

示例软件基本框架;

使用RemoteProc启动R核;

程序启动后,R核之间通过数据共享来传递数据;

RZ/T2H的启动流程。

该例程运行于RZ/T2H平台,该平台由两个CR52核和四个CA55核构成。其中,CA55核跑Linux OS+EtherCAT主站软件;CR52_1运行EtherCAT从站,与主站实现9轴的控制/状态数据实时交互;CR52_2运行9轴的电机驱动程序。

01基本框架

947a6156-d3eb-11f0-8c8f-92fbcf53809c.png

图一 多核异构的软硬件框架

EtherCAT Controller(CiA402)位于CA55 Linux 侧,负责上位通信控制。包括EtherCAT主站通信、电机控制指令下发和现场数据收集等等。

EtherCAT Slave device(CiA402)位于CR52_1上,运行EtherCAT从站协议栈,执行EtherCAT数据帧处理与设备对象管理,运行在裸机环境中,保证实时性。

CA55端的ECAT主站和CR52_1端的ECAT从站,通过内部端口连接,EtherCAT数据流直接在2个域之间流动,不需要从外部端口回环;

9-axis motor drive位于CR52_0,负责伺服电机驱动(多轴机器人控制)。功能包括:PWM计算和输出,编码器反馈数据采集,电流环/速度环/位置环计算和数据反馈,运行在裸机环境。

运行于CA55的CODESYS RUNTIME(EtherCAT Master),通过EtherCAT协议向CR52_1发送控制数据,CR52_1通过共享内存向CR52_0转发解析后的数据,CR52_0控制外设来控制电机。

同理,电机的实时状态数据由CR52_0采集,通过共享内存机制传递到CR52_1,CR52_1再通过EtherCAT协议把数据传回主站。

02CA55端采用OpenAMP的RemoteProc来启动CR52_0和CR52_1

94d5fd36-d3eb-11f0-8c8f-92fbcf53809c.png

图二 remoteProc启动CR52_0和CR52_1

Remoteproc代码位于/sources/linux-renesas/drivers/remoteproc/rz_rproc.c

2.1 操作结构体

952f334c-d3eb-11f0-8c8f-92fbcf53809c.png

rz_rproc_ops是一个struct rproc_ops类型的结构体,它定义了远程处理器(remoteproc)的操作函数集。这个结构体在`rz_rproc_probe`函数中被使用,具体是在创建新的remoteproc实例时作为参数传递给devm_rproc_alloc函数:

左右滑动查看完整内容

rproc= devm_rproc_alloc(dev, np->name, &rz_rproc_ops, NULL, sizeof(*pdata));

该操作包含以下操作函数:

prepare:准备远程处理器的资源

start:启动远程处理器,当系统需要启动远程处理器时会调用

stop:停止远程处理器,当需要停止远程处理器时会调用

da_to_va:设备地址到虚拟地址的转换,见源码中的A55核和R52核之间的地址访问转换关系

parse_fw:解析固件,当需要加载固件时,会调用 parse_fw 和相关的 ELF 操作函数

2.2 probe的驱动框架层次:

左右滑动查看完整内容

module_platform_driver(rz_rproc_driver)
 |-- 设备树匹配 "renesas,rz-cr52"
 |-- rz_rproc_probe()
   |-- devm_kzalloc() 分配私有数据
   |-- devm_rproc_alloc() 分配 remoteproc 结构
   | |-- 关联 rz_rproc_ops 操作函数集
   |-- 读取设备树属性
   | |-- renesas,rz-core
   | |-- renesas,rz-swint
   | |-- renesas,rz-start_address
   | |-- renesas,rz-autoboot
   |-- pm_runtime_enable() 启用电源管理
   |-- rproc_add() 注册远程处理器
     |-- 创建 sysfs 接口
     |-- 初始化远程处理器状态

当执行echo gcc_rzn2h_cr52_0_rpmsg_linux_baremetal_demo.elf> /sys/class/remoteproc/remoteproc0/firmware时,会调用firmware_store修改firmware的名字。

当执行echo start > /sys/class/remoteproc/remoteproc0/state,会产生state_store->rproc_boot->request_firmware->rproc_fw_boot->rproc_start,此时调用rz_rporc.c中的rproc->ops->start

左右滑动查看完整内容

rproc_boot()
 |-- rproc_prepare_device()
 | |-- rz_rproc_prepare() // 我们驱动中的准备函数
 |-- request_firmware()   // 从文件系统加载固件
 |-- rproc_fw_sanity_check()
 | |-- rz_rproc_ops.sanity_check()
 |-- rproc_parse_fw()
 | |-- rz_rproc_parse_fw() // 解析固件内容
 |-- rproc_load_segments()
 | |-- rproc_elf_load_segments()
 |-- rproc_start()
   |-- rz_rproc_start()  // 启动远程处理器

2.3 设备树节点分析

95e0442a-d3eb-11f0-8c8f-92fbcf53809c.png

963e3954-d3eb-11f0-8c8f-92fbcf53809c.png

设备树节点的compatible="renesas,rz-cr52"会匹配到驱动中的:

左右滑动查看完整内容

staticconststructof_device_idrz_rproc_of_match[] = {
  { .compatible="renesas,rz-cr52"},
  {/* end of list */},
};

从而找到该驱动。

资源初始化流程:

`reg`属性定义了两个内存区域:

cr52_sram:0x10000000-0x101FFFFF (SRAM区域)

cr52_ddr:0x3E0000000-0x3E9000000(DDR区域)

`memory-region`指向三个预留内存区域:

`vdev0vring0`:虚拟设备环形缓冲区0

`vdev0vring1:虚拟设备环形缓冲区1

`vdev0buffer`:虚拟设备共享缓冲区

左右滑动查看完整内容

renesas,rz-core = <0x0>;    // CR52核编号
renesas,rz-swint = <10>;    // 软中断通道
renesas,rz-start_address = <0x00000000>; // 启动地址

注意CR52_0:

启动地址0x00000000,CR52_1:启动地址0x10061000。这两个地址需要与firmware编译后的地址一致。

2.4 remoteProc的start本地实现

我们提取其中的static int rz_rproc_start(struct rproc*rproc)来做一下简单介绍:

prcrs_base= ioremap(PRCRS,0x4);
prcrn_base= ioremap(PRCRN,0x4);

设置PRCRS和PRCRN,用于使能GPIO写功能。

接下来建立CA55视角的地址空间:

左右滑动查看完整内容

atcm_base_0 = ioremap(BSP_PRV_ATCM_AXIS_CR520_ADDRESS,
(CR52_ATCM_END - CR52_ATCM_START));

同理得到:atcm_base_1,btcm_base_0,sysram_base。

从T2H的用户手册上,也可以查到A55核访问异构核的对应地址。

96ee6874-d3eb-11f0-8c8f-92fbcf53809c.png

图三 A55访问ATCM/BTCM/SRAM的物理地址

接下来是拷贝CR52_1的firmware

9746cae6-d3eb-11f0-8c8f-92fbcf53809c.png

拷贝完成后Reset CR52_0,通过设置SWRCPU0为0x4321A502来release和reset,便开始执行该firmware。

启动脚本为:

左右滑动查看完整内容

# 将存在的固件名写入remoteproc sysfs 入口
echoCR52_0_motor.elf>/sys/class/remoteproc/remoteproc0/firmware
echoCR52_1_ECAT.elf>/sys/class/remoteproc/remoteproc1/firmware
#启动远端处理器
echostart>/sys/class/remoteproc/remoteproc0/state
echostart>/sys/class/remoteproc/remoteproc1/state

03CR52_0与CR52_1之间的共享数据

CR52_0和CR52_1之间通过核间通信(基于共享内存机制),交换电机控制参数和状态信息。使用 Shared Memory驱动(r_shared_memory,通过瑞萨FSP生成)和核间中断机制,实现核间数据交换,同时通过硬件信号量和软件标志位来保证数据完整性和互斥访问。

97fc2b0c-d3eb-11f0-8c8f-92fbcf53809c.png

图四 CR52_0与CR52_1之间的数据共享

98577034-d3eb-11f0-8c8f-92fbcf53809c.png

图五 数据共享的消息序列图

数据传输

CR52_1使用SHARED_MEMORY API将数据结构写入到2个CPU的共享内存区域。写入操作仅在数据发生变化时进行,从而避免不必要的访问,写入完成,CR52_1产生一个核间中断通知CR52_2。

数据接收

CR52_2收到CR52_1发来的中断,开始从共享内存区读取数据,同时在回调函数会设置一个标志位,以标志数据读取过程完成。

T2H自带2MB的SRAM,将CR52_0和CR52_1之间的1.5KB数据共享放到了如下地址:

99619446-d3eb-11f0-8c8f-92fbcf53809c.png

图六 数据共享地址

04T2H的启动顺序

99bc0340-d3eb-11f0-8c8f-92fbcf53809c.png

图七 T2H多核启动顺序

BL2表示引导加载程序的第2阶段(Boot Loader stage 2),BL3表示引导加载程序的第3阶段(Boot Loader stage 3),WFI表示Wait For Interrupt。

T2H上电后,始终从CR52_0启动,BOOTROM根据BL2的加载地址决定是从CR52_0继续启动还是跳转到CA55启动;

上图的启动流程:

系统上电后,Boot function将BL2加载到 SystemRAM中,并跳转到其入口地址执行。

BL2将BL3和U-Boot加载到DDR SDRAM中,并跳转到BL3的入口地址执行。

BL3为U-Boot做一些初始化准备工作,然后跳转到U-Boot的入口地址执行。

U-Boot加载Linux并启动它。

通过remoteproc加载并启动Cortex-R52 CPU0 的固件。

Cortex-R52 CPU0开始执行其固件。

通过remoteproc加载并启动Cortex-R52 CPU1 的固件。

Cortex-R52 CPU1开始执行其固件。

以上完成多核的启动,再配合CA55端的CODESYS RUNTIME,可以完成驱控一体的系统搭建。9轴驱控视频请见:

RZ T2H完整的软硬件设计规范、参考例程、工具等,请登录以下网址获取更多资料。

RZ/T2H - Advanced High-End MPU with Integrated Powerful Application Processing and High-Precision Real-Time Control for 9-Axis Motor Control | Renesas

https://www.renesas.com/en/products/microcontrollers-microprocessors/rz-mpus/rzt2h-advanced-high-end-mpu-integrated-powerful-application-processing-and-high-precision-real-time

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

    关注

    88

    文章

    11635

    浏览量

    218086
  • ethercat
    +关注

    关注

    19

    文章

    1384

    浏览量

    43581
  • 多核异构
    +关注

    关注

    0

    文章

    24

    浏览量

    5615

原文标题:RZ/T2H多核异构的应用场景分析

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    RZ T2H更换DDR流程和工具介绍

    RZ T2H是由2个R52核和4个A55核构成。支持LPDDR4,其传输可以达到3.2Gbps(1600 MHZ),总线宽度为32位,两
    的头像 发表于 06-27 14:54 2051次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RZ</b> <b class='flag-5'>T2H</b>更换DDR流程和工具介绍

    RZ/T2H PCIe通信的调试方法

    本文阐述了RZ/T2H的PCIe外设作为EP,在Windows上做驱动开发、速率测试时,可能会遇到无法被Windows识别的问题。本文总结了一些调试方法和技巧,来排查问题原因和解决方法。
    的头像 发表于 11-20 16:53 4793次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RZ</b>/<b class='flag-5'>T2H</b> PCIe通信的调试方法

    教你如何使用RZ/T2L RZ/N2L RSK J-Link OB

    M无缝连接的硬件架构,可用于AC servo等更高性能的控制系统。此外,RZ/T2L提供了与MPU和MCU可兼容、可扩展的软件平台。它使
    的头像 发表于 05-07 10:18 4327次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>教你如何使用<b class='flag-5'>RZ</b>/<b class='flag-5'>T2</b>L <b class='flag-5'>RZ</b>/N<b class='flag-5'>2</b>L RSK J-Link OB

    RZ T2H PCIe裸机程序开发和Linux下的配置介绍

    电子最新推出RZ/T2H工业专用MPU,单芯片提供强大应用处理性能,多协议工业网络及高达9轴高精度实时控制,支持Linux,RTOS及baremetal操作。除了强大CPU性能和9
    的头像 发表于 12-18 11:14 2516次阅读
    <b class='flag-5'>RZ</b> <b class='flag-5'>T2H</b> PCIe裸机程序开发和Linux下的配置介绍

    openEuler Summit 2021:多核异构用场景

    openEuler Summit 2021-边缘&嵌入式分论坛上,阐述了多核异构的应用场景
    的头像 发表于 11-10 15:15 2195次阅读
    openEuler Summit 2021:<b class='flag-5'>多核</b><b class='flag-5'>异构</b>应<b class='flag-5'>用场景</b>

    产品详解 | 电子RZ/T2M MPU

    产品详解 | 电子RZ/T2M MPU
    的头像 发表于 03-13 08:05 1967次阅读
    产品详解 | <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RZ</b>/<b class='flag-5'>T2</b>M MPU

    产品详解 | 电子RZ/T2L MPU

    产品详解 | 电子RZ/T2L MPU
    的头像 发表于 03-21 08:05 2022次阅读
    产品详解 | <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RZ</b>/<b class='flag-5'>T2</b>L MPU

    RZ/T2H新产品量产上市

    先进高端工业专用MPU RZ/T2H于2024年11月上市,集成了强大的应用处理功能和高精度实时控制性能,高达9轴电机控制。这款产品是在现有RZ/N2L,
    的头像 发表于 12-04 15:39 1864次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RZ</b>/<b class='flag-5'>T2H</b>新产品量产上市

    工业MPU新标杆,多协议工业以太网+运动控制 - RZ/T2H 新产品

    先进高端工业专用MPU RZ/T2H于2024年11月上市,集成了强大的应用处理功能和高精度实时控制性能,高达9轴电机控制。这款产品是在现有RZ/N2L,
    的头像 发表于 12-06 16:57 1269次阅读
    工业MPU新标杆,多协议工业以太网+运动控制 - <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RZ</b>/<b class='flag-5'>T2H</b> 新产品

    电子量产高性能工业设备MPU RZ/T2H

    日本电子公司本月宣布,其面向工业设备的MPU(微处理器单元)RZ/T2H已正式进入量产阶段。这款新品预计将被广泛应用于机器人等工业设备领域,以其卓越的性能和强大的功能,为用户带来更
    的头像 发表于 12-27 11:23 1253次阅读

    电子RZ MPU家族精品RZ/N2L产品介绍

    生态合作伙伴RT-Thread推出了一款高性能、多功能以太网MPU开发板EtherKit,搭载电子RZ/N
    的头像 发表于 12-23 14:10 1403次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RZ</b> MPU家族精品<b class='flag-5'>RZ</b>/N<b class='flag-5'>2</b>L产品介绍

    交流日进行中,米尔演讲-RZ/T2H高性能模组赋能工业产品创新

    。米尔电子作为的IDH生态合作伙伴发表演讲,并展出RZ/T2H的核心板开发板、技术方案等。米尔活动现场会上,米尔电子产品经理张先生发表了题为"米尔
    的头像 发表于 03-13 08:05 827次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>交流日进行中,米尔演讲-<b class='flag-5'>RZ</b>/<b class='flag-5'>T2H</b>高性能模组赋能工业产品创新

    RZ/T2H MPU数据手册和产品介绍#集成了强大的应用处理能力和精确的实时控制功能

    Renesas Electronics RZ/T2H MPU是一款功能强大的高端微处理器单元,在单个芯片上集成了强大的应用处理能力和精确的实时控制功能,非常适合用于自动化设备和机器人技术
    的头像 发表于 05-21 10:24 894次阅读
    <b class='flag-5'>RZ</b>/<b class='flag-5'>T2H</b> MPU数据手册和产品介绍#集成了强大的应用处理能力和精确的实时控制功能

    RZ/V2H平台支持部署离线版DeepSeek -R1大语言模型

    RZ/V2H平台支持部署离线版DeepSeek -R1大语言模型
    的头像 发表于 05-13 17:07 1407次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RZ</b>/V<b class='flag-5'>2H</b><b class='flag-5'>平台</b>支持部署离线版DeepSeek -R1大语言模型