Thread 中讨论的其他器件: C2000WARE
工具与软件:
团队成员、您好!
Skyler Baumer 和 Vamsi Gudivada
我正在使用 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 数据将按预期写入。 我不确定这是否是与时间相关的问题;如果是、可能会在产品生命周期内的任何时间发生、可能在验证期间无法捕获、并可能导致严重问题。
您能提供您的建议吗?