TrustZone中的SAU模块寄存器

SAU内部的寄存器都是32位的,下表是SAU相关寄存器的一个列表:

地址名称类型复位值处理器状态描述
0xE000EDD0SAU_CTRLRW0x00000000Secure
Non-Secure
SAU控制寄存器
RAZ/WI
0xE000EDD4SAU_TYPERO0x0000000xSecure
Non-Secure
SAU类型寄存器,表征可用regions数目
RAZ/WI
0xE000EDD8SAU_RNRRW---Secure
Non-Secure
SAU Region Number,选择一个Region
RAZ/WI
0xE000EDDCSAU_RBARRW---Secure
Non-Secure
SAU Region 基址
RAZ/WI
0xE000EDE0SAU_RLARRW---Secure
Non-Secure
SAU Region Limit Address Register
RAZ/WI

SAU_CTRL 寄存器

BitsFieldDescription
[31:2]保留保留位
1ALLNS标记Non-Secure,当SAU_CTRL.ENABLE为0的时候,该位表示内存为Non-secure还是Secure
0ENABLE使能SAU

SAU_TYPE 寄存器

BitsFieldDescription
[31:8]保留保留位
[7:0]SREGIONSAU Regions SAU中实现的Regions数量

SAU_RNR 寄存器

BitsFieldDescription
[31:8]保留保留位
[7:0]REGIONRegion Number表示SAU_RBAR和SAU_RLAR访问的SAU区域

SAU_RBAR 寄存器

BitsFieldDescription
[31:5]BADDRbase address, SAU region的基址
[4:0]保留保留位

SAU_RLAR 寄存器

BitsFieldDescription
[31:5]LADDRLimit address. Bits[4:0] as 0x1F
[4:2]保留保留位
1NSC0 - Region not Non-Secure Callable
1 - Region is Non-Secure Callable
0ENABLE0 - SAU region Enabled
1 - SAU region not enabled

SAU Region 配置

当使用SAU的时候,没有在SAU Region的内存都会默认配置为Secure模式。

SAU Region 配置

  • Region通过SAU_RLAR分别设置
  • 当SAU_RLAR.ENABLE = 1 且 SAU_RLAR.NSC = 0,Region是Non-Secure的
  • 当SAU_RLAR.ENABLE = 1 且 SAU_RLAR.NSC = 1,Region是Secure且Non-Secure可调用的

配置示例

下面是一个CMSIS风格的两个Region的配置示例

// Configure SAU using CMSIS
// Configure SAU Region 0
// Start Address 0x00200000
// Limit Address 0x003FFFE0
// Secure non-scure callable
// Use CMSIS to access SAU Region Number Register (SAU_RNR) // Select region 0
SAU->RNR = (0);
// Set SAU Region Base Address Register (SAU_RBAR) SAU->RBAR = (0x00200000U & SAU_RBAR_BADDR_Msk);
// Set SAU Region Limit Address Register (SAU_RLAR)
SAU->RLAR = (0x003FFFE0U & SAU_RLAR_LADDR_Msk) | 1U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U

// Configure SAU Region 1
// Start Address 0x20200000
// Limit Address 0x203FFFE0
// Non-secure
// Select region 1
SAU->RNR = (1);
// Set SAU Region Base Address Register (SAU_RBAR)
SAU->RBAR = (0x20200000U & SAU_RBAR_BADDR_Msk);
// Set SAU Region Limit Address Register (SAU_RLAR)
SAU->RLAR = (0x203FFFE0U & SAU_RLAR_LADDR_Msk) | 0U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U
// Enable SAU
// Use CMSIS to access SAU Control Register (SAU_CTRL)
// Set ENABLE bit[0] to 1
// Set ALLNS bit[1] to 1 All memory is secure when SAU is disabled
SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU->SAU_CTRL_ENABLE_Msk) |
((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ;

相关文章

发表新评论