Hi I am trying to write a very simplistic firmware that would write data to flash. So far my code is as follows(call to Fapi_initializeFlashBanks happens earlier in the code):
status = Fapi_setActiveFlashBank(bank);
if (status != ERROR_OK) {
LOG("Failed to set bank %d active", bank_nr);
return ERROR_FAIL;
}
status = Fapi_enableMainBankSectors(0xFF);
if (status != ERROR_OK) {
LOG("Failed to enable bank's sectors");
return ERROR_FAIL;
}
status = f0xx_wait_for_fsm_to_finish(F0XX_DEFAULT_FSM_TIMEOUT);
if (status != ERROR_OK) {
LOG("Flash FSM did not finish after Fapi_enableMainBankSectors call");
return ERROR_FAIL;
}
do {
chunk_size = MIN(16, remainder);
LOG("W @ %x (%d)", address, chunk_size);
status = Fapi_issueProgrammingCommand((uint32_t *)address,
(uint8_t *) data_pointer,
chunk_size,
0,
0,
Fapi_AutoEccGeneration);
if (status != Fapi_Status_Success) {
LOG("Fapi_issueProgrammingCommand returned error: %d", status);
return ERROR_FAIL;
}
status = f0xx_wait_for_fsm_to_finish(F0XX_DEFAULT_FSM_TIMEOUT);
if (status != ERROR_OK) {
LOG("Timed out waiting for flash FSM");
return ERROR_FAIL;
}
if (FAPI_GET_FSM_STATUS != Fapi_Status_Success) {
LOG("Flash FSM's status register indicated error %x", FAPI_GET_FSM_STATUS);
return ERROR_FAIL;
}
remainder -= chunk_size;
data_pointer += chunk_size;
address += chunk_size;
} while (remainder);
If I try to do this with address 0x00000000 I get 0x1010 from FAPI_GET_FSM_STATUS which means that PGV bit is set. What are the reasons for this bit to be set? Is there something I am missing that needs to be done?
Thanks!