Jump to main content

##

# 1.1.1.6.1 Bootloader Device Configuration Input

Bootloaders like UART, I2C, CAN and SPI support programming of Device Configurations (Fuse Settings) using a dedicated Device confiuration command. The respective host utilities communicating with these bootloaders use a device configuration text file to send the required fuse settings.

The Device configuration command is currently supported for all CORTEX-M based devices except CORTEX-M7.

For Non-TrustZone based CORTEX-M devices

- Based on the device Fuse settings are placed in

  - Only USER Row memory region

  - Both User Row and BOCOR Row memory regions

- User Row/BOCOR row Start address should be provided as part of the device configuration input text file

Syntax

- Each configuration row needs to start with ROW_START <address>

- Each 32-Bit Fuse bit value must be newline separated

- ROW_END needs to be used to indicate end of Fuse bit words for the row

  - If the Fuse bit values are all 0xFFFFFFFF between the last 32-Bit Fuse and ROW_END it need not be specified as the host utilities will take care of filling the data packet with 0xFF's

- Example text file with only User Row

    ROW_START 0x00804000
    0xB15088FF
    0xFFFFF8BB
    ROW_END

- Example text file with both User Row and BOCOR Row

    ROW_START 0x00804000
    0xB08F4377
    0xFFFFF0BB
    0xFFFFFFFF
    0xFFFFFFFF
    0xFFFFFFFF
    0xFFFFFFFF
    0x00000000
    ROW_END

    ROW_START 0x0080C000
    0xFFFFFFFF
    0xFFE80000
    ROW_END

For TrustZone based CORTEX-M devices

- Fuse settings are placed in USER Row and BOCOR Row memory regions for these devices

- User Row/BOCOR row Start address should be provided as part of the device configuration input text file

- The USER Row and BOCOR Row fuses also have 32-Bit CRC’s and SHA-256 to verify the fuse configurations itself by BOOTROM at reset

  - btl_dev_cfg_gen.py host utility is provided to generate these CRC's and SHA-256 based on below syntax into a device configuration output text file to be used to send to bootloader

Syntax

- Each configuration row needs to start with ROW_START <address>

- Each 32-Bit Fuse bit value must be newline separated

- CRC32_START must be used to indicate to the above utility that CRC32 has to be calculated on the Fuse words after this

- CRC32_END must be placed at the line where generated CRC32 value will be calculated and added in output file

- SHA-256_START must be used to indicate to the above utility that SHA-256 must be calculated on the Fuse words after this.

- SHA-256_END must be placed at the line where generated SHA-256 value (32 Bytes = 8 words) will be calculated and added in output file

- ROW_END needs to be used to indicate end of configuration for the row

  - If the Fuse bit values are all 0xFFFFFFFF between the last 32-Bit Fuse and ROW_END it need not be specified as the host utilities will take care of filling the data packet with 0xFF's

- Example input text file with CRC32 and SHA-256

    ROW_START 0x00804000
    0xB08F4377
    0xFFFFF0BB
    CRC32_START
    0xF0308040
    0xFFFFFE80
    0x00000000
    0x00000002
    0x00000010
    0x00000000
    CRC32_END
    ROW_END

    ROW_START 0x0080C000
    SHA-256_START
    CRC32_START
    0xF007FFFF
    0xFFE81001
    CRC32_END
    0xFFFFFFFF
    0xFFFFFFFF
    0xFFFFFFFF
    ...
    ...
    ...
    0xFFFFFFFF
    0xFFFFFFFF
    SHA-256_END
    ROW_END

- Example output text file with Generated CRC32 and (32 Bytes = 8 words) SHA-256

    ROW_START 0x00804000
    0xB08F4377
    0xFFFFF0BB
    0xF0308040
    0xFFFFFE80
    0x00000000
    0x00000002
    0x00000010
    0x00000000
    0x4e75a269
    ROW_END

    ROW_START 0x0080C000
    0xF007FFFF
    0xFFE81001
    0x64ae5ed9
    0xFFFFFFFF
    0xFFFFFFFF
    0xFFFFFFFF
    ...
    ...
    ...
    0xFFFFFFFF
    0xFFFFFFFF
    0x7ad28797
    0x020201a6
    0xf3412c79
    0x24cbea0e
    0x50bd37ba
    0xa5fd23f7
    0xad1c8fc1
    0x1576fbf1
    ROW_END