文章目录
- Cortex-M33 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;
- bit[1]:
- 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_RBAR 和 SAU_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.
配置示例
假设我们想要将一块内存区域配置为安全区域,我们可以按照以下步骤进行:
- 确定内存区域的起始地址和结束地址。
- 选择 SAU 区域编号并配置 SAU_RNR 寄存器。
- 设置 SAU_RBAR 寄存器,定义区域的起始地址和安全属性。
- 设置 SAU_RLAR 寄存器,定义区域的结束地址。
- 如果需要,配置 SAU_CTRL 寄存器以启用 SAU 并设置默认内存映射。
配置 SAU 通常在系统启动时进行,作为启动代码或安全初始化例程的一部分。正确配置 SAU 对于确保系统的安全性是至关重要的,因此需要仔细规划内存布局,并根据系统需求设置正确的安全属性。
由于 SAU 的配置涉及到系统的安全架构,因此需要具备相应的权限才能进行配置。在非安全状态下的代码通常无法修改 SAU 的设置,以保护安全状态下的资源不被非安全代码破坏。