Peripherals that have non-secure security mapping have their address starting with 0x4XXXXXXX. Peripherals that have secure security mapping have their address starting with 0x5XXXXXXX.
Peripherals with a user-selectable security mapping are available at an address starting with the following:
- 0x4XXXXXXX, if the peripheral security attribute is set to non-secure
- 0x5XXXXXXX, if the peripheral security attribute is set to secure
Access to a secure peripheral using the 0x4XXXXXXX address range will result in bus error, regardless if the CPU is executing secure or non-secure code.
Similarly, a CPU running secure code attempting to access a non-secure peripheral using the 0x5XXXXXXX address range will result in bus error.
Peripherals with a split security mapping are available at an address starting with the following:
- 0x4XXXXXXX for non-secure access and 0x5XXXXXXX for secure access, if the peripheral
security attribute is set to non-secure
- Secure registers in the 0x4XXXXXXX range are not visible for secure or non-secure code, and an attempt to access such a register will result in write-ignore, read-as-zero behavior
- Secure code can access both non-secure and secure registers in the 0x5XXXXXXX range
- 0x5XXXXXXX, if the peripheral security attribute is set to secure
Any attempt to access the 0x50000000 to 0x5FFFFFFF address range from non-secure code will be ignored and generate a SecureFault exception.
The following table contains the address mapping for the three peripheral types in each configuration.
| Security-features and configuration | Mapped at 0x4XXXXXXX? | Mapped at 0x5XXXXXXX? |
|---|---|---|
| Secure peripheral | No | Yes |
| Non-secure peripheral | Yes | No |
| Split-security peripheral, with attribute=secure | No | Yes |
| Split-security peripheral, with attribute=non-secure | Yes, restricted functionality | Yes |