7.1 KiB
Blinking LED test application for MCUboot bootloader
Description
Implements simple Blinky LED CM4 application to demonstrate MCUboot Application operation in terms of BOOT and UPGRADE process.
It is started by MCUboot Application which is running on CM0p.
Functionality:
- Blinks RED led with 2 different rates, depending on type of image - BOOT or UPGRADE.
- Prints debug info and version of itself to terminal at 115200 baud.
- Can be built for BOOT slot or UPGRADE slot of bootloader.
Currently supported platforms
- PSOC_062_2M
- PSOC_062_1M
- PSOC_062_512K
Hardware limitations
Since this application is created to demonstrate MCUboot library features and not as reference examples some considerations are taken.
- Port/pin
P5_0
andP5_1
used to configure serial port for debug prints. These pins are the most commonly used for serial port connection among available Cypress PSoC 6 kits. If you try to use custom hardware with this application - change definitions ofCY_DEBUG_UART_TX
andCY_DEBUG_UART_RX
inmain.c
of BlinkyApp to port/pin pairs corresponding to your design. - Port
GPIO_PRT13
pin7U
used to define user connection LED. This pin is the most commonly used for USER_LED connection among available Cypress PSoC 6 kits. If you try to use custom hardware with this application - change definitions ofLED_PORT
andLED_PIN
inmain.c
of BlinkyApp to port/pin pairs corresponding to your design.
Pre-build action
Pre-build action is implemented for defining start address and size of flash, as well as RAM start address and size for BlinkyApp.
These values are set by specifing following macros: -DUSER_APP_SIZE
, -DUSER_APP_START
, -DRAM_SIZE
, -DRAM_START
in makefile.
Pre-build action calls GCC preprocessor which intantiates defines for particular values in BlinkyApp_template.ld
.
Default values set for currently supported targets:
BlinkyApp.mk
to-DUSER_APP_START=0x10018000
Important: make sure RAM areas of CM4-based BlinkyApp and CM0p-based MCUBootApp bootloader do not overlap. Memory (stack) corruption of CM0p application can cause failure if SystemCall-served operations invoked from CM4.
Building an application
Root directory for build is boot/cypress.
The following command will build regular HEX file of a BlinkyApp for BOOT slot. Substitute PLATFORM=
to a paltform name you use in all following commands.
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
This have following defaults suggested:
BUILDCFG=Debug
IMG_TYPE=BOOT
To build UPGRADE image use following command:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x10000
Note: HEADER_OFFSET=%SLOT_SIZE%
Example command-line for single-image:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
Building Multi-Image
BlinkyApp
can be built to use in multi-image bootloader configuration.
To get appropriate artifacts to use with multi image MCUBootApp, makefile flag HEADER_OFFSET=
can be used.
Example usage:
Considering default config:
- first image BOOT (PRIMARY) slot start
0x10018000
- slot size
0x10000
- second image BOOT (PRIMARY) slot start
0x10038000
To get appropriate artifact for second image PRIMARY slot run this command:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT HEADER_OFFSET=0x20000
Note: only 2 images are supported at the moment.
How to build upgrade image for external memory:
To prepare MCUBootApp for work with external memory please refer to MCUBootApp/ExternalMemory.md
.
For build BlinkyApp upgrade image for external memory use command:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x7FE8000 ERASED_VALUE=0xff
HEADER_OFFSET
defines the offset from original boot image address. This one in line above suggests secondary slot will start from 0x18000000
.
ERASED_VALUE
defines the memory cell contents in erased state. It is 0x00
for PSoC6's internal Flash and 0xff
for S25FL512S.
In case of using muti-image configuration, upgrade image for second application can be built using next command:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x8028000 ERASED_VALUE=0xff
Note: for S25FL512S block address shuld be mutiple by 0x40000
How to build encrypted upgrade image :
To prepare MCUBootApp for work with encrypted upgrade image please refer to MCUBootApp/Readme.md
.
To obtain encrypted upgrade image of BlinkyApp extra flag ENC_IMG=1
should be passed in command line, for example:
make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x20000 ENC_IMG=1
This also suggests user already placed corresponing *.pem
key in \keys
folder. The key variables are defined in root Makefile
as SIGN_KEY_FILE
and ENC_KEY_FILE
Post-build
Post build action is executed at compile time for BlinkyApp
. In case of build for PSOC_062_2M
platform it calls imgtool
from MCUboot
scripts and adds signature to compiled image.
Flags passed to imgtool
for signature are defined in SIGN_ARGS
variable in BlinkyApp.mk.
How to program an application
Use any preferred tool for programming hex files.
Hex file names to use for programming:
BlinkyApp
always produce build artifacts in 2 separate folders - boot
and upgrade
.
BlinkyApp
built to run with MCUBootApp
produces files with name BlinkyApp.hex in boot
directory and BlinkyApp_upgrade.hex
in upgrade
folder. These files are ready to be flashed to the board.
BlinkyApp_unsigned.hex
hex file is also preserved in both cases for possible troubleshooting.
Files to use for programming are:
BOOT
- boot/BlinkyApp.hex
UPGRADE
- upgrade/BlinkyApp_upgrade.hex
Flags:
BUILDCFG
- configuration Release or DebugMAKEINFO
- 0 (default) - less build info, 1 - verbose output of compilation.HEADER_OFFSET
- 0 (default) - no offset of output hex file, 0x%VALUE% - offset for output hex file. Value 0x10000 is slot size MCUboot Bootloader in this example.IMG_TYPE
-BOOT
(default) - build image for BOOT slot of MCUboot Bootloader,UPGRADE
- build image for UPGRADE slot of MCUboot Bootloader.ENC_IMG
- 0 (default) - build regular upgrade image,1
- build encrypted upgrade image (MCUBootApp should also be built with this flash set 1)
NOTE: In case of UPGRADE
image HEADER_OFFSET
should be set to MCUboot Bootloader slot size.
Example terminal output
When user application programmed in BOOT slot:
===========================
[BlinkyApp] BlinkyApp v1.0 [CM4]
===========================
[BlinkyApp] GPIO initialized
[BlinkyApp] UART initialized
[BlinkyApp] Retarget I/O set to 115200 baudrate
[BlinkyApp] Red led blinks with 1 sec period
When user application programmed in UPRADE slot and upgrade procedure was successful:
===========================
[BlinkyApp] BlinkyApp v2.0 [+]
===========================
[BlinkyApp] GPIO initialized
[BlinkyApp] UART initialized
[BlinkyApp] Retarget I/O set to 115200 baudrate
[BlinkyApp] Red led blinks with 0.25 sec period