嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > 对于S32G xRDC(扩展资源域控制器)的理解

对于S32G xRDC(扩展资源域控制器)的理解

xRDC简介

项目上,有很多外设和内存资源都可以被利用,例如核心,总线,内存区域,从外设等等。为了能够将这些资源划分到不同的分区或者域中,我们需要借助xRDC完成,由xRDC来管理访问权限,系统内存保护和外设隔离等等。

划分的域,可以为每种特权等级定义访问权限策略,关于Arm的特权等级介绍,可以参考:


基于xRDC分配不同的资源,可以为同一芯片上的应用强制应用FFI。常见的应用场景有:

  • 隔离实时应用和非实时应用

  • 隔离安全代码和非安全代码

  • 隔离第三方非可信应用和可信应用

xRDC没有自己的中断,如果监测到非法访问,在M核上会引发Bus Fault异常,在A核上会引发Data Abort异常。关于M核上异常的其他类型,可以参考:

xRDC子模块

  • xRDC_MGR:管理子模块,协调所有的读写操作

  • xRDC_MDAC:域分配控制器,处理资源分配以及域ID生成

  • xRDC_MRC:内存区域控制器,基于预编程的区域描述寄存器实现从存储的访问控制

  • xRDC_PAC:外设访问控制器,基于预编程的域访问控制寄存器实现从外设的访问控制

  • S32G有两个xRDC实例:xRDC_0(system instance)和xRDC_1(accelerator subsystem instance)。

    全局xRDC配置定义了16个域(domain),每个域都有固定的域序号。

    xRDC是如何工作的

    我们以一个读操作的总线事务为例,Bus Master(M核)会提供以下信息:

    • master ID(每个bus master都有固定的值,例如Cortex-M7_0 AXI是8)

    • Secure/non-secure bit(0代表安全访问)

    • Priv/user mode(1代表特权模式)

    PID会和master ID信息一起输入到MDAC,由MDAC根据这一对ID分配一个domain ID。

    domain ID,secure_in以及priv_in信息会给到MRC/PAC,如果访问地址是内存,则由MRC处理,如果访问地址是外设,则由PAC处理,MRC/PAC决定是否为合法访问。

    需要注意的是,xRDC默认是未使能状态,需要在启动代码中配置并使能。

    MDAC

    每个core的AXI/AHB端口都有对应的MDAC,也即每个core有两个MDAC。

    由于M核不支持trust zone,所以,除了特殊情况外,所有的访问都被视为安全访问。

    Priv位来自于M核模式状态,MDAC不改变它。

    A核有trust zone,所以secure_in会根据实际情况变化。不过由于A核支持MMU,建议使用MMU对内存和外设进行访问控制。

    对于非核心Master,不需要pid输入,did_in信号固定为0(eDMC除外)。

    MRC/PAC

    根据slave port是存储还是外设,对应有MRC和PAC。如上所说,它们基于Domain ID/Priv/Secure信息决定访问权限。

    对于MRC/PAC配置寄存器的访问,必须在secure/priv模式下。

    根据PAC slot号(需要在S32G文档附带的memory map信息中查询),PAC对应有PDAC_Wx_y寄存器记录相关设置,如果Domain ID/Priv/Secure都符合,那么则允许访问。

    MRC流程类似,根据所在地址范围,查询对应的MRCx控制器,基于MRGD_Ww_x寄存器设置判断是否有权限访问。

    错误处理

    当发生非法访问时,错误信息会记录在域错误寄存器中。

    DERRLOCn:哪个PAC/MRC触发的错误

    DERRm_W0:访问的地址

    DERRm_W1:错误属性,例如哪个MRC,什么类型的访问,哪个域

    DERRm_W2:未使用

    DERRm_W3:异常完成后再次启用以上寄存器,此时W0/W1信息被清除

    Nxp Rm模块可以配置xRDC。

    参考

    【玩转多核异构】处理器对共享外设和资源的调配方法_卡卡罗特GT的博客-CSDN博客

    Understanding the S32G Extended Resource Domain Controller (XRDC) | NXP Semiconductors

    Extended Resource Domain Controller xRDC