Access permissions are controlled by TrustZone, MPC, and SPU security peripherals.
The following figure shows the system security control modules for memory, peripherals, GPIO, and PPI.
The Arm Cortex®-M33 CPU enforces TrustZone security internally, before issuing bus transactions. For security checks internal to the Arm Cortex-M33, see TrustZone security. After the internal CPU security check, the transaction is available on the bus.
Secure and non-secure memory has to be configured in the SAU and MPC.
The security attribution of a bus transaction from the Arm Cortex-M33 is determined by the CPU, SAU, and IDAU settings. See TrustZone security for more information.
For RISC-V and peripherals, the attribution of the bus transaction is determined by the SPU settings.
The destination's security attribute is a combination of MPC and SPU configurations.
| Abbreviation | Description |
|---|---|
| NS | Non-secure – TrustZone security attribute is non-secure |
| S | Secure – TrustZone security attribute is secure |
| NSC | Non-secure callable – TrustZone security attribute is non-secure callable |
| IDAU | Arm implementation defined attribution unit |
| SAU | Arm security attribution unit |
| SPU | Nordic system protection unit |
| MPC | Nordic memory privilege controller |
Memory access overview
| Bus manager security attribute | Destination memory security attribute | Access successful | MPC bus fault and error event |
|---|---|---|---|
| S | S | Yes | No |
| NS | S | No | Yes |
| S | NS | Yes | No |
| NS | NS | Yes | No |
Peripheral access overview
Peripherals are moved in the memory map based on their security association. Non-secure peripherals can be accessed through addresses starting with 0x4 while secure peripherals are accessible in the memory region starting with 0x5.
| Bus manager security attribute | Destination memory security attribute | Address region | Access successful | SPU bus fault and error event |
|---|---|---|---|---|
| S | S | 0x5 | Yes | No |
| S | S | 0x4 | No | Yes |
| NS | S | 0x5 | No | Yes |
| NS | S | 0x4 | No | Yes |
| S | NS | 0x5 | No | Yes |
| S | NS | 0x4 | Yes | No |
| NS | NS | 0x5 | No | Yes |
| NS | NS | 0x4 | Yes | No |
- For split security peripherals, bus faults are not generated for blocked split security bit accesses. Reads as 0, write is ignored.
- In a split peripheral, access is blocked to secure registers using the non-secure 0x4 memory region because it is through non-secure transactions. Make sure to use the secure memory region to access secure registers.