• 589查看
  • 0回复

[芯片硬件] 汽车ECU虚拟化(三) -- U2A内存保护

[复制链接]


该用户从未签到

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

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


目录

1.内存管理概述

2. 内存保护功能

2.1 SPID

2.2 Slave Guard

3.小结
1.内存管理概述

为了讲清楚U2A 在各种运行模式、特权模式下的区别,其实首先应该搞清楚不同模式下可以操作的寄存器有哪些。但是看到这个寄存器模型就头大。
汽车ECU虚拟化(三) -- U2A内存保护w1.jpg
再加上之前没有研究过G4MH的内核,所以这里暂且留个坑。我们还是来看看继续往下看,先来看看内存管理。U2A是没有MMU的,那么它是如何实现虚拟化所需要的MMU机制的呢?MPU,大家见得多了,memory protection unit,用于防止未授信程序、突发异常事件等访问系统资源,来保证整个MCU的正常运行。在U2A的虚拟化模式中,MPU还被细分成了三个块内容,如下:


    Layered Memory ProtectionMemory Protection Setting Bank FunctionMemory Protection Setting High Speed Save and Return Function
2. 内存保护功能

我们这里先来看看功能安全,44章节功能安全 44.5 memory protection,了解常规模式下面memory protection的功能。


    Memory访问控制
通过设置保护区域的上下边界进行访问控制

    CPU运行模式的访问管理
通过CPU中的几个状态位用于控制对资源的访问,并且根据每个程序的可靠性级别,将这些位组合使用以执行适当的保护

    通过SPID进行保护       使用SPID (system protection identifier)来检查区域是否匹配。
根据芯片手册介绍,Memory Protection整体架构如下:
汽车ECU虚拟化(三) -- U2A内存保护w2.jpg
该内存保护架构由几部分组成:SPID模块、每个核里的MPU、外设的Slave Guard以及memory的Slave Guard。


    MPU:所有CPU均通过MPU进行访问权限控制,它们不会发起访问MPU禁止的地址的相关请求;Slave Guard:在总线层面上保护指定的memory或者外设,防止未授权访问;可以看到针对不同外设、memory有不同的guard。例如PE Guard(针对CPU内部RAM的保护)、CRG(针对Cluaster RAM保护)、针对外设的PG。SPID:System Protection identifier,是一种软件任务的标识符,它分两种情况:一种主机内部自带SPID寄存器,可以直接配置,例如DMA、CPU(也叫PE,proces element);另一种是在SPID模块里配置。
2.1 SPID

我们首先来看SPID,有如下功能:


    每个总线主机的SPID可以软件灵活配置;一个SPID可以分配给一个主机或者多个主机通过SPIDMASK来限制主机的使用SPID的配置可以上锁,冷复位或系统复位解锁,就和英飞凌SMU一样,配好了就锁住。
那么具体应该怎么使用呢?先看框图:
汽车ECU虚拟化(三) -- U2A内存保护w3.jpg
SPID寄存器用于配置bus master,比较分散的是,CPU、DTS/DMAC和MAU等主机的SPID寄存器配置是在自己模块内部配置,如Gb Ether等SPID值的配置就是在在SPID模块内部,如上图所示。首先我们来看总共有多少个寄存器可以用于配置SPID。我们继续来看示例:在默认情况下,每一个Bus Master的SPID值如下:
汽车ECU虚拟化(三) -- U2A内存保护w4.jpg
注意,最左侧这一列就相当于给主机分配一个ID值,这个与英飞凌TC3xx固定Master Tag ID还是有所区别。从上图我们可以看到,在U2A中作为master看待的外设、内核总计15个,总计32个寄存器可以配置ID值,默认状态下Reserved的是4-16、18、20、21、30共计17个寄存器,但是可不可以把这些reserved分配给其他同一个主机呢,答案是肯定的,如下:
汽车ECU虚拟化(三) -- U2A内存保护w5.jpg
进一步,可不可以把一个SPID分配给多个外设呢,当然也是可以的,如下图:
汽车ECU虚拟化(三) -- U2A内存保护w6.jpg
上图中,RHSIF0\FlexRay\Ether均使用了24这个SPID,CPU2占据了FlexRay1 22这个SPID。 那么要给Bus Master分配 SPID,需要按照如下步骤:

    设置SPIDKCPROT寄存器使能SPID寄存器配置功能;设置SPID掩码寄存器(BMnSPIDMSK)定义每个bus master可以定义的SPID值设置SPID掩码锁存寄存器保证SPID掩码寄存器不被修改;根据SPID掩码寄存器设置SPID寄存器的值;设置SPIDKCPROT寄存器关闭SPID寄存器配置功能;配置内存保护/保护设置,以防止由SPID和其他标识符识别的错误访问。
