Development platforms, compilers for TrustZone

Hello All,


  1. Write a secure program where some part of the program resides in a secure zone.
  2. Code instrumentation: I would like to instrument the compiled binary that runs on the device 

I could find some options, however, I cannot differentiate them and choose accordingly for my requirement.

ARM KEIL (Microcontroller tools), CMSIS, Arm Mbed (IoT device platform), Clang, GCC, freeRTOS, CMSIS RTOS

Can somebody suggest the development platforms, compilertoolchains etc that I can use to achieve the requirements? 


  • TrustZone software development is supported by multiple tool chains including Keil MDK (ARM), IAR, gcc, etc.

    (Clang is the compiler frontend inside LLVM based compilers, and Arm Compiler 6 is based on LLVM. Both Keil MDK and Arm DS-5 toolchains use Arm Compiler 6 within the IDE).

    Links to various document are listed here:

    For instance, Keil application note 291 ( provided lots of information on using Keil MDK. Other compiler vendors also have their application notes.

    CMSIS is an umbrella term for a number of projects, for example:

    - CMSIS-CORE provides low level APIs for various Arm Cortex-M & Cortex-A (recently added) processors

    - CMSIS-DSP provides DSP functions for various Arm Cortex-M processors

    - CMSIS-NN provides Nural network functions for a selection of Arm Cortex-M processors

    These software abstraction layers support Cortex-M23 and Cortex-M33 except CMSIS-NN which currently might only support Cortex-M4, Cortex-M7, Cortex-M33 and Cortex-M35P (processors with DSP/SIMD extension) (the software team said last year that they will extend the support to other Cortex-M processors but that might not be available yet).

    In most cases, the CMSIS-CORE components are built into the software packages from MCU vendors, or could be built into the IDE support. CMSIS-DSP and CMSIS-NN are independent on TrustZone features.

    OS support is a separated topic - If you want to use an RTOS with Cortex-M23 and Cortex-M33, you need to use one that support Armv8-M. Currently, RTX from Keil/Arm and CMSIS RTOS (using RTX within) supports Armv8-M. And FreeRTOS will support Armv8-M shortly (or maybe already released - I am not sure).

    Regarding hardware platforms, a number of MCU vendors already announced / released their Armv8-M based products:

    - Nordic Semiconductor nRF91 (Cortex-M33)

    - NXP LPC55S6x, iMX RT600 (Cortex-M33)

    - ST Microelectronics STM32L55 (Cortex-M33)

    - Nuvoton M2351 (Cortex-M23)

    - Microchip SAM L10/L11 (Cortex-M23)

    - Rensas S1JA (Cortex-M23)

    - GigaDevice GD32E230 (Cortex-M23)

    Hope this helps.