1.4.1.6.1 Bootloader Device Configuration Input

Bootloaders, such as UART, I2C, CAN, and SPI support programming of Device Configurations (Fuse Settings) using a dedicated Device configuration 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