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

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

3天内不再提示

RA8x1系列MCU如何将通过FSP将代码/数据放置到TCM中

瑞萨MCU小百科 来源:瑞萨MCU小百科 2024-06-19 14:56 次阅读

TCM是什么?

随着单片机MCU)在各种应用中的使用越来越广泛,对其性能和响应速度的要求也越来越高。为了满足这种需求,MCU的主时钟频率往往会不断提高,以提升系统的处理能力和性能。然而,随着主时钟频率的增加,访问外部存储器(如闪存、RAM)所需的访问时间也要求相应减少,这可能会成为系统性能的瓶颈之一。在这种情况下,使用TCM(Tightly-Coupled Memory)成为了一种解决方案。

Tightly Coupled Memory(TCM)紧耦合内存是通过专用的接口直接连接到处理器的存储器区域,它提供单周期访问,避免其他存储器可能存在的仲裁延时和延迟。

RA8x1 Cortex-M85内核有2种TCM类型:Instruction TCM (ITCM) 指令TCM和Data TCM (DTCM) 数据TCM。

RA8x1有64KB ITCM和64KB DTCM。

ECC保护(代码生成和纠正逻辑)。

RA8x1支持ITCM和DTCM ECC功能,可以通过OFS2.INITECCEN设置来启用和禁用。

57029e92-2df2-11ef-a4c8-92fbcf53809c.png

RA8x1 CPU方框图

TCM具有以下优点:

低延迟访问:TCM与处理器核心之间的直接连接消除了访问延迟,使得数据和指令能够更快速地被处理器访问,从而提高了系统的响应速度。

高带宽:TCM通常具有更高的带宽,可以支持处理器对数据和指令的高速读写,提升了系统的整体性能。

节省功耗:由于TCM与处理器核心直接连接,不需要通过总线进行数据传输,因此可以降低功耗。此外,由于访问延迟较低,处理器可以更快地完成任务并进入休眠模式,进一步降低功耗。

提高实时性能:对于需要实时响应的应用程序,TCM的低延迟和高带宽特性使得处理器能够更快地访问关键数据和指令,从而提高了系统的实时性能。

增强安全性:TCM可以用于存储敏感数据和关键代码,通过与处理器核心的紧密耦合,可以降低数据泄露和恶意攻击的风险,提高系统的安全性。

减少对外部存储器的依赖:TCM可以用于存储频繁访问的数据和指令,减少了对外部存储器的访问次数,降低了总体的访问延迟和功耗。这对于一些资源有限的嵌入式系统尤为重要。

增强可靠性:TCM的直接连接和高速访问特性可以提高系统的可靠性,减少因外部存储器或总线故障而导致的系统性能下降或故障。

因此,TCM适用于许多不同的应用和场景,特别是对于需要高性能、低延迟和实时响应的应用,其优势更加突出。以下是一些适合使用TCM的应用和场景:

实时控制系统:对于需要快速响应的实时控制系统,如工业机器人、航空航天控制系统、医疗设备等,TCM可以提供所需的低延迟和高带宽,确保系统能够及时、准确地响应各种控制指令。

信号处理应用:TCM对于需要大量数据处理和信号处理的应用非常适用,例如无线通信系统、雷达系统、图像处理系统等。通过将频繁访问的数据和指令存储在TCM中,可以提高系统的处理速度和效率。

物联网设备:随着物联网设备的普及,对于需要在资源有限的设备上实现高性能和实时响应的应用,TCM可以帮助提高系统的性能和能效,同时减少对外部存储器和网络带宽的依赖。

高性能计算:在需要进行复杂计算和大规模数据处理的高性能计算应用中,TCM可以提供更快速和可靠的数据访问,从而提高系统的计算性能和吞吐量。

RA8x1系列MCU如何将通过FSP将代码/数据放置到TCM中?

瑞萨电子灵活配置软件包(FSP)是用于嵌入式系统设计的高质量增强型软件包,支持瑞萨电子RA产品家族ARM微控制器,提供用户友好的界面且可灵活扩展,确保从入门级到高性能的整个RA微控制器的软件兼容性。FSP包括高性能、低内存占用的业界一流的HAL驱动程序。还包含集成了Azure RTOSFreeRTOS的中间件协议栈,能够简化通信和安全等复杂模块的实现。e2 studio IDE提供了对图形化配置工具和智能代码生成器的支持,从而使编程和调试变得更加轻松快捷。

瑞萨FSP链接脚本提供TCM内存区域段定义

memory_region.ld中的内存大小定义:

5724d9bc-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

内存区域定义:

574a46a2-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

如下原型定义可用于将用户代码/数据放置到TCM中。在启动过程中,.itcm_data和.dtcm_data区域将通过闪存中存储的初始化代码进行数据初始化。.dtcm_bss区域已初始化为零。

5774af28-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

FSP中的ITCM段定义:

57908bee-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

FSP中的DTCM段定义:

57c85bc8-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

TCM例子分析

下图是一个RA8x1 MCU实际使用TCM的例子,它使用了ITCM和DTCM。图片中的右边为RA8x1 MCU的系统地址空间。

57f14fec-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

具体分析过程为:

1紫色的代码“uint16_t i;”全局变量,它运行的时候,分配的地址是在从0x2200_0000开始的On-chip SRAM中。

