Skip to content

Pushyanth-Infineon/mtb-example-wolfboot-tpm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PSoC™ 6 WolfBoot Bootloader.

This is a basic bootloader project for using wolfBoot in PSoC6 devices using wolfBoot, supporting secure boot, firmware updates and measured boot. It supports interfacing Infineon OPTIGA TPM for hardware-based root of trust and cryptographic operations. It supports dual bank flash feature of PSoC™ 6 devices for quick firmware updates without requiring of swapping of the application firmware.

WolfBoot bootloader design and implementation can be found in wolfBoot github page: https://github.com/wolfSSL/wolfBoot/tree/master/docs.

The following use-cases are implemented in this project:

  • Secure boot: wolfBoot library is used to implement the secure boot functionality. TPM support for hardware based root of trust and cryptographic operations can be enabled. Refer to section Enabling TPM support for more details.
  • Firmware updates: This project supports updating the application firmware image of PSoC™ 6 devices using the wolfBoot library. Refer to Firmware Update for more details.
  • Measured boot: This project supports measured boot using the wolfBoot library and Infineon OPTIGA TPM. Refer to Measured Boot for more details.

Requirements

  • ModusToolbox™ v3.3 or later (tested with v3.3)
  • Board support package (BSP) minimum required version: 4.0.0
  • Programming language: C
  • Associated parts: All PSoC™ 6 MCU parts
  • OPTIGA TPM 9672 RPI EVAL, OPTIGA TPM 9673 RPI EVAL Infineon OPTIGA TPM

Supported toolchains (make variable 'TOOLCHAIN')

  • GNU Arm® Embedded Compiler v11.3.1 (GCC_ARM) – Default value of TOOLCHAIN

Supported kits (make variable 'TARGET')

Note: Only devices with 2M flash are supported for now as the dual bank will split the total flash into two banks and both bootloader and application should fit into single bank.

Hardware setup

  • This example uses the board's default configuration. See the kit user guide to ensure that the board is configured correctly.
  • Based on interface selection (SPI/I2C), the appropriate pin connections shall be made. Refer to section Resources and settings for pin connections.

Note: The PSoC™ 6 Bluetooth® LE Pioneer Kit (CY8CKIT-062-BLE) and the PSoC™ 6 Wi-Fi Bluetooth® Pioneer Kit (CY8CKIT-062-WIFI-BT) ship with KitProg2 installed. ModusToolbox™ requires KitProg3. Before using this code example, make sure that the board is upgraded to KitProg3. The tool and instructions are available in the Firmware Loader GitHub repository. If you do not upgrade, you will see an error like "unable to find CMSIS-DAP device" or "KitProg firmware is out of date".

Software setup

Install a terminal emulator if you don't have one. Instructions in this document use Tera Term.

  • wolfBoot requires GCC compiler targeting the host platform to compile tools to generate keys and sign firmware images.
  • If Linux/macOS is used, install the GCC compiler for your host platform using your package manager. For example, on Ubuntu, you can install the gcc using the following command:
    sudo apt-get install gcc
    
  • If Windows is used, you can install the GCC compiler from winlibs. Currently the latest prebuilt GCC compiler is 15.1.0 and can be downloaded using this link
  • Extract the downloaded zip file to a directory and provide its path in "GCC_INSTALLATION_PATH" variable in the Makefile of proj_cm0p directory. If GCC_INSTALLATION_PATH is not set, the build system will attempt to use gcc from your system's PATH environment variable.
  • For example, if the GCC compiler is extracted to C:\gcc\, then the Makefile should have the following line:
    GCC_INSTALLATION_PATH = 'C:\gcc\'
    

Using the code example

Create the project

The ModusToolbox™ tools package provides the Project Creator as both a GUI tool and a command line tool.

