Memory Protection Unit (MPU) Sample

Overview

This application provides a set options to check the correct MPU configuration against the following security issues:

  • Read at an address that is reserved in the memory map.

  • Write into the boot Flash/ROM.

  • Run code located in SRAM.

If the MPU configuration is correct each option selected ends up in an MPU fault.

Building and Running

This project can be built and executed as follows:

west build -b v2m_beetle samples/mpu/mpu_test
west flash

To build the single thread version, use the supplied configuration file for single thread: prj_single.conf:

west build -b v2m_beetle samples/mpu/mpu_test -- -DCONF_FILE=prj_single.conf
west build -t run

To build a version that allows writes to the flash device, edit prj.conf, and follow the directions in the comments to enable the proper configs.

Sample Output

uart:~$ mpu read
<err> os: ***** BUS FAULT *****
<err> os:   Precise data bus error
<err> os:   BFAR Address: 0x24000000
<err> os: r0/a1:  0x00009a5c  r1/a2:  0x00000008  r2/a3:  0x20001aa8
<err> os: r3/a4:  0x24000000 r12/ip:  0x00000000 r14/lr:  0x000029b7
<err> os:  xpsr:  0x21000000
<err> os: Faulting instruction address (r15/pc): 0x000003c8
<err> os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
<err> os: Current thread: 0x20000708 (shell_uart)
<err> os: Halting system
uart:~$ mpu write
write address: 0x4000
<err> os: ***** MPU FAULT *****
<err> os:   Data Access Violation
<err> os:   MMFAR Address: 0x4000
<err> os: r0/a1:  0x00000000  r1/a2:  0x0000000e  r2/a3:  0x0badc0de
<err> os: r3/a4:  0x00004000 r12/ip:  0x00000004 r14/lr:  0x000003ab
<err> os:  xpsr:  0x61000000
<err> os: Faulting instruction address (r15/pc): 0x000003b2
<err> os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
<err> os: Current thread: 0x20000708 (shell_uart)
<err> os: Halting system
uart:~$ mpu run
<err> os: ***** MPU FAULT *****
<err> os:   Instruction Access Violation
<err> os: r0/a1:  0x00009a5c  r1/a2:  0x00000001  r2/a3:  0x20001aa8
<err> os: r3/a4:  0x20000000 r12/ip:  0x00000000 r14/lr:  0x00006673
<err> os:  xpsr:  0x60000000
<err> os: Faulting instruction address (r15/pc): 0x20000000
<err> os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
<err> os: Current thread: 0x20000708 (shell_uart)
<err> os: Halting system