Tool/software: Code Composer Studio
I am implementing a Bootloader based on QJ Wang's boot_uart example. After call to Fapi_issueProgrammingCommand() FMSTAT indicates that a sector is locked.
uint32_t Fapi_BlockProgram( uint32_t Bank, uint32_t Flash_Start_Address, uint32_t Data_Start_Address, uint32_t Size_In_Bytes)
{
register uint32_t src = Data_Start_Address;
register uint32_t dst = Flash_Start_Address;
register uint32_t bytes_remain = Size_In_Bytes;
uint8_t i, ucBank;
uint32_t status;
uint32_t bytes;
uint32_t Freq_In_MHz;
uint32_t uwTemp = 0;
Freq_In_MHz = SYS_CLK_FREQ;
if (Size_In_Bytes < 16)
bytes = Size_In_Bytes;
else
bytes = 16;
for (i = 0; i < NUMBEROFSECTORS-1; i++){
if (Flash_Start_Address < (uint32_t)(flash_sector[i+1].start))
{
ucBank = flash_sector[i].bankNumber;
break;
}
}
if(( Flash_Start_Address == APP_START_ADDRESS ) || ( ucBank == 1 )){
Fapi_initializeFlashBanks(Freq_In_MHz); /* used for API Rev2.01 */
Fapi_setActiveFlashBank((Fapi_FlashBankType)ucBank);
Fapi_enableMainBankSectors(0xFF); /* used for API 2.01*/
while( FAPI_CHECK_FSM_READY_BUSY != Fapi_Status_FsmReady );
while( FAPI_GET_FSM_STATUS != Fapi_Status_Success );
}
while( bytes_remain > 0)
{
uwTemp = Fapi_issueProgrammingCommand((uint32_t *)dst, // dst = 0x00020000
(uint8_t *)src, // src = 0x080030B8
(uint32_t) bytes, // bytes = 16
0,
0,
Fapi_AutoEccGeneration);
if (uwTemp != Fapi_Status_Success)
{
return uwTemp;
}
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success)
{
uwTemp = FAPI_GET_FSM_STATUS;
// hangs here as uwTemp is 0x00000011
// bit 0 indicates that the sector is locked.
}
src += bytes; //Size_In_Bytes;
dst += bytes; //Size_In_Bytes;
bytes_remain -= bytes; //Size_In_Bytes;
if ( bytes_remain < 16){
bytes = bytes_remain;
}
}
#ifdef DEBUG_MSG_L3
UART_putString(UART, "\r Programmed the flash: ");
UART_send32BitData(UART, Size_In_Bytes);
UART_putString(UART, " Bytes. \r ");
#endif
status = Flash_Program_Check(Flash_Start_Address, Data_Start_Address, Size_In_Bytes);
return (status);
}
Your advice is much appreciated.
ken