请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:RM48L940 主题中讨论的其他器件:HALCOGEN
我正在使用 HALCoGen 生成 的代码在 RM48处理器中启动。 我一直在通过代码来完全了解启动代码的作用、并对代码部分产生了疑问。 如果在启动期间检测到闪存 OTP 一位错误通知、sys_selftest.c 库中的函数 fmcBus2Check 似乎忽略了该通知。 下面显示了相关的代码部分。 代码似乎会评估 ESM 组1、通道40错误、如果发现错误、则只需在继续执行 fmcECCcheck 函数之前将其清除。 当然、ECC 自检尚未运行、因此标志可以错误设置、但是如果 ECC 通过自检、ESM 标志是否真正代表闪存 OTP 中的潜在故障?
如果闪存 OTP 1位错误为实数、ECC 应该已经校正了该错误、但它指示闪存 OTP 中可能发生故障。 未提供"用户代码开始/结束"语句、以允许用户解决此问题。 这真的是一个问题、还是这种1位闪存 OTP 错误在代码中的其他位置被捕获?
这可能是我对何时使用闪存 OTP 存储器位置的误解。 此时我会假设 MCU 启动时,许多(如果不是全部) OTP 位置已传输到 RAM 工作寄存器以正确配置 MCU。
谢谢、
艾伦
OID fmcBus2Check (void) { /*用户代码开始(32)*/ /*用户代码结束*/ /*在 FMC 内部启用 ECC 逻辑*/ flashWREG->FEDACCTRL1 = 0x000A060AU; 如果((esmREG->SR1[0U]& 0x40U)=0x40U)<--ESM 标志被选中 { /*在闪存模块读取闪存 OTP 期间检测到1位错误 对 FMC 内部的 ECC 逻辑运行自检* /*清除 ESM 组1通道6标志*/ esmREG->SR1[0U]= 0x40U;<-在继续之前,该标志只会在此时被清除,不会存储或标记可能的错误 fmcECCcheck();<-程序继续运行,就好像没有检测到错误 一样} /*在加电期间未检测到2位或1位错误*/ 其他 { fmcECCcheck(); } /* USER CODE BEGIN (33)*/<- USER CODE LVINE, But its E得很 晚。 任何1位闪存 OTP 错误的证据都已丢失 /*用户代码结束*/ }