主题中讨论的其他器件:UNIFLASH
工具与软件:
尊敬的专家:
我的客户使用 引导加载程序升级某些应用软件、然后复位 MCU 以擦除扇区。 擦除后出现扇区检查错误。 请看下图、 该问题导致现场设备故障率为1-2%。
他还做了一些测试:
1.读出部分应用程序、在 UniFlash 中关闭 ECC 功能。 他可以通过 UniFlash 写入相应的扇区、在本例中、使用引导加载程序仿真时擦除应用扇区时出错;
错误函数位置:Fapi_doBlankCheck ();
2.在 UniFlash 中打开 ECC 功能,通过 UniFlash 将一些应用程序写入相应的扇区,重启 芯片,然后可以 正常擦除。
3.使用 Fapi_Auto EccGeneration 模式在引导加载程序中编写应用程序。
擦除和写入函数都使用 TI 推荐的函数进行处理;函数原型如下。 请帮助找出根本原因、谢谢。
#pragma CODE_SECTION (3054 Flash_Erase、".TI.ramfunc");
静态 bool Flash_Erase (uint32_t 扇区地址)
{
Fapi_Status 3044 返回检查;
Fapi_Flash 4.70类型 oFlashStatus;
Fapi_Flash 4.70 WordType oFlashStatusWord;
oReturnCheck = Fapi_issueAsyncCommandWithAddress (Fapi_Erase 3872、(UINT32 *) SectorAddr);
while ( Fapi_checkFsmForReady() Fapi_Status_Fsm );
if ( oReturnCheck != Fapi_Status_Success )
{
返回 false;
}
oFlashStatus = Fapi_getFsmStatus ();
if (oFlashStatus !=0)
{
返回 false;
}
oReturnCheck = Fapi_doBlankCheck ((UINT32 *) SectorAddr、PAGE_SIZE、&oFlashStatusWord);
if ( oReturnCheck != Fapi_Status_Success )
{
返回 false;
}
返回 true;
}
#pragma CODE_SECTION (Flash_Program U.64、".TI.ramfunc");
静态 bool Flash_Program U.64 (uint32地址、uint64数据)
{
Fapi_Status 3044 返回检查;
Fapi_Flash 4.70类型 oFlashStatus;
Fapi_Flash 4.70 WordType oFlashStatusWord;
oReturnCheck = Fapi_issueProgrammingCommand ((Uint32 *) Address、(uint16*)&Data、4、0、0、Fapi_Auto EccGeneration);
while (Fapi_checkFsmForReady()== Fapi_Status_Fsm y);
if (oReturnCheck!= Fapi_Status_Success)
{
返回 false;
}
oFlashStatus = Fapi_getFsmStatus ();
if (oFlashStatus!= 0)
{
返回 false;
}
oReturnCheck = Fapi_doVerify ((UINT32 *)地址、2、(UINT32 *)&Data、&oFlashStatusWord);
if ( oReturnCheck != Fapi_Status_Success )
{
返回 false;
}
返回 true;
}