我在应用RM42L432时,遇到用F021 Flash API 写E2PROM失败。(在写之前已经成功擦除了E2PROM的Sect 0)
代码如下:
void e2prom_program(void)
{
uint8_t dbuf[8] = {0, 1, 2, 3, 4, 5, 6, 7};
uint8_t eccbuf[2] = {0, 0};
Fapi_StatusType oReturnCheck = Fapi_Status_Success;
/* 使能E2PROM所属的Flash块(Blank 7) */
if(oReturnCheck == Fapi_Status_Success){
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank7);
}
/* 使能要操作的E2PROM段(Sect 0) */
if(oReturnCheck == Fapi_Status_Success){
oReturnCheck = Fapi_enableEepromBankSectors(0x01U, 0x00U);
}
/* 等待FSM准备好 */
while(FAPI_CHECK_FSM_READY_BUSY != Fapi_Status_FsmReady){
}
/* 清除状态寄存器 */
oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearStatus);
if(oReturnCheck != Fapi_Status_Success)
return;
/* 写入数据 */
oReturnCheck = Fapi_issueProgrammingCommand((uint32_t *)0xF0200000U, dbuf, 8U, eccbuf, 2, Fapi_AutoEccGeneration);
/* 等待写入完成 */
while(FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy){
}
/* 写入成功 */
if(FAPI_GET_FSM_STATUS == 0){
/* 指示灯 */
gioSetBit(gioPORTA, 2, 1);
}
}
结果:FMSTAT = 0x00001010, 即: CSTAT = 1 (命令失败) PGV = 1 (编程超时)
另外: 执行Fapi_issueProgrammingCommand函数后,其返回值是成功的,即Fapi_Status_Success