Use Project Creator GUI
  1. Open the Project Creator GUI tool.

    There are several ways to do this, including launching it from the dashboard or from inside the Eclipse IDE. For more details, see the Project Creator user guide (locally available at {ModusToolbox™ install directory}/tools_{version}/project-creator/docs/project-creator.pdf).

  2. On the Choose Board Support Package (BSP) page, select a kit supported by this code example. See Supported kits.

    Note: To use this code example for a kit not listed here, you may need to update the source files. If the kit does not have the required resources, the application may not work.

  3. On the Select Application page:

    a. Select the Applications(s) Root Path and the Target IDE.

    Note: Depending on how you open the Project Creator tool, these fields may be pre-selected for you.

    b. Select this code example from the list by enabling its check box.

    Note: You can narrow the list of displayed examples by typing in the filter box.

    c. (Optional) Change the suggested New Application Name and New BSP Name.

    d. Click Create to complete the application creation process.

Use Project Creator CLI

The 'project-creator-cli' tool can be used to create applications from a CLI terminal or from within batch files or shell scripts. This tool is available in the {ModusToolbox™ install directory}/tools_{version}/project-creator/ directory.

Use a CLI terminal to invoke the 'project-creator-cli' tool. On Windows, use the command-line 'modus-shell' program provided in the ModusToolbox™ installation instead of a standard Windows command-line application. This shell provides access to all ModusToolbox™ tools. You can access it by typing "modus-shell" in the search box in the Windows menu. In Linux and macOS, you can use any terminal application.

The following example clones the "mtb-example-wifi-scan" application with the desired name "WifiScan" configured for the CY8CPROTO-062S2-43439 BSP into the specified working directory, C:/mtb_projects:

project-creator-cli --board-id CY8CPROTO-062S2-43439 --app-id mtb-example-mtb-example-wifi-scan --user-app-name WifiScan --target-dir "C:/mtb_projects"

The 'project-creator-cli' tool has the following arguments:

Argument Description Required/optional
--board-id Defined in the field of the BSP manifest Required
--app-id Defined in the field of the CE manifest Required
--target-dir Specify the directory in which the application is to be created if you prefer not to use the default current working directory Optional
--user-app-name Specify the name of the application if you prefer to have a name other than the example's default name Optional

Note: The project-creator-cli tool uses the git clone and make getlibs commands to fetch the repository and import the required libraries. For details, see the "Project creator tools" section of the ModusToolbox™ tools package user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mtb_user_guide.pdf).

Open the project

After the project has been created, you can open it in your preferred development environment.

Eclipse IDE

If you opened the Project Creator tool from the included Eclipse IDE, the project will open in Eclipse automatically.

For more details, see the Eclipse IDE for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_ide_user_guide.pdf).

Visual Studio (VS) Code

Launch VS Code manually, and then open the generated {project-name}.code-workspace file located in the project directory.

For more details, see the Visual Studio Code for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_vscode_user_guide.pdf).

Keil µVision

Double-click the generated {project-name}.cprj file to launch the Keil µVision IDE.

For more details, see the Keil µVision for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_uvision_user_guide.pdf).

IAR Embedded Workbench

Open IAR Embedded Workbench manually, and create a new project. Then select the generated {project-name}.ipcf file located in the project directory.

For more details, see the IAR Embedded Workbench for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_iar_user_guide.pdf).

Command line

If you prefer to use the CLI, open the appropriate terminal, and navigate to the project directory. On Windows, use the command-line 'modus-shell' program; on Linux and macOS, you can use any terminal application. From there, you can run various make commands.

For more details, see the ModusToolbox™ tools package user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mtb_user_guide.pdf).

