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.

TMS320F28375D: FLash擦除写入问题。

Part Number: TMS320F28375D

大家好,我碰见了一个FLASH有关擦除的问题。

具体描述为:

1.我使用 Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *)addr);  //函数发送擦除命令

2.然后while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady);等待擦除完成。

3.问题是,我的扇区擦除还未完成,等待结果循环就已经结束了。导致我后面的校验出错,然后等了一会再观察FLASH区域,却发现擦除已经完成。

代码如下:

FLASH_STA My_Flash_Erasure(uint32_t addr,uint32_t size)
{
uint32_t timeCount = 0;
Fapi_StatusType oReturnCheck;
Fapi_FlashStatusType oFlashStatus;
Fapi_FlashStatusWordType oFlashStatusWord;
EALLOW;
//擦除
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *)addr);
//等待擦除完成
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){
if(timeCount++ >= FLASH_TIMEOUT)
{
EDIS;
return FLASH_NOK;
}
}
if(oReturnCheck != Fapi_Status_Success)
{
EDIS;
return FLASH_NOK;
}
//获取是否有擦除动作
oFlashStatus = Fapi_getFsmStatus();
if (oFlashStatus != 0)
{
EDIS;
return FLASH_NOK;
}
// 校验是否擦除成功
oReturnCheck = Fapi_doBlankCheck((uint32 *)addr, size / 2, &oFlashStatusWord);
if(oReturnCheck != Fapi_Status_Success)
{
EDIS;
return FLASH_NOK;
}
EDIS;
return FLASH_OK;
}

谢谢!