design_and_implementation.md

September 24, 2025 · View on GitHub

Click here to view the README.

Design and implementation

The design of this application is minimalistic to get started with code examples on PSOC™ Edge MCU devices. All PSOC™ Edge E84 MCU applications have a dual-CPU three-project structure to develop code for the CM33 and CM55 cores. The CM33 core has two separate projects for the secure processing environment (SPE) and non-secure processing environment (NSPE). A project folder consists of various subfolders, each denoting a specific aspect of the project. The three project folders are as follows:

Table 1. Application projects

ProjectDescription
proj_cm33_sProject for CM33 secure processing environment (SPE)
proj_cm33_nsProject for CM33 non-secure processing environment (NSPE)
proj_cm55CM55 project

In this code example, at device reset, the secure boot process starts from the ROM boot with the secure enclave (SE) as the root of trust (RoT). From the secure enclave, the boot flow is passed on to the system CPU subsystem where the secure CM33 application starts. After all necessary secure configurations, the flow is passed on to the non-secure CM33 application. Resource initialization for this example is performed by this CM33 non-secure project. It configures the system clocks, pins, clock to peripheral connections, and other platform resources. It then enables the CM55 core using the Cy_SysEnableCM55() function and the CM55 core is subsequently put to DeepSleep mode.

In the CM33 non-secure application, the clocks and system resources are initialized by the BSP initialization function. The retarget-io middleware is configured to use the debug UART. The debug UART prints a message (as shown in Terminal output on program startup) on the terminal emulator, the onboard KitProg3 acts the USB-UART bridge to create the virtual COM port. The User LED1 blinks every 1 second.

This code example works with the PSOC™ Edge evaluation kit out of the box – with the "secure boot" disabled configuration and factory-programmed extended boot firmware. Here, "secure boot" refers to the signature verification of the first user application by the extended boot.

The extended boot always expects the first user application to be in the MCUboot format – irrespective of whether "secure boot" is enabled or disabled. In this example, the first user application is the proj_cm33_s image, which is appended to the MCUBoot header as the default configuration.

ModusToolbox™ variable COMBINE_SIGN_JSON can be found in the common.mk file in this project, which determines the postbuild sign/combine operation to be performed on the image. For the default use case, boot_with_extended_boot.json is used, which adds just the MCUboot header to the proj_cm33_s image and combines the proj_cm33_s_signed, proj_cm33_ns, and proj_cm55 images.

COMBINE_SIGN_JSON?=configs/boot_with_extended_boot.json