您好,
我不明白为什么我使用的 Eep_Ftfc_Example_S32K144 可以正常工作。
但如果我删除擦除和写入代码,只想读取先前存储的数据,则会出现错误"FTFC_EEP_IP_STATUS_BLOCK_INCONSISTENT" 。
我已经为设备设置了 " 保留分区 " 和 " 保留这个范围 " 从 0x100000000 到 0x1000fff。
因此,第二轮代码是
/* 初始化时钟 */
Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);
/* 仅在 EERAM 未分区时进行分区,代码为 0x4 */
Eep_DepartParitition(T_EEEPROM_SIZE);
/* 初始化 Eep 驱动程序 */
Ftfc_Eep_Ip_Init(&EepFtfcCfg_VS_0);
///* 通过写入擦除值擦除内存 *///for (i=0; i < EEP_WRTESTPATT_SIZE; i+=4U)
//{
//retjobResultType = ftfc_EEP_Ip_Ip_EP_EEP_ADD + i,FTFC_EEP_IP_PAGE_LONGWORD,FALSE);//if (FTFC_EEP_IP_IP_IP_IP_PAGE_IP_PAGE_IP_FALSE);
//if (FTFC_EEP_IP_IP_IP_IP_IP_STATUS_OK!
= retjobResultType)
//{//Exit_Example (FALSE);//返回 0;//}
//}///* 向 eeprom 设备写入一个或多个完整的 eeprom 页面 *
///for (i=0; i < EEP_WRTESTPATT_SIZE;
i+=4U)/
/{/
/retjobResultType = Ftfc_EEP_Ip_Write (EPRESULTTYPE (E+=4U)//{/
/retjobResultType = Ftfc_Eep_Ip_Write EP_ERASE_START_ADD + i,dataWRTestPatt + i,FTFC_EEP_IP_PAGE_LONGWORD,FALSE);
//if (FTFC_EEP_IP_STATUS_OK!
= retjobResultType)
//{/
/Exit_Example (FALSE);/
/返回 0;//}//}
/* 比较 eeprom 内存区和应用程序数据缓冲区 */
for(i=0; i
retJobResultType = Ftfc_Eep_Ip_Compare(EEP_ERASE_START_ADD + i, dataWrTestPatt + i, FTFC_EEP_IP_PAGE_LONGWORD);
if(FTFC_EEP_IP_STATUS_OK != retJobResultType)
{
Exit_Example(FALSE);
return 0;
}
}
提前谢谢您。
"FTFC_EEP_IP_STATUS_BLOCK_INCONSISTENT" 可能是由块加法对齐引起的,除了在初始分区时保留此范围" 从 0x10000000 到 0x1000ffffff 以外,您能否提供更多有关 EEPROM 地址设置的信息?
嗨,@ck182、
一旦在 FlexNVM 上启用 EEE,应用内核就不再能直接访问 FlexNVM(备份)。此时,只能访问作为 EEPROM 的 FlexRAM。
如果 FlexNVM 是使用 EEP_FTFC_LOAD_AT_RESET_ENABLED 进行分区的,则在 RESET 后,备份闪存的内容会自动复制到 FlexRAM(EEPROM)中,并设置 EEERDY 标志。
在 main() 开始时,请确认一下:
EEERDY == 1,
DEPART 包含有效的分区代码,且
有效数据存在于 FlexRAM(EEPROM)中?
此致,
丹尼尔
你好 db16122,
感谢您的重播。
ck182_0-1777878996851.pngck182_0-1777878996851.png
我对"Eep_Ftfc_Ip_Example_S32K144" 原始示例未作任何改动。
此外,我还注意到,在执行这段代码时
retJobResultType = Ftfc_Eep_Ip_Write(EEP_ERASE_START_ADD + i, dataWrTestPatt + i, FTFC_EEP_IP_PAGE_LONGWORD, FALSE);
在示例中,它在 RAM 地址 0x14000000 处写入,这是正确的,但从未在 Flex Memory 中写入"某处" 。
我希望"somethings" 不仅在 ram 中写入,而且从地址 0x10000000 开始在 Flex 内存中写入,但我从未看到任何变化。
我不明白我错在哪里
我使用的是 DS3.4 和 RDT 1.01。
谢谢!
请分享用于数据闪存和 EEPROM 设置的 FlexNVM 分区代码。它可能需要知道在 1000000 和 1000FFFF 之间哪个部分被设置为 EEPROM。您可能需要根据设置读取 EEPROM 数据。
更多详情,请参阅 AN11983 使用 S32K1xx EEPROM 功能
@danielmartynek,抱歉回复晚了。由于其他工作,我已经停止了 RTD EEPROM 的相关工作。
现在我已经解决了这个问题。
所有代码和 S32K144 示例都能正常工作,但问题是 PEmicro 调试器每次都会进行大规模擦除。
所以我改用了 sector erase alrgortim 算法,而不是 pflash_dflahs_eeprom algortim 算法,现在可以正常工作了。
我也尝试过保留 pflash_dflahs_eeprom 算法并保留 FlexNMV 内存,但这个方法行不通。
对你来说是否正确?
提前感谢,再次为我的回复过长道歉。
你好@ck182 ,
我明白了,谢谢你的更新。
这些是PE Micro的专有算法。
请联系PE Micro技术支持。
BR,丹尼尔