Operation

  1. Connect the board to your PC using the provided USB cable through the KitProg3 USB connector.

  2. Open a terminal program and select the KitProg3 COM port. Set the serial port parameters to 8N1 and 115200 baud. Since the wolfboot library uses LF for new line in wolfBoot_printf, set setup->terminal->New-Line Receive to LF.

  3. Program the board using one of the following:

    Using Eclipse IDE for ModusToolbox™ software
    1. Select the application project in the Project Explorer.

    2. In the Quick Panel, scroll down, and click <Application Name> Program (KitProg3_MiniProg4).

    Using CLI

    From the terminal, execute the make program command to build and program the application using the default toolchain to the default target. The default toolchain and target are specified in the application's Makefile, but you can override those values manually:

    make program TARGET=<BSP> TOOLCHAIN=<toolchain>
    

    Example:

    make program TARGET=CY8CPROTO-062-4343W TOOLCHAIN=GCC_ARM
    
  4. After programming, the application starts automatically. The User LED blinks at 1Hz. The serial terminal displays output similar to the following: Figure 1. wolfBoot application startup. Application output

  5. To update the firmware, set the IMAGE_TYPE variable in the Makefile of proj_cm4_app to UPDATE. Only program the proj_cm4_app application. This will write the UPDATE image into the secondary slot.

  6. The bootloader will detect the update image and perform the firmware update. You can also override the IMAGE_TYPE variable from the command line by using the make command as follows:

    cd proj_cm4_app
    make program_proj IMAGE_TYPE=UPDATE
    
  7. Once the UPDATE image is programmed into the device, the previous application detects the new image and triggers the update by calling wolfBoot_update_trigger. This function sets the IMG_STATUS to IMG_STATE_UPDATING. Figure 2. Trigger the firmware update. Update Trigger

  8. After the next reset, the bootloader will check for the new image in UPDATE partition. If it exists and is valid, the bootloader starts the new application after setting IMG_STATUS to IMG_STATE_TESTING.

  9. The new application will set the IMG_STATUS to IMG_STATE_SUCCESS confirming that the firmware is not corrupted and is working properly. If this is not set, upon the next reset, the bootloader will erase the new application and roll back to the previous application.

  10. The new application blinks at 10Hz. Figure 3. Updated Application. Updated Application Output

  11. If MEASURED_BOOT is enabled in configs/config.mk, system reset is required as the current PCR value computed belongs to previous image before the update. After the system reset, the bootloader will measure the new application and extend the PCR values in TPM.

Trigger rollback

  • To manually trigger the rollback, Set the TRIGGER_ROLLBACK variable in the proj_cm4_app directory's Makefile to 1. Now the application will not set the IMG_STATUS to IMG_STATE_SUCCESS. You can also override the "TRIGGER_ROLLBACK variable from the command line by using the make program command as follows:

    cd proj_cm4_app
    make program_proj TRIGGER_ROLLBACK=1 IMAGE_TYPE=UPDATE
    

Enabling TPM support

  • Enable WOLFTPM in configs/config.mk file to use the TPM based Root Of Trust in wolfboot.
  • To offload the cryptographic operations to the TPM, set WOLFBOOT_TPM_VERIFY in the configs/config.mk file.
  • To use the TPM as the Root of Trust, set WOLFBOOT_TPM_KEYSTORE in the configs/config.mk file. Configurations required for this is explained in Programming the Public key hashes into TPM NV section.
  • To enable measured boot, set MEASURED_BOOT in the configs/config.mk file.
  • The TPM interface can be switched between SPI and I2C with SPI_TPM macro. By default SPI is used (SPI_TPM is defined).

Note: The boot time of the application increases as TPM is now in use. Since the bootloader needs to communicate with TPM, there will be noticeable time delay.

Programming the Public key hashes into TPM NV

  • WOLFBOOT_TPM_KEYSTORE requires the hash of public key to be placed in the NV of TPM.
  • The public key hashes can be programmed using tpm2_write_nvindexes_psoc6 make target in the proj_cm0p directory.
  • The target uses the tools/tpm_nv_index_populate.c file which is taken from wolfboot/wolfboot-stable/tools/tpm/rot.c and ported to PSoC™ 6 devices.
  • Run the following command in the proj_cm0p directory to program the public key hashes into the TPM NV index:
    make tpm2_write_nvindexes_psoc6
    

Debugging

You can debug the example to step through the code.

In Eclipse IDE

Use the <Application Name> Debug (KitProg3_MiniProg4) configuration in the Quick Panel. For details, see the "Program and debug" section in the Eclipse IDE for ModusToolbox™ user guide.

Add the below Note for relevant CEs only, like PSoC 6 MCU based. Remove this note for others.

Note: (Only while debugging) On the CM4 CPU, some code in main() may execute before the debugger halts at the beginning of main(). This means that some code executes twice – once before the debugger stops execution, and again after the debugger resets the program counter to the beginning of main(). See KBA231071 to learn about this and for the workaround.

In other IDEs

Follow the instructions in your preferred IDE.

Resources and settings

The mSPI and mI2C pin configurations are defined using device-configurator.

Table 1. Application resources

