Part Number: LAUNCHXL-F2800157
Hi TI Community,
We are following up on This Thread where Matt Kukucka suggested creating "a custom CAN bootloader in flash (easily done by re-purposing the CAN flash kernel to execute from the flash instead of RAM) that uses alternate GPIOs."
We have been working on implementing this approach but have encountered some conceptual and technical challenges that we would like to clarify before proceeding.
Our Understanding of the Current Boot Flow
- ROM Bootloader (runs from ROM at 0x3FC4EA):
- Configures CAN on predefined GPIO pins
- Receives the flash programming kernel from PC via CAN
- Loads this kernel to RAM
- Jumps to the kernel in RAM
- Flash Kernel (runs from RAM):
- Re-initializes CAN
- Initializes Flash API
- Erases flash sectors
- Receives application firmware from PC via CAN
- Programs application to flash
- Jumps to the new application
Our Implementation Goal
We want to create a custom first-stage bootloader that:
- Runs from our flash-based application (at 0x80000 for e.g)
- Allows us to use custom GPIO pins for CAN (not limited to ROM options)
- Receives the flash kernel from PC and loads it to RAM
- Jumps to that RAM-based kernel for actual flash programming
Essentially, we want to replace the ROM bootloader's functionality but with customizable GPIO pins / baudrate, etc.
Could you provide guidance on how to properly implement this custom first-stage bootloader?
- Which functions/code to extract from the flash kernel examples
- How to structure the linker file to reserve RAM sections appropriately
- The correct data protocol to use for receiving the flash kernel from PC
If there are any example projects or additional documentation for creating custom first-stage bootloaders, please let us know.
Thank you for your guidance!
Best regards,
Taif Shamsi