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.
您好!
我正在为 TMS570LS0714开发引导加载程序、并找到了 TI 提供的 Hercules 示例。 我遇到一个奇怪的问题、即 F021包装程序 BL_FLASH_FLASH_c 卡在无限循环中、因为 F021库无法成功初始化闪存组或将新数据写入内存。 遇到此问题的函数
uint32_t Fapi_BlockProgram( uint32_t Bank, uint32_t Flash_Start_Address, uint32_t Data_Start_Address, uint32_t Size_In_Bytes)
默认实现具有 while 循环、等待闪存退出 BUSY 状态、然后等待 FSM 状态成功完成。
if(( Flash_Start_Address == APP_START_ADDRESS ) || ( ucBank == 1 )){ timout_cntr = 1000000U; Fapi_initializeFlashBanks(Freq_In_MHz); /* used for API Rev2.01 */ Fapi_setActiveFlashBank((Fapi_FlashBankType)ucBank); Fapi_enableMainBankSectors(0xFFFFU); /* used for API 2.01*/ while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy ); while(FAPI_GET_FSM_STATUS != Fapi_Status_Success); }
当接收到一个 CAN 消息时、数据应该被写入到使用 Fapi_BlockProgram (..)的闪存中 函数、但经过一段时间后、执行会在最后一段时间内卡住(...) 环路。 我添加了一个计数器、允许继续执行、引导加载程序请求重新传输最后一条消息、但后续写入也会失败。
我注意到、在尝试写入闪存的不同部分时出现了这个问题。
其他可能相关的说明。 当发生此闪存问题时、我的工作台电源的电流消耗下降了20mA。 我快速探测了进入 MCU 的1V2电源轨、并注意到了一个奇怪的纹波、但还无法捕捉到该电压轨以提供屏幕截图。
我找出了尝试写入已写入的内存位置导致的根本问题。
尊敬的 Dainlus:
LS0714只有一个闪存组:组0 (0x0)。 为什么代码中使用 ucBank=1?
if ((Flash_Start_Address == APP_START_ADDRESS)||(ucBank == 1))
{
Timout_cntr = 1000000U;
Fapi_initializeFlashBanks (Freq_in_MHz);//用于 API Rev2.01 *
Fapi_setActiveFlashBank ((Fapi_FlashBankType) ucBank);
您好 QJ、
我刚刚使用了2021年的 BL_FLASH.c 版本。 我将进行更新以使用最新版本的 BL_FLASH.c