Resource Alias/object Purpose
SPI (HAL) mSPI Master SPI
I2C (HAL) mI2C Master I2C
UART (HAL) cy_retarget_io_uart_obj UART HAL object used by retarget-io for debug UART port

Note: Only one interface mSPI/mI2C is used at a time based on whether TPM is interfaced with SPI or I2C.

Table 2. mSPI and mI2C pin configurations for CY8CPROTO-062-4343W

Interface Pin Macro Pin Number Description
SPI CYBSP_SPI_MOSI P6_0 SPI clock
CYBSP_SPI_MISO P6_1 SPI master output, slave input
CYBSP_SPI_CLK P6_2 SPI master input, slave output
CYBSP_SPI_CS P6_5 SPI chip select
I2C CYBSP_I2C_SDA P6_1 I2C clock
CYBSP_I2C_SCL P6_0 I2C data

Table 3. SPI pin connections in OPTIGA TPM 9672 RPI EVAL board

Pin name Pin number Description
SCK 23 SPI clock
MISO 21 SPI master input, slave output
MOSI 19 SPI master output, slave input
CS 25 SPI chip select
VCC 1 3.3V power supply
GND 6 Ground

For pin mappings, refer to the OPTIGA TPM 9672 RPI EVAL board user manual.

Table 4. I2C pin connections in OPTIGA TPM 9673 RPI EVAL board

Pin name Pin number Description
SDA 3 I2C data
SCL 5 I2C clock
VCC 1 3.3V power supply
GND 6 Ground

For pin mappings, refer to the OPTIGA TPM 9673 RPI EVAL board user manual.

Design and implementation

The following sections provide a brief overview of the design and implementation of the wolfBoot bootloader for PSoC™ 6 devices.

Flash Update mechanism

CONFIG_FILE in common.mk is used to select the bootloader configuration file. Following configurations are available:

a.1 Single bank mode

  • In single bank mode, both BOOT and UPDATE application firmware are stored in a single bank of flash memory. At the time of firmware update, temporary swap area is used to swap the new firmware with the existing firmware.
  • The swap process takes more time, because for a swap firmware update, each row needs to be copied into swap row and then copied back to the original row.
  • Set DUALBANK_SWAP to 0 in configs/config.mk to configure the bootloader in single bank mode.
  • WOLFBOOT_PARTITION_SWAP_ADDRESS will be used as swap area for swapping BOOT and UPDATE firmware images.

a.2 Dual bank mode

  • In dual bank mode, the flash memory is divided into two banks. BOOT and UPDATE firmware images are stored in separate banks. At the time of firmware update, the new application is written to the inactive bank. The bootloader swaps the banks during the update process. So the inactive bank contains the previous application while the active back contains the new application.
  • In comparison to single bank mode, this swaps the banks entirely which eliminates the purpose of manually swapping the application images. So this mechanism is faster.
  • Since the active bank is swapped every time the firmware is updated, the bootloader application should be present in both banks, because of this the max application size is reduced.
  • Set DUALBANK_SWAP to 1 in configs/config.mk to configure the bootloader in dual bank mode.
  • WOLFBOOT_PARTITION_SWAP_ADDRESS will be set to dummy value 0 as it will not be used.
  • In PSoC™ 6 devices, the bank1 start address is 0x10000000 and the bank2 start address is 0x12000000.
  • Steps involved in the boot process for dual bank mode is shown in the figure below: Figure 4. Boot flow in Dual bank mode. Boot flow

The active bank is not persistent across reboots, so the bootloader will always boot from first bank. As a work around, active bank data is stored in AUX flash memory. Storing the active bank mode is implemented in two ways.

b.1 Direct Flash Access:

  • Directly writes the Bank mode data to the AUX flash memory using Flash HAL APIs.

b.2 Emulated EEPROM:

  • Uses the emulated EEPROM library to store the Bank mode data in the AUX flash memory.

  • The macro AUXFLASH_DIRECT_ACCESS defined in proj_cm0p/sources/dualbank_swap.h can be used to switch between the two methods of storing the active bank mode data.

  • If AUXFLASH_DIRECT_ACCESS is defined, the active bank mode data will be stored directly in the AUX flash memory using Flash HAL APIs. If it is not defined, the emulated EEPROM library will be used to store the active bank mode data.