2红色的代码“BSP_PLACE_IN_SECTION(“.dtcm_data”)uint8x16_t rega_8, regb_8, regc_8, regd_8;”,全局变量,但是由于这些变量前面添加了BSP_PLACE_IN_SECTION(“.dtcm_data”),这表示将这些变量放置到DTCM中,它运行的时候,分配的地址是在从0x2000_0000开始的DTCM中。

3青色的代码“void hal_entry(void)”,它是函数,运行的时候,分配的地址是在从0x0200_0000开始的On-chip flash中。

4深绿色的代码“void helium_test(void)”,它是函数,但是由于这些变量前面添加了BSP_PLACE_IN_SECTION(“.itcm_data”),这意味着,该代码运行的时候,分配的地址是从0x0000_0000开始的ITCM中。

下图是上面描述的代码在e2 studio中使用了LLVM工具链编译并仿真运行的截图,可以发现右边表达式窗口中的i,rega_8, regb_8, regc_8, regd_8,helium_test,hal_entry这些代码或者变量的地址和刚刚分析的结果是相符的。

580d4986-2df2-11ef-a4c8-92fbcf53809c.png

点击可查看大图

需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,进入瑞萨技术论坛寻找答案或获取在线技术支持。

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

    关注

    68

    文章

    18608

    浏览量

    224485
  • 单片机
    +关注

    关注

    6011

    文章

    44153

    浏览量

    624384
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16211

    浏览量

    345509
  • TCM
    TCM
    +关注

    关注

    0

    文章

    30

    浏览量

    12712

原文标题:RA8x1 TCM使用指南

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

收藏 人收藏

    评论

    相关推荐

    请问STM8S如何将中断代码拷贝RAM运行?

    STMS在写EEPROM时,中断停掉,如何将中断代码拷贝RAM运行??? 求助各位大神!!!
    发表于 05-17 07:37

    如何将CoreMark程序移植STM32

    CoreMark代码现在我们已经有了一个初步的项目工程。接下来要做的就是添加CoreMark代码1前面下载的CoreMark代码文件拷
    发表于 11-17 00:54

    如何将ADC代码转换为电压

    许多初步了解模数转换器(ADC)的人想知道如何将ADC代码转换为电压。或者,他们的问题是针对特定应用,例如:如何将ADC代码转换回物理量,如电流、温度、重量或压力。在这个包含两篇文章的
    发表于 07-23 04:45

    如何将存储在变量数据传输到DAC?

    大家好,我知道通过DMA传输数据的概念。但我仍然困惑,如何将一个8数据传送到DAC,例如:1
    发表于 10-15 07:52

    请问FLASH如何将大量数据存储内部闪存?

    ,但我无法弄清楚如何将大量数据存储内部闪存。任何人都可以帮我解决这个问题吗?提前致谢。谢谢&问候
    发表于 04-22 09:47

    如何将变量存储PIC24FF64GA002内存

    你好。我想把一些整数和字符串变量存储特定的数据EEPROM地址。我使用MPLAB X 3.40、XC16和PIC24FJ64 GA02。我试着在互联网上找到一些工作
    发表于 04-27 13:03

    如何将丝印放置底层

    在cadence17.2如何将顶层丝印放置到底层丝印,器件已经放置到底层,但是丝印还是在顶层。
    发表于 09-28 11:51

    如何将float数据存到flash

    项目场景:在灵动MCU平台基于逐飞科技开源的RTT库,一个float类型的数据变量保存到flash;问题描述:写和读flash数据的接口
    发表于 12-13 06:54

    怎样微型ROS移植机器人的RA MCU

    瑞萨电子公司与专门从事中间件解决方案的公司 eProsima 合作,微型 ROS 移植 RA 微控制器 (MCU) ,以便更轻松地开发
    发表于 02-11 06:19

    如何将CubeMX项目从一系列MCU迁移到新系列MCU

    如何将 CubeMX 项目从一系列 MCU 迁移到新系列MCU
    发表于 01-16 07:02

    如何将X-CUBE-NFC5代码集成平台中?

    我手头有一块ST25R3911B-Disco(NFC板),我的平台是STM32F767IGT6。我的问题是如何将 X-CUBE-NFC5 代码集成到我现有的项目 (Keil uVision5)
    发表于 02-02 07:22

    如何在没有任何额外代码的情况下程序复制SRAM

    正确的,因为程序(从 SPI 闪存启动)不知道如何在没有任何额外代码的情况下程序复制 SRAM 。那么选项“应用程序链接到 ram”
    发表于 03-14 12:11

    如何从SD启动到I/D TCM

    通过写入 FlexRAM 配置(在 startup_mimxrt1062.c )更改大小会导致问题,因为代码是从 TCM 运行的。看起来 DCD(设备配置
    发表于 04-17 06:54

    LM5066如何将数据转换为负温度?

    晶体管 MMBT3904LT1G 的集电极和基极连接到 lm5066 的二极管引脚。发射器接地。电路板被放置在 -20 摄氏度的热室。在读取本地温度寄存器 0x​​
    发表于 05-11 07:54

    使用RA2E1 MCUFSP实现超低设计

      RA2E1 MCU 组评估套件 FPB-RA2E1实施各种连接器,允许访问 RA2E1 MCU、板载 E2 仿真器、用户开关、LED 上
    的头像 发表于 04-25 10:10 1653次阅读
    使用<b class='flag-5'>RA</b>2E1 <b class='flag-5'>MCU</b>和<b class='flag-5'>FSP</b>实现超低设计