SLAU887 February   2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3105-Q1 , MSPM0G3106 , MSPM0G3106-Q1 , MSPM0G3107 , MSPM0G3107-Q1 , MSPM0G3505 , MSPM0G3505-Q1 , MSPM0G3506 , MSPM0G3506-Q1 , MSPM0G3507 , MSPM0G3507-Q1 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346

 

  1.   Abstract
  2.   Trademarks
  3. 1Overview of BSL Features
  4. 2Terminology
  5. 3BSL Architecture
    1. 3.1 Design
      1. 3.1.1 Timeout Feature
        1. 3.1.1.1 Interface Autodetection
        2. 3.1.1.2 Command Reception
    2. 3.2 BSL Invocation
      1. 3.2.1 Blank Device
      2. 3.2.2 Application Request
      3. 3.2.3 GPIO Based Invocation
      4. 3.2.4 Debug Mailbox Command
      5. 3.2.5 Others
        1. 3.2.5.1 Pre-Boot Application Verification
    3. 3.3 Memory
      1. 3.3.1 SRAM Memory Usage
    4. 3.4 BSL Configuration
    5. 3.5 BSL Status
  6. 4Bootloader Protocol
    1. 4.1 Packet Format
    2. 4.2 UART and I2C BSL Protocol
      1. 4.2.1 BSL Acknowledgment
      2. 4.2.2 Peripheral Configuration
        1. 4.2.2.1 UART
        2. 4.2.2.2 I2C
        3. 4.2.2.3 CRC
    3. 4.3 Bootloader Core Commands
      1. 4.3.1  Connection
      2. 4.3.2  Get Device Info
      3. 4.3.3  Unlock Bootloader
      4. 4.3.4  Program Data
      5. 4.3.5  Program Data Fast
      6. 4.3.6  Readback Data
      7. 4.3.7  Flash Range Erase
      8. 4.3.8  Mass Erase
      9. 4.3.9  Factory Reset
      10. 4.3.10 Standalone Verification
      11. 4.3.11 Start Application
      12. 4.3.12 Change Baud Rate
    4. 4.4 BSL Core Response
      1. 4.4.1 BSL Core Message
      2. 4.4.2 Detailed Error
      3. 4.4.3 Memory Readback
      4. 4.4.4 Device Info
      5. 4.4.5 Standalone Verification
    5. 4.5 Bootloader Security
      1. 4.5.1 Password Protected Commands
        1. 4.5.1.1 Security Alert
      2. 4.5.2 BSL Entry
  7. 5Sample Program Flow with Bootloader
  8. 6Secondary Bootloader
    1. 6.1 Secondary Bootloader Example
  9. 7Interface Plug-in
    1. 7.1 Implementation
      1. 7.1.1 Init
      2. 7.1.2 Receive
      3. 7.1.3 Transmit
      4. 7.1.4 Deinit
      5. 7.1.5 Important Notes
    2. 7.2 Flash Plug-in Type
    3. 7.3 Overriding an Existing Interface
      1. 7.3.1 UART Interface Flash Plug-in Example
  10. 8References
  11. 9Revision History

Secondary Bootloader Example

An example of secondary Bootloader is given as part of SDK examples for reference. This section gives more details on that.

Description

This Sample Secondary Bootloader supports programming / verifying data in the memory, with same BSL protocol format as Primary BSL (ROM BSL) in the device and can be invoked in the same way as the ROM BSL.

It supports the following major functions

  • Program data
  • Flash memory erase
  • Readback data
  • CRC verification
  • Start Application

It uses UART interface to communicate with the Host.

This example takes care of secondary bootloader implementation as well as the registration of it. Hence once this image is loaded to the device, the primary bootloader in the device can't be used. Only the secondary Bootloader will be active. To revert the device to use primary Bootloader, SWD_Factory_Reset command has to be used (Factory reset through Debug Subsystem Mailbox). .

Example Usage

  • Connect UART_RX and UART_TX with the BSL Host (any microcontroller with UART).
  • Compile and load the example.
  • Create BSL invocation condition using BSL Invoke pin or any other invocation methods.
  • Send the GetDeviceInfo command from the host.
  • Device should respond back with the version information and SRAM buffer space available.
  • Similarly Send erase, program, verification commands to program data in the memory.

Software File Details

File NameDetails

secondary_bsl.c

Initializes the peripherals needed for BSL operation. Receives command packets from Communication interface and passes it to Command processing layer.

Also takes care of registering the secondary bootloader in the BSL configuration memory.

bsl_ci.c

Interprets the command packets, process the command and sends back the response to Host

bsl_ci.h

Contains the definitions of BSL commands and Responses. Also the function declarations of bsl_ci.c

bsl_uart.c

Handles the communication between the Host and the BSL core

bsl_uart.h

Contains definitions of BSL Acknowledgment and function declarations of bsl_uart.c

ti_msp_dl_config.h

Contains device specific configurations like UART pins, base addresses of the peripherals used, etc.

boot_config.h

Contains BCR and BSL configuration structure

factory_config.c

Implements functions to fetch factory configured device specific data like SRAM memory size.

factory_config.h

Contains Factory configuration structure and function declaration of factory_config.c

startup_mspm0x_ticlang

Startup file that contains vector table, reset handler and other handlers

mspm0x.cmd

Linker command file that specifies memory region where the Secondary Bootloader image should reside in the memory and the SRAM region where it should operate.

Customization

This example gives a reference implementation for secondary bootloader. It can be customized as needed. BSL Core layer (secondary_bsl.c, bsl_ci.c) or interface layer (bsl_uart.c) are the major places where customization will be done.

Steps to be followed

  • Modify the code as needed

  • Once the changes are done, compile the code

  • Modify the flash write protection settings in BCR configuration as appropriate

  • Calculate the CRC for BCR configuration and store the new CRC value

  • Compile the code again

  • Load the customized BSL image