Roman Okhrimenko | 6ea44be | 2020-09-24 17:20:15 +0300 | [diff] [blame] | 1 | ### Port of MCUBoot library for evaluation with Cypress PSoC 6 chips |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 2 | |
Roman Okhrimenko | 6ea44be | 2020-09-24 17:20:15 +0300 | [diff] [blame] | 3 | ### Disclaimer |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 4 | |
Francesco Servidio | 4ff0c18 | 2021-10-20 15:27:16 +0200 | [diff] [blame] | 5 | Given solution is included in `MCUboot` repository with purpose to demonstrate basic consepts and features of MCUboot library on Cypress PSoC 6 device. Applications are created per MCUboot library maintainers requirements. Implemetation differs from conventional and recomended by Cypress Semiconductors development flow for PSoC 6 devices. These applications are not recomended as a starting point for development and should not be considered as supported examples for PSoC 6 devices. |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 6 | |
Francesco Servidio | 4ff0c18 | 2021-10-20 15:27:16 +0200 | [diff] [blame] | 7 | Examples provided to use with **ModusToolbox® Software Environment** are a recommended reference point to start development of MCUboot based bootloaders for PSoC 6 devices. |
Roman Okhrimenko | 6ea44be | 2020-09-24 17:20:15 +0300 | [diff] [blame] | 8 | |
| 9 | Refer to **Cypress Semiconductors** [github](https://github.com/cypresssemiconductorco) page to find examples. |
| 10 | |
| 11 | 1. MCUboot-Based Basic Bootloader [mtb-example-psoc6-mcuboot-basic](https://github.com/cypresssemiconductorco/mtb-example-psoc6-mcuboot-basic) |
| 12 | 2. MCUboot-Based Bootloader with Rollback to Factory App in External Flash [mtb-example-anycloud-mcuboot-rollback](https://github.com/cypresssemiconductorco/mtb-example-anycloud-mcuboot-rollback) |
| 13 | |
Francesco Servidio | 5bc9832 | 2021-11-03 13:19:22 +0100 | [diff] [blame] | 14 | ### Solution description |
Roman Okhrimenko | 6ea44be | 2020-09-24 17:20:15 +0300 | [diff] [blame] | 15 | |
| 16 | There are two applications implemented: |
Francesco Servidio | 4ff0c18 | 2021-10-20 15:27:16 +0200 | [diff] [blame] | 17 | * MCUBootApp - PSoC6 MCUboot-based bootloading application; |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 18 | * BlinkyApp - simple PSoC6 blinking LED application which is a target of BOOT/UPGRADE; |
| 19 | |
| 20 | The default flash map for MCUBootApp implemented is next: |
| 21 | |
| 22 | * [0x10000000, 0x10018000] - MCUBootApp (bootloader) area; |
| 23 | * [0x10018000, 0x10028000] - primary slot for BlinkyApp; |
| 24 | * [0x10028000, 0x10038000] - secondary slot for BlinkyApp; |
| 25 | * [0x10038000, 0x10039000] - scratch area; |
| 26 | |
| 27 | The flash map is defined through sysflash.h and cy_flash_map.c. |
| 28 | |
Roman Okhrimenko | 579b30c | 2021-03-24 13:35:59 +0200 | [diff] [blame] | 29 | It is also possible to place secondary (upgrade) slots in external memory module. In this case primary slot can be doubled in size. |
Bohdan Kovalchuk | a333a45 | 2020-07-09 16:55:58 +0300 | [diff] [blame] | 30 | For more details about External Memory usage, please refer to separate guiding document `MCUBootApp/ExternalMemory.md`. |
| 31 | |
Francesco Servidio | 582367c | 2021-10-20 15:36:45 +0200 | [diff] [blame] | 32 | MCUBootApp checks image integrity with SHA256, image authenticity with EC256 digital signature verification and uses either completely software implementation of cryptographic functions or accelerated by hardware - both based on Mbed TLS Library. |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 33 | |
Francesco Servidio | 5bc9832 | 2021-11-03 13:19:22 +0100 | [diff] [blame] | 34 | ### Downloading solution's assets |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 35 | |
| 36 | There is a set assets required: |
| 37 | |
| 38 | * MCUBooot Library (root repository) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 39 | * PSoC6 Peripheral Drivers Library (PDL) |
Francesco Servidio | 582367c | 2021-10-20 15:36:45 +0200 | [diff] [blame] | 40 | * Mbed TLS Cryptographic Library |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 41 | |
| 42 | Those are represented as submodules. |
| 43 | |
| 44 | To retrieve source code with subsequent submodules pull: |
| 45 | |
Fabio Utzig | de1d72d | 2020-11-10 12:35:04 -0300 | [diff] [blame] | 46 | git clone --recursive https://github.com/mcu-tools/mcuboot.git |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 47 | |
| 48 | Submodules can also be updated and initialized separately: |
| 49 | |
Christian Daudt | e1960a9 | 2020-03-04 14:20:33 -0800 | [diff] [blame] | 50 | cd mcuboot |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 51 | git submodule update --init --recursive |
| 52 | |
| 53 | |
| 54 | |
Francesco Servidio | 5bc9832 | 2021-11-03 13:19:22 +0100 | [diff] [blame] | 55 | ### Building solution |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 56 | |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 57 | Root directory for build is **boot/cypress.** |
| 58 | |
Francesco Servidio | 4ff0c18 | 2021-10-20 15:27:16 +0200 | [diff] [blame] | 59 | This folder contains make files infrastructure for building both MCUboot Bootloader and sample BlinkyApp application used for Bootloader demo functionality. |
Roman Okhrimenko | aa7c021 | 2020-03-24 23:33:00 +0200 | [diff] [blame] | 60 | |
| 61 | Instructions on how to build and upload MCUBootApp bootloader application and sample user applocation are located in `Readme.md` files in corresponding folders. |
| 62 | |
Francesco Servidio | 4ff0c18 | 2021-10-20 15:27:16 +0200 | [diff] [blame] | 63 | Supported platforms for `MCUboot`, `BlinkyApp`: |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 64 | |
Roman Okhrimenko | 579b30c | 2021-03-24 13:35:59 +0200 | [diff] [blame] | 65 | * PSOC_062_2M |
| 66 | * PSOC_062_1M |
| 67 | * PSOC_062_512K |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 68 | |
Roman Okhrimenko | 6ea44be | 2020-09-24 17:20:15 +0300 | [diff] [blame] | 69 | ### Build environment troubleshooting |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 70 | |
| 71 | Following CLI / IDE are supported for project build: |
| 72 | |
| 73 | * Cygwin on Windows systems |
Christian Daudt | e1960a9 | 2020-03-04 14:20:33 -0800 | [diff] [blame] | 74 | * unix style shells on *nix systems |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 75 | * Eclipse / ModusToolbox ("makefile project from existing source") |
| 76 | |
| 77 | *Make* - make sure it is added to system's `PATH` variable and correct path is first in the list; |
| 78 | |
| 79 | *Python/Python3* - make sure you have correct path referenced in `PATH`; |
| 80 | |
| 81 | *Msys2* - to use systems PATH navigate to msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, restart MSYS2 shell. |
| 82 | |
| 83 | This will inherit system's PATH so should find `python3.7` installed in regular way as well as imgtool and its dependencies. |
| 84 | |