嗨,目前使用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 operationwhile (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;} }
Green Deng:你好,抱歉没有看明白你的问题。你是说,APP执行上述程序的时候会发生执行失败。收到命令的750us之后程序没有清除flash的某个扇区,而是直接Reset芯片了?
嗨,目前使用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 operationwhile (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;} }
FANG DI:
回复 Green Deng:
嗨~你好
是收到命令後的750us執行上述程序,就會Reset,依照扇區沒有被Erase的結果,應該是跑到這行MCU就被Reset了
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *) Erase_address);
嗨,目前使用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 operationwhile (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;} }
FANG DI:
回复 Green Deng:
目前這個問題有解嗎?
TI中文支持网



