Jump to main content

##

# 1.4.3 CAN Bootloader Configurations

Bootloader Specific User Configurations

For devices with Dual Bank support and No Data Cache

For devices with No Dual Bank support and Data Cache

- Bootloader Peripheral Used:

  - Specifies the communication peripheral used by bootloader to receive the application
  - The name of the peripheral will vary from device to device

- Bootloader NVM Memory Used:

  - Specifies the memory peripheral used by bootloader to perform flash operations
  - The name of the peripheral will vary from device to device

- Bootloader Size (Bytes):

  - Specifies the maximum size of flash required by the bootloader
  - This size is calculated based on Bootloader type and Memory used
  - This size will vary from device to device and should always be aligned to device erase unit size

- Enable Bootloader Trigger From Firmware:

  - This Option can be used to Force Trigger bootloader from application firmware after a soft reset. It does so by reserving the specified number of bytes in SRAM from the start of the RAM. The reserved memory is updated by the application with a pre-defined pattern. The bootloader firmware in the bootloader_Trigger() routine, can check the reserved memory for the pre-defined pattern and enter bootloader mode if the pattern matches.

  - Number Of Bytes To Reserve From Start Of RAM:

    - This option adds the provided offset to RAM Start address in bootloader linker script.
    - Application firmware can store some pattern in the reserved bytes region from RAM start for bootloader to check at reset in bootloader_Trigger() function

- Use Dual Bank For Safe Flash Update:

  - Used to configure bootloader to use Dual banks of device to upload the application
  - This option is visible only for devices supporting Dual flash banks

- Select MPU Region to configure non-cacheable memory:

  - Used to select the MPU region for which he SRAM has been configured as non-cahceable space

  - Configure the region selected above in MPU settings of MCC as shown in Bootloader MPU Configurations

  - A seperate section will be created for this region in the custom linker script generated for bootloader

  - This option is visible only for devices which have Data cache.

Bootloader MPU Configurations

- Open MPU settings from MCC->Tools option. Select Enable MPU

- Configure the region selected in Bootloader component as ram_nocache with other parameters as shown

Bootloader Linker code for ram_nochache

- For CAN bootloader below xxx_message_ram section will be added to the custom linker file generated
  - Note: xxx should be replaced with the CAN PLIB being used.
  - Example: MCAN1

    MEMORY
    {
      rom (rx) : ORIGIN = ROM_START, LENGTH = ROM_SIZE
      ram (rwx) : ORIGIN = RAM_START, LENGTH = RAM_SIZE

      /* The address mentioned here should match with address mentioned in MPU settings */
      ram_nocache (RWX) : ORIGIN = 0x2045f000, LENGTH = (1 << (11 + 1))

    }

    ...
    ...

    .mcan1_message_ram (NOLOAD):
    {
        . = ALIGN(4);
        _s_mcan1_message_ram = .;
        *(.mcan1_message_ram)
        . = ALIGN(4);
        _e_mcan1_message_ram = .;
    } > ram_nocache

    ...

- CAN Bootloader will use this section to to allocate MCAN Message RAM configuration in contiguous non-cacheable buffer

    static uint8_t CACHE_ALIGN __attribute__((space(data), section (".mcan1_message_ram"))) mcan1MessageRAM[MCAN1_MESSAGE_RAM_CONFIG_SIZE];

    /* Set MCAN1 Message RAM Configuration */
    MCAN1_MessageRAMConfigSet(mcan1MessageRAM);

Bootloader System Configurations

- Application Start Address (Hex):
  - Start address of the application which will programmed by bootloader
  - This value is filled by bootloader when its loaded which is equal to the bootloader size. It can be modified as per user need
  - This value will be used by bootloader to Jump to application at device reset

Note

- For optimizing the code Bootloader component disables generation of default interrupt and exception files as shown below

- Enabling these interrupts explicitly may still not work as bootloader uses custom startup file which has its own Interrupt table populating only the reset handler