This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RM42L432 写E2PROM失败

Other Parts Discussed in Thread: RM42L432

我在应用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