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.

APP 清除 一個 Sector 時,有機率會失敗導致MCU重啟

嗨,目前使用F28374S,在測試於APP程式理面將一個扇區給清除,但是目前測試時發現有機率進到下面的副程式時會失敗,導致MCU重啟

目前有設置收到清除命令後750 uS會做清除動作,也就是下段指令,等待1.5S 後 Mcu重啟,重啟後會到IAP程式來判斷扇區是否有被清除。

不過測試上百次總會有那麼幾次發現有奇怪的問題,因此用示波器抓問題,剛好在750uS時就Reset了可以確認是下段指令有問題。

不曉得下面這段程式會有哪個部分造成此問題嗎?

#pragma CODE_SECTION(Clear_Flash_Password, "ramfuncs");
void Clear_Flash_Password(void) { // // Bank0 Erase Program // EALLOW; PassWord_Reser_OK = 1; uint32 Erase_address = 0xBE000; Fapi_StatusType oReturnCheck; volatile Fapi_FlashStatusType oFlashStatus; Fapi_FlashStatusWordType oFlashStatusWord; Check_Write_Error_Flag = 0; Erase_FLASH_Flag = 0; oReturnCheck = Fapi_initializeAPI(F021_CPU0_W0_BASE_ADDRESS, 200); //-----清除Flash空間----- if (oReturnCheck != Fapi_Status_Success) { Erase_FLASH_Flag = 1; // Check Flash API documentation for possible errors //Example_Error(oReturnCheck); PassWord_Reser_OK = 0; } oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0); if (oReturnCheck != Fapi_Status_Success) { Erase_FLASH_Flag = 2; // Check Flash API documentation for possible errors //Example_Error(oReturnCheck); PassWord_Reser_OK = 0; } oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *) Erase_address); // Wait until FSM is done with erase sector operation while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){} // // Verify that SectorL is erased. The Erase step itself does a // verify as it goes. This verify is a 2nd verification that can be done. // oReturnCheck = Fapi_doBlankCheck((uint32 *)Bzero_SectorN_start, Bzero_16KSector_u32length, &oFlashStatusWord); if (oReturnCheck != Fapi_Status_Success) { Erase_FLASH_Flag = 3; // Check Flash API documentation for possible errors //Example_Error(oReturnCheck); PassWord_Reser_OK = 0; } }