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.

[参考译文] TMS320F28388D:TMS320F28388D EEPROM 仿真:Fapi_doBlankCheck ()返回 Fapi_Error_Fail (500)

Guru**** 2524460 points
Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1398136/tms320f28388d-tms320f28388d-eeprom-emulation-fapi_doblankcheck-returning-fapi_error_fail-500

器件型号:TMS320F28388D
Thread 中讨论的其他器件: C2000WARE

工具与软件:

 团队成员、您好!  

我正在使用 TMS320F28388D 微控制器并开发代码、以使用扇区12进行 EEPROM 仿真。 由于 TMS320F28388D 只有一个存储体、因此我已经将要从 RAM 执行的闪存 API 代码移至此处。

// Moved to RAM
#pragma CODE_SECTION(Erase_Bank, ".TI.ramfunc");
#pragma CODE_SECTION(EEPROM_UpdateBankStatus, ".TI.ramfunc");
#pragma CODE_SECTION(EEPROM_UpdatePageStatus, ".TI.ramfunc");
#pragma CODE_SECTION(EEPROM_UpdatePageData, ".TI.ramfunc");
#pragma CODE_SECTION(EEPROM_CheckStatus, ".TI.ramfunc");
#pragma CODE_SECTION(EEPROM_Program_64_Bits, ".TI.ramfunc");
#pragma CODE_SECTION(Flash_DisablePrefetch_SW_Workaround, ".TI.ramfunc");
#pragma CODE_SECTION(Flash_EnablePrefetch_SW_Workaround, ".TI.ramfunc");
#pragma CODE_SECTION(ClearFSMStatus, ".TI.ramfunc");

// Not Moved to RAM
// #pragma CODE_SECTION(EEPROM_Config_Check, ".TI.ramfunc");
// #pragma CODE_SECTION(EEPROM_GetValidBank, ".TI.ramfunc");
// #pragma CODE_SECTION(EEPROM_Erase, ".TI.ramfunc");
// #pragma CODE_SECTION(EEPROM_Read, ".TI.ramfunc");
// #pragma CODE_SECTION(EEPROM_Write, ".TI.ramfunc");
// #pragma CODE_SECTION(EEPROM_Get_64_Bit_Data_Address, ".TI.ramfunc");

void Erase_Bank()
{
    Fapi_StatusType  oReturnCheck;
    oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32*) SECTOR_START_ADDR);
    while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
    EEPROM_CheckStatus(&oReturnCheck);
}

void EEPROM_UpdateBankStatus()
{
    // Skipped initial code
    ClearFSMStatus();
    oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Bank_Pointer,
                                                    Bank_Status, 4, 0, 0,
                                                    Fapi_AutoEccGeneration);
    EEPROM_CheckStatus(&oReturnCheck);
    // Skipped bottom code

}

void EEPROM_CheckStatus(Fapi_StatusType* oReturnCheck)
{
    // Skipped initial code.
    *oReturnCheck = Fapi_doBlankCheck((uint32_t *) sectorAddress,
                                          sectorSize, &oFlashStatusWord);

    if(*oReturnCheck != Fapi_Status_Success || oFlashStatus != 0)
    {
        // Alwas gives Fapi_Error_Fail=500 (Generic Function Fail code)
    }
}
 

函数`Fapi_doBlankCheck ()`总是抛出错误`Fapi_Error_Fail (500)`。 我已交叉验证扇区地址(0xBE000)和大小(0x2000)是否与数据表一致。

我已经检查了 FMSTAT 寄存器中的状态、所有错误位都被清除。

如果我注释掉错误处理代码、EEPROM 数据将按预期写入。 我不确定这是否是与时间相关的问题;如果是、可能会在产品生命周期内的任何时间发生、可能在验证期间无法捕获、并可能导致严重问题。

您能提供您的建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vikram:

    正如一般说明一样、闪存 API 函数和调用闪存 API 的函数都应从 RAM 运行。  

    使用 Memory Browser 时、您是否能够查看闪存是否正在被擦除?  

    此致、

    Skyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的建议。

    我已经确认闪存存储器被成功擦除并且数据可以被写入其中。 在本例中、对函数中的错误检查/处理Fapi_doBlankCheck()添加了注释。

    如上面的帖子所述、我添加了闪存 API 函数以及调用闪存 API 的函数、但结果没有变化-Fapi_doBlankCheck()仍然返回错误。

    您能否提出可能的解决方案? 或者、是否有办法避免这种错误?

    谢谢!

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vikram:

    传递给 Fapi_doBlankCheck ()函数的参数是什么? 请验证是否使用了正确的值(起始地址、要进行空白检查的区域长度等)。

    如果是、请仔细检查 FAPI 函数的调用流程是否正确。 您可以参考 闪存 API 指南 和 C2000Ware 中的闪存 API 示例(C2000Ware_5_02_00_00\driverlib\f2838x\examples\c28x\flash)来验证这一点。 请尝试 C2000Ware 示例、然后查看是否会遇到任何类似问题。 如果您在示例中没有看到这些问题、请看看工程和示例之间的 FAPI 使用情况差异。 根据上面的代码片段,我注意到两者之间有细微的差别( C2000Ware 示例调用 Fapi_getFsmStatus ()之前的 Fapi_doBlankCheck ()))。

    此致、

    Skyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vikram:

    此问题是否已得到解决?

    此致、

    Skyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    问题已解决。 感谢您的支持。

    此致、

    Vikram Tathe.