那么配置了SPID,是不是就可以保证访问限制。不然,还需要Slave Guard的配置。2.2 Slave Guard

从系统架构图,我们可以看到不同种类的Guard Type。
汽车ECU虚拟化(三) -- U2A内存保护w7.jpg


    PEG
PE Guard,用于每个PE(Process Element)控制Local RAM和INTC1是否可以被其他bus master访问

    CRG
Cluster RAM Guard,用于 Inter-VM 通信或者Cluster RAM的访问

    PG
Peripheral Guard,用于保护外设访问保护
那么需要slave guard属性配置如下:
优先级保护属性内容
HighSEC使能后,禁止non-secure主机访问
...DBG使能后,允许debug主机访问目标slave
UM该属性关闭后,user mode下所有主机都不能访问slave

SPID[m]使能后,与该slave定义的SPID相等的master SPID就可访问该slave

WG使能后,master就可以写目标slave
LowRG使能后,master就可以读目标slave
具体每个Slave Guard我们后面再讲。3.小结

可以看到,U2A的内存保护设计还是很灵活的,目前在用法上仅仅使用了MPU。后续如果有用到SPID了,我再详细描述。




该用户从未签到

发表于 15-3-2025 16:02:02 | 显示全部楼层
汽车ECU虚拟化(三)U2A内存保护目录

针对您的询问,关于U2A内存管理概述部分需着重说明其针对不同运行模式和特权模式时的特性及可操作的寄存器。考虑到复杂性和篇幅限制,暂不深入讨论寄存器模型。关于没有MMU的U2A如何实现虚拟化所需的MMU机制,答案在于其利用MPU(内存保护单元)实现内存的保护和虚拟化。MPU在ECU中扮演着关键角色,负责内存访问控制和保护,以实现安全、稳定的系统运行。后续将详细阐述其内存保护功能如SPID和Slave Guard的具体实现和应用。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 16:02:02 | 显示全部楼层
汽车ECU虚拟化(三)-- U2A内存保护目录

针对您的需求,我为您提供专业的回复:

一、内存管理概述
关于寄存器模型的理解,确实需要投入较多精力。考虑到您提到的复杂性,后续我们会专门讲解不同模式下的寄存器操作。至于内存管理,U2A由于没有MMU(内存管理单元),需要通过其他方式实现虚拟化所需的内存管理机制。

二、内存保护功能
U2A通过特殊硬件实现内存保护,例如SPID(安全保护标识符)和Slave Guard等机制。这些机制能够确保ECU在运行时,不同软件组件之间互不干扰,从而提高系统的稳定性和安全性。具体细节会在后续内容中详细阐述。

三、小结
目前我们主要讨论了内存管理概述及部分内存保护功能。关于如何实现虚拟化所需的MMU机制,U2A通过其他方式如MPU(内存保护单元)进行内存保护。由于涉及到具体技术细节,我们会在后续内容中逐步展开讲解。请持续关注后续更新,共同学习进步。
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 19-8-2025 17:11 , Processed in 0.396889 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.