【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】

文章目录

    • [Cortex-M33 SAU 介绍](#Cortex-M33 SAU 介绍)
      • [SAU 的主要功能包括](#SAU 的主要功能包括)
      • [SAU 寄存器](#SAU 寄存器)
      • 配置示例

Cortex-M33 SAU 介绍

在 ARMv8-M 架构中,SAU(Security Attribution Unit)是安全属性单元,用于配置和管理内存区域的安全属性。SAU 是 ARM TrustZone 技术的一部分,该技术提供了在单个处理器中创建安全(Secure)和非安全(Non-secure)状态的能力,允许系统同时运行受信任的安全代码和非受信任的非安全代码。

SAU 能够定义多个内存区域,并为每个内存区域指定其是否可被安全状态和/或非安全状态访问。这样,SAU 可以帮助创建一个隔离的安全环境,其中敏感的代码和数据可以被保护,不受非安全代码的影响。

SAU 的主要功能包括

  • 内存区域定义:SAU 允许你定义一系列的内存区域,并为每个区域指定安全属性。这些区域可以是 RAM、ROM、外设或其他类型的内存。
  • 安全属性配置:对于每个区域,可以配置其是否为安全或非安全访问。这是通过设置区域的属性位来完成的。
  • 默认内存映射:SAU 也允许配置默认内存映射,即对于没有明确通过 SAU 区域定义的内存,指定它们的安全状态。

SAU 寄存器

SAU 的配置是通过一系列的系统控制寄存器来完成的,主要包括:

Address Register Description
0xE000EDD0 SAU_CTRL SAU Control Register
0xE000EDD4 SAU_TYPE SAU Type Register
0xE000EDD8 SAU_RNR SAU Region Number Register
0xE000EDDC SAU_RBAR SAU Region Base Address Register
0xE000EDE0 SAU_RLAR SAU Region Limit Address Register
0xE000EDE4 SFSR Secure Fault Status Register
0xE000EDE8 SFAR Secure Fault Address Register
  • SAU_CTRL :SAU 控制寄存器,用于启用或禁用 SAU,以及配置默认的内存映射属性。
    • bit[1]:
      • 0- Memory is marked as Secure and is not Non-secure callable.
      • 1- Memory is marked as Non-secure.
    • bit[0]:
      • 0-SAU is disabled;
      • 1-SAU is enabled;
  • SAU_TYPE :SAU 类型寄存器,提供 SAU 支持的区域数量和配置信息。
    • bit[7:0]: SAU regions. The number of implemented SAU regions.
  • SAU_RNR : SAU 区域编号寄存器,用于选择要配置的 SAU 区域。
    • bit[7:0]:Region number. Indicates the SAU region accessed by SAU_RBAR and SAU_RLAR.
  • SAU_RBARSAU_RLAR :SAU 区域基址和限制寄存器,用于定义具体 SAU 区域的起始地址和结束地址,并指定区域的安全属性。
    • SAU_RBAR bits [31:5]: Base address. Holds bits [31:5] of the base address for the selected SAU region.
    • SAU_RLAR bits [31:5]: Limit address. Holds bits [31:5] of the limit address for the selected SAU region.
    • NSC, bit [1]: Non-secure callable. Controls whether Non-secure state is permitted to execute an SG instruction from this
      region.
      • 0: Region is not Non-secure callable.
      • 1: Region is Non-secure callable.
    • bit [0]:
      • 0-SAU region is disabled,
      • 1-SAU region is enabled.

配置示例

假设我们想要将一块内存区域配置为安全区域,我们可以按照以下步骤进行:

  1. 确定内存区域的起始地址和结束地址。
  2. 选择 SAU 区域编号并配置 SAU_RNR 寄存器。
  3. 设置 SAU_RBAR 寄存器,定义区域的起始地址和安全属性。
  4. 设置 SAU_RLAR 寄存器,定义区域的结束地址。
  5. 如果需要,配置 SAU_CTRL 寄存器以启用 SAU 并设置默认内存映射。

配置 SAU 通常在系统启动时进行,作为启动代码或安全初始化例程的一部分。正确配置 SAU 对于确保系统的安全性是至关重要的,因此需要仔细规划内存布局,并根据系统需求设置正确的安全属性。

由于 SAU 的配置涉及到系统的安全架构,因此需要具备相应的权限才能进行配置。在非安全状态下的代码通常无法修改 SAU 的设置,以保护安全状态下的资源不被非安全代码破坏。

相关推荐
CodingCos1 年前
【ARMv8M Cortex-M33 系列 2.3 -- SEGGER JFlash 烧写命令介绍】
cortex-m33·jflash·jlink·segger
CodingCos1 年前
【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】
arm开发·cortex-m7·cortex-m33·cortex-m3·cortex-m4·cortex-m0·cortex-m23