TPM

a. TPM Based Root of Trust

  • The bootloader can be configured to use the Infineon OPTIGA TPM (SLB9672/SLB9673) for secure boot and firmware updates.
  • Enabling WOLFBOOT_TPM_KEYSTORE in ./configs/config.mk will configure the bootloader to use the TPM based Root of Trust.
  • The hash of the public key is stored in NV index in the TPM.
  • The bootloader will get the public key from the application header, hashes it and compares it with the public key hash present in the TPM NVM.
  • The NV index of the public key hash is defined in WOLFBOOT_TPM_KEYSTORE_NV_BASE of ./configs/config.mk
  • If it matches, the bootloader will verify the signature of the application using this public key. If it does not match, the bootloader will not boot the new application.

b. Cryptographic offloading to TPM

  • WOLFBOOT_TPM_VERIFY in ./configs/config.mk enables the wolfBoot library to use the OPTIGA TPM (SLB9672/SLB9673) for cryptographic operations like signature verification instead of the wolfBoot cryptographic functions.

c. Measured Boot

  • The bootloader can be configured to use the Infineon OPTIGA TPM (SLB9672/SLB9673) to compute the hash of the application firmware and store it in the Platform Configuration Register (PCR) of the TPM.
  • MEASURED_BOOT in ./configs/config.mk is used to configure the bootloader to use the TPM for measured boot.

d. Support for I2C TPM in wolfBoot

  • By default the wolfBoot bootloader has different HAL layer for interfacing with the TPM. By default, only SPI interface is supported.
  • The patch wolfboot_tpm_hal.patch is provided to use the wolfTPM HAL layer for interfacing with the I2C TPM. This patch will replace the default HAL layer with the wolfTPM HAL layer.
  • The patch can be applied using the following make command from proj_cm0p directory:
    make wolfboot_hal_patch
    

Issues and Limitations:

  1. Signature verification using TPM with RSA2048ENC is not supported. Cortex-M0+ does not support unaligned access. While parsing RSA ASN1 encoded key, unaligned accesses are causing the core to enter hard fault.
    • FIX: Use the Bootloader in Cortex-M4 core.
  2. Incremental updates are not supported yet.

Related resources

Resources Links
Application notes AN228571 – Getting started with PSoC™ 6 MCU on ModusToolbox™ software
AN215656 – PSoC™ 6 MCU: Dual-CPU system design
Code examples Using ModusToolbox™ on GitHub
Device documentation PSoC™ 6 MCU datasheets
Development kits Select your kits from the Evaluation board finder.
Libraries on GitHub mtb-pdl-cat1 – PSoC™ 6 peripheral driver library (PDL)
mtb-hal-cat1 – Hardware abstraction layer (HAL) library
retarget-io – Utility library to retarget STDIO messages to a UART port
Middleware on GitHub psoc6-middleware – Links to all PSoC™ 6 MCU middleware
Tools ModusToolbox™ – ModusToolbox™ software is a collection of easy-to-use libraries and tools enabling rapid development with Infineon MCUs for applications ranging from wireless and cloud-connected systems, edge AI/ML, embedded sense and control, to wired USB connectivity using PSoC™ Industrial/IoT MCUs, AIROC™ Wi-Fi and Bluetooth® connectivity devices, XMC™ Industrial MCUs, and EZ-USB™/EZ-PD™ wired connectivity controllers. ModusToolbox™ incorporates a comprehensive set of BSPs, HAL, libraries, configuration tools, and provides support for industry-standard IDEs to fast-track your embedded application development.

Other resources

Infineon provides a wealth of data at www.infineon.com to help you select the right device, and quickly and effectively integrate it into your design.

For PSoC™ 6 MCU devices, see How to design with PSoC™ 6 MCU - KBA223067 in the Infineon Developer community.

Document history

Document title: PSoC™ 6 MCU: WolfBoot Bootloader

Version Description of change
1.0.0 New code example

All referenced product or service names and trademarks are the property of their respective owners.

The Bluetooth® word mark and logos are registered trademarks owned by Bluetooth SIG, Inc., and any use of such marks by Infineon is under license.


