主题中讨论的其他器件:HALCOGEN
您好!
软件复位后、TI FEE 驱动器似乎无法写入闪存。
我们将使用随 HalcogGen v4.06提供的 TI FEE 驱动器并使用 F021闪存 API v2.01.01。 FEE 在 Halcogen 中设置为1个64字节块、2个虚拟扇区。
我们的引导加载程序在 PBIST 自检和内存初始化运行之前使用 FEE 从 RAM 备份数据。 这发生在 引导加载程序中的启动过程中(_c_int00())。 然后、在 引导加载程序启动实际应用程序之前、将数据从 FEE 读回 RAM。
如果 在执行应用程序期间发生致命错误、我们会将错误信息写入 RAM 的 NO_INIT 部分并导致软件复位(systemREG1->SYSECR |= 0x00008000)。
然后、引导加载程序启动并在复位后运行以下代码:
void _c_int00 (void)
{
SL_Init_R4Registers ();
sl_Init_StackPointers();
ApplyErrata();
//初始化系统-时钟、闪存设置,带 Efuse 自检
systemInit();
//针对勘误表 PBIST#4的权变措施
errata_PBIST_4 ();
//初始化 FEE 驱动器
TI_FEE ();
操作
{
TI_fee_MainFunction();
delay();
STATUS=TI_FEE _GetStatus (0);
}
while ((Status!= IDLE));
//备份 RAM 以支付费用
TI_fee_WriteAsync (1、(uint8*) u32_pRamBackupDataStartAddress);
操作
{
TI_fee_MainFunction();
delay();
STATUS=TI_FEE _GetStatus (0);
}
while ((Status!= IDLE));
////////////////////////// 运行自检、包括 PBIST ///////////////////////////////////////////////////////////
//////////////////////// 为 RAM 和外设进行内存初始化////////////////////////////////////////////////////////////
//重新启动 FEE 驱动器,因为 memoryInit 擦除了所有 RAM
TI_FEE ();
操作
{
TI_fee_MainFunction();
delay();
STATUS=TI_FEE _GetStatus (0);
}
while ((Status!= IDLE));
//从 FEE 中恢复 RAM
TI_fee_read (1、0、(uint8*) u08_pDataBufferToRead、64);
操作
{
TI_fee_MainFunction();
delay();
STATUS=TI_FEE _GetStatus (0);
}
while ((Status!= IDLE));
///////////////////////////////////////////////////////////// 启动应用程序//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
当我进行冷启动或 通过 调试器启动时、我可以看到 FEE 被正确写入(通过查看调试器中的闪存7组)。 但是、如果我引起一个软件复位、RAM 数据不会写入 FEE。 我还尝试不使用 TI FEE 驱动器、而是使用 F021库向 FLASH7银行写入数据 -这也导致了从应用程序执行软件复位时出现问题((FAPI_GET_FSM_STATUS!= Fapi_Status_Success)始终为 false)。
我是否可以做些什么来将闪存驱动器正确地准备为与外部复位/调试器复位/上电复位是复位原因时相同的状态? 我们确实必须在 SWRST 之后备份 RAM 数据、以便在引导加载程序中完成 PBIST 和 memoryInit 后诊断应用中的原因。
此致、
Chris