AM263x MCU+ SDK  08.02.01
BOOTLOADER

The Bootloader module provides APIs to write bootloader applications for various boot media like QSPI, UART, SOC memory etc.

Features Supported

  • QSPI Boot
  • UART Boot
  • API to parse multicore appimage
  • Separate APIs to boot self and non-self cores

SysConfig Features

Note
It is strongly recommend to use SysConfig where it is available instead of using direct SW API calls. This will help simplify the SW application and also catch common mistakes early in the development cycle.
  • Bootloader instance name
  • Boot Media to be used
  • Boot Image offset

Features not Supported

  • None

R5 Dual Core Support

  • With the configuration used in MCU SDK to generate the app images, the RBL brings the R5 Lock Step Mode.
  • The SBL runs on R5 core in Lock Step Mode.
  • The SBL will switch to Dual core or continue in lock step mode depending on whether App Image loaded by SBL contains the R5 Core 1 image or not.
  • If the App Image to be loaded contains the R5 core 1 binary
    • The SBL will configure R5 to switch to Dual Core Mode.
    • At the end of SBL flow, The Application image of R5 will start running in the dual core mode.
  • If the App Image doesnot contain the R5 core 1 binary
    • The SBL will not configure R5 to switch to Dual core Mode
    • At the end of SBL flow, The Application image of R5 will start running in the lock step mode.
  • Refer the IPC example which configures the R5 in Dual Core mode. IPC Notify Echo

Example Usage

Include the below file to access the APIs

#include <stdio.h>

Instance Open Example

gBootloaderHandle = Bootloader_open(0, NULL);
DebugP_assert(gBootloaderHandle != NULL);

Booting Cores Example

int32_t status = SystemP_SUCCESS;
status = Bootloader_parseMultiCoreAppImage(gBootloaderHandle, &gBootImageInfo);
if(SystemP_SUCCESS == status && gBootloaderHandle != NULL)
{
if(status == SystemP_SUCCESS)
{
status = Bootloader_bootCpu(gBootloaderHandle, &gBootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS1_1]);
}
if(status == SystemP_SUCCESS)
{
status = Bootloader_bootCpu(gBootloaderHandle, &gBootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS1_0]);
}
if(status == SystemP_SUCCESS)
{
status = Bootloader_bootCpu(gBootloaderHandle, &gBootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS0_1]);
/* Reset self cluster, both Core0. Init RAMs and run the app */
status |= Bootloader_bootSelfCpu(gBootloaderHandle, &gBootImageInfo);
}
}

Instance Close Example

Bootloader_close(gBootloaderHandle);

API

APIs for BOOTLOADING CPUs

CSL_CORE_ID_R5FSS1_0
#define CSL_CORE_ID_R5FSS1_0
Definition: cslr_soc_defines.h:112
Bootloader_bootSelfCpu
int32_t Bootloader_bootSelfCpu(Bootloader_Handle handle, Bootloader_BootImageInfo *bootImageInfo)
API to boot self CPU.
CSL_CORE_ID_R5FSS0_0
#define CSL_CORE_ID_R5FSS0_0
Definition: cslr_soc_defines.h:110
Bootloader_parseMultiCoreAppImage
int32_t Bootloader_parseMultiCoreAppImage(Bootloader_Handle handle, Bootloader_BootImageInfo *bootImageInfo)
Parse Multicore Appimage.
Bootloader_close
void Bootloader_close(Bootloader_Handle handle)
Close bootloader driver.
Bootloader_bootCpu
int32_t Bootloader_bootCpu(Bootloader_Handle handle, Bootloader_CpuInfo *cpuInfo)
API to boot a non-self CPU.
SystemP_SUCCESS
#define SystemP_SUCCESS
Return status when the API execution was successful.
Definition: SystemP.h:56
CSL_CORE_ID_R5FSS1_1
#define CSL_CORE_ID_R5FSS1_1
Definition: cslr_soc_defines.h:113
CSL_CORE_ID_R5FSS0_1
#define CSL_CORE_ID_R5FSS0_1
Definition: cslr_soc_defines.h:111
Bootloader_socCpuGetClkDefault
uint32_t Bootloader_socCpuGetClkDefault(uint32_t cpuId)
Get the default clock of a particular CPU in the AM64x SOC.
DebugP_assert
#define DebugP_assert(expression)
Function to call for assert check.
Definition: DebugP.h:159
bootloader.h
Bootloader Driver API/interface file.
Bootloader_open
Bootloader_Handle Bootloader_open(uint32_t instanceNum, Bootloader_Params *openParams)
Open bootloader driver.