TrustZone中的SAU模块寄存器
SAU内部的寄存器都是32位的,下表是SAU相关寄存器的一个列表:
地址 | 名称 | 类型 | 复位值 | 处理器状态 | 描述 |
---|---|---|---|---|---|
0xE000EDD0 | SAU_CTRL | RW | 0x00000000 | Secure Non-Secure | SAU控制寄存器 RAZ/WI |
0xE000EDD4 | SAU_TYPE | RO | 0x0000000x | Secure Non-Secure | SAU类型寄存器,表征可用regions数目 RAZ/WI |
0xE000EDD8 | SAU_RNR | RW | --- | Secure Non-Secure | SAU Region Number,选择一个Region RAZ/WI |
0xE000EDDC | SAU_RBAR | RW | --- | Secure Non-Secure | SAU Region 基址 RAZ/WI |
0xE000EDE0 | SAU_RLAR | RW | --- | Secure Non-Secure | SAU Region Limit Address Register RAZ/WI |
SAU_CTRL 寄存器
Bits | Field | Description |
---|---|---|
[31:2]保留 | 保留位 | |
1 | ALLNS | 标记Non-Secure,当SAU_CTRL.ENABLE为0的时候,该位表示内存为Non-secure还是Secure |
0 | ENABLE | 使能SAU |
SAU_TYPE 寄存器
Bits | Field | Description |
---|---|---|
[31:8] | 保留 | 保留位 |
[7:0] | SREGION | SAU Regions SAU中实现的Regions数量 |
SAU_RNR 寄存器
Bits | Field | Description |
---|---|---|
[31:8] | 保留 | 保留位 |
[7:0] | REGION | Region Number表示SAU_RBAR和SAU_RLAR访问的SAU区域 |
SAU_RBAR 寄存器
Bits | Field | Description |
---|---|---|
[31:5] | BADDR | base address, SAU region的基址 |
[4:0] | 保留 | 保留位 |
SAU_RLAR 寄存器
Bits | Field | Description |
---|---|---|
[31:5] | LADDR | Limit address. Bits[4:0] as 0x1F |
[4:2] | 保留 | 保留位 |
1 | NSC | 0 - Region not Non-Secure Callable 1 - Region is Non-Secure Callable |
0 | ENABLE | 0 - SAU region Enabled 1 - SAU region not enabled |
SAU Region 配置
当使用SAU的时候,没有在SAU Region的内存都会默认配置为Secure模式。
- 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) ;
最后更新于 2019-08-04 00:35:33 并被添加「安全 ARM TrustZone」标签,已有 4333 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。