• 483查看
  • 0回复

[芯片硬件] TC3xx--神奇的LMU内存保护机制

[复制链接]


该用户从未签到

发表于 21-1-2024 10:04:16 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录

01.基本概述

02.理解Master Tag ID

03.LMU memory保护使能

04.小结

01.基本概述
在英飞凌TC3xx中,每个CPU除了有自己的DLMU外,在SRI总线还挂着几块SRAM,这几块SRAM由LMU(Local Memory Unit)进行权限控制。RAM的具体地址(上述9H用于cached访问,Bh用于非cached访问):
TC3xx--神奇的LMU内存保护机制w1.jpg

LMU除了本身硬件机制(如ecc)外,还提供了16个对SRAM区域的保护功能,这个机制主要是通过Master Tag ID的识别来限制对目标SRAM权限的访问。要实现对RAM区域的保护,每个区域需要由6个寄存器定义,分别对应受保护SRAM区域的上下限、针对Mastr Tag ID的读权限(2个寄存器)、针对Mastr Tag ID的写权限(2个寄存器)。与CPU的MPU相似,当定义的两块区域有交叉时, 是根据最高权限来进行分配的;

区域A:CPU0读写权限

区域B:CPU0只读权限

A\B交叉的区域:CPU0读写权限

02.理解Master Tag ID

与Tricore的MPU不一样,LMU的memory保护是通过Master Tag ID来区分的,那么什么叫Master Tag ID。 根据TC3xx User Mannul章节4.10.7 ,在整个系统外设总线(SPB)或者SRI总线上,所有的Master接口都分配到了一个独立的ID,以便软件调试或者MCDS的时候辨别是哪个外设或者CPU执行了当前事务。以下图为例

TC3xx--神奇的LMU内存保护机制w2.jpg

如果CPU0想要访问LMU0中的资源,就需要CPU0使用MIF通过MCI发送请求给LMU0,那么不同的MIF就通过Tag ID来进行分辨。 如表格所示:

TC3xx--神奇的LMU内存保护机制w3.jpg




    SRI:Shared Resource Interconnect

    SPB:System Peripheral Bus

    BBB:Back Bone Bus

    DMI:Data memory interface

我们今天暂时先不管上面CPU0两个不同DMI对应的Tag ID为何不同,主要关注LMU的memory 保护机制。

03.LMU memory保护使能
有了Master Tag ID,那么我们要看如何开始配置寄存器实现内存保护功能。 一个区域保护有如下6个寄存器:



    RGNLAx(x=0-15):定义受保护区域的下限

    RGNUAx(x=0-15):定义受保护区域的上限

    RGNACCENWAx(x=0-15):定义受保护区域的master(id= 0-31)的写访问

    RGNACCENWBx(x=0-15):定义受保护区域的master(id = 32-63)的写访

    RGNACCENRAx(x=0-15):定义受保护区域的master(id= 0-31)的读访问

    RGNACCENRBx(x=0-15):定义受保护区域的master(id = 32-63)的读访问

简单举两个例子,地址下限寄存器如下:

TC3xx--神奇的LMU内存保护机制w4.jpg

可以看到使用SRI地址的bit31-5用于作为边界,为什么低5位不要呢?因为手册上说明最小保护单位为32byte。写权限配置寄存器如下:
TC3xx--神奇的LMU内存保护机制w5.jpg

所以,配置就很简单了:

明确保护区域,配置好上下限,

根据需要开启或者关闭对应master tag id的读写权限。

开测

事实上,真的有上述那么简单吗?我做了这么一个试验:

1.LMU0从B004 000+32KB,使用了Master Tag ID保护,CPU0仅有写操作;

2.在上述位置定义变量

3.测试CPU0写访问操作

代码示例如下:
void lmu_test(void){int cpu_id;int i;
    cpu_id = GetCoreIdcpu_id();
printf("CPU %d original lmusfdata:%u\n", cpu_id, testdata[32 * 1024 - 1]);for (i = 0; i < 32 * 1024; i++)    {        lmutestdata = cpu_id;    }printf("CPU %d modified lmusfdata:%u\n", cpu_id, testdata[32 * 1024 - 1]);}CPU0仍然可以进行写访问。
这就有点奇怪了,因此回看芯片手册,发现这样一句话:

TC3xx--神奇的LMU内存保护机制w6.jpg

针对LMU0的区域,我只配置了一组寄存器,而其他15组没有配置,查看寄存器默认值,[LA,UA] = [0x00000000, 0xFFFF FFE0]。

问题就来了,交叉的区域是根据最高权限来的,所以CPU0仍然可以通过其他寄存器访问LMU0的受保护区域,如下:

TC3xx--神奇的LMU内存保护机制w7.jpg

也就是说,想要CPU0不能访问RAM0,还得把余下所有的寄存器组均配置,这里有两种方式就不一一列举了。

最后一个for循环将所有寄存器全部配置了,测试结果cpu0无法写入。

04.小结

这用起来就很麻烦了,假设现在想CPU0独占RAM0,CPU1独占RAM3,那首先配置2套寄存器,只开启CPU0/1的读写权限;为了保证独占成功,还得去配置其余14套寄存器,那应该如何去分寄存器呢?例如RAM0的独占写几套寄存器?RAM3独占需要写几套寄存器?

不知道各位有没有实际应用过这种以master tag id方式保护的内存保护方法,欢迎大家积极讨论。


该用户从未签到

发表于 15-3-2025 14:12:00 | 显示全部楼层
尊敬的读者,您好!关于TC3xx中的LMU内存保护机制,这是一个在英飞凌微控制器中非常关键的特性。LMU负责管理CPU的本地内存,通过设置不同的Master Tag ID来区分不同内存区域的访问权限,从而实现内存保护。它不仅能够保证内存的安全访问,还能有效防止非法侵入和系统崩溃。该机制通过硬件层面的控制,如错误检查与纠正(ECC),确保了数据的完整性和系统的稳定运行。对于开发者而言,了解和掌握LMU内存保护机制是开发安全、稳定嵌入式系统的重要一环。关于更详细的解读和操作指南,请查阅后续的内容。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 14:12:00 | 显示全部楼层
根据您给出的概述信息,我简单阐述下关于TC3xx的LMU内存保护机制的专业理解:

在英飞凌TC3xx微控制器中,LMU(Local Memory Unit)不仅具备硬件机制如ECC(错误检查和纠正),更重要的是它提供了对SRAM区域的保护功能。这些保护主要是通过Master Tag ID来识别并限制对特定目标SRAM区域的访问。Master Tag ID是LMU用于区分不同CPU或模块访问SRAM的标识。通过配置不同的Master Tag ID及其对应的权限,LMU可以有效地控制不同CPU或模块对SRAM的读写访问,从而确保系统稳定性和数据安全性。这一机制在嵌入式系统开发中尤为重要,能显著提高系统的可靠性和稳定性。

以上为对TC3xx中LMU内存保护机制的简要介绍,具体细节和实现方式还需参考相关文档和资料。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 10:47 , Processed in 0.407922 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.