© Cypress Semiconductor Corporation, 2020-2024. This document is the property of Cypress Semiconductor Corporation, an Infineon Technologies company, and its affiliates ("Cypress"). This document, including any software or firmware included or referenced in this document ("Software"), is owned by Cypress under the intellectual property laws and treaties of the United States and other countries worldwide. Cypress reserves all rights under such laws and treaties and does not, except as specifically stated in this paragraph, grant any license under its patents, copyrights, trademarks, or other intellectual property rights. If the Software is not accompanied by a license agreement and you do not otherwise have a written agreement with Cypress governing the use of the Software, then Cypress hereby grants you a personal, non-exclusive, nontransferable license (without the right to sublicense) (1) under its copyright rights in the Software (a) for Software provided in source code form, to modify and reproduce the Software solely for use with Cypress hardware products, only internally within your organization, and (b) to distribute the Software in binary code form externally to end users (either directly or indirectly through resellers and distributors), solely for use on Cypress hardware product units, and (2) under those claims of Cypress's patents that are infringed by the Software (as provided by Cypress, unmodified) to make, use, distribute, and import the Software solely for use with Cypress hardware products. Any other use, reproduction, modification, translation, or compilation of the Software is prohibited.
TO THE EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS DOCUMENT OR ANY SOFTWARE OR ACCOMPANYING HARDWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. No computing device can be absolutely secure. Therefore, despite security measures implemented in Cypress hardware or software products, Cypress shall have no liability arising out of any security breach, such as unauthorized access to or use of a Cypress product. CYPRESS DOES NOT REPRESENT, WARRANT, OR GUARANTEE THAT CYPRESS PRODUCTS, OR SYSTEMS CREATED USING CYPRESS PRODUCTS, WILL BE FREE FROM CORRUPTION, ATTACK, VIRUSES, INTERFERENCE, HACKING, DATA LOSS OR THEFT, OR OTHER SECURITY INTRUSION (collectively, "Security Breach"). Cypress disclaims any liability relating to any Security Breach, and you shall and hereby do release Cypress from any claim, damage, or other liability arising from any Security Breach. In addition, the products described in these materials may contain design defects or errors known as errata which may cause the product to deviate from published specifications. To the extent permitted by applicable law, Cypress reserves the right to make changes to this document without further notice. Cypress does not assume any liability arising out of the application or use of any product or circuit described in this document. Any information provided in this document, including any sample design information or programming code, is provided only for reference purposes. It is the responsibility of the user of this document to properly design, program, and test the functionality and safety of any application made of this information and any resulting product. "High-Risk Device" means any device or system whose failure could cause personal injury, death, or property damage. Examples of High-Risk Devices are weapons, nuclear installations, surgical implants, and other medical devices. "Critical Component" means any component of a High-Risk Device whose failure to perform can be reasonably expected to cause, directly or indirectly, the failure of the High-Risk Device, or to affect its safety or effectiveness. Cypress is not liable, in whole or in part, and you shall and hereby do release Cypress from any claim, damage, or other liability arising from any use of a Cypress product as a Critical Component in a High-Risk Device. You shall indemnify and hold Cypress, including its affiliates, and its directors, officers, employees, agents, distributors, and assigns harmless from and against all claims, costs, damages, and expenses, arising out of any claim, including claims for product liability, personal injury or death, or property damage arising from any use of a Cypress product as a Critical Component in a High-Risk Device. Cypress products are not intended or authorized for use as a Critical Component in any High-Risk Device except to the limited extent that (i) Cypress's published data sheet for the product explicitly states Cypress has qualified the product for use in a specific High-Risk Device, or (ii) Cypress has given you advance written authorization to use the product as a Critical Component in the specific High-Risk Device and you have signed a separate indemnification agreement.
Cypress, the Cypress logo, and combinations thereof, ModusToolbox, PSoC, CAPSENSE, EZ-USB, F-RAM, and TRAVEO are trademarks or registered trademarks of Cypress or a subsidiary of Cypress in the United States or in other countries. For a more complete list of Cypress trademarks, visit www.infineon.com. Other names and brands may be claimed as property of their respective owners.

About

Basic bootloader for PSOC6 using wolfBoot with TPM support.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors