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.

[参考译文] RM48L940:HALCoGen 自检启动代码

Guru**** 670150 points
Other Parts Discussed in Thread: HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/722145/rm48l940-halcogen-self-test-startup-code

器件型号: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 错误的证据都已丢失
/*用户代码结束*/
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Allen、

    如果在启动期间检测到单位错误并进行纠正、则上述序列将运行用于此校正的 ECC 机制的检查。 如果 ECC 机制工作正常、则可以依赖器件运行。 如果需要、应用程序仍可以跟踪纠正的单位错误数量。 我将向 HALCoGen 团队添加此建议、以便他们可以添加新的"用户代码"部分、让应用程序选择下一步。

    在启动期间读取的闪存 OTP 位置仅在启动期间读取。 无需将它们复制到其他存储器、甚至应用程序也无需再次读取它们。

    此致、
    Sunil
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sunil、

    感谢您的澄清。 我认为我的困惑不是因为我认识到了电子保险丝和 OTP 系统之间的差异。 第8行中使用"0x40"来检查 ESM 状态使我感到很失望。 即位6 (通道6 - FMC 错误)而不是位40 (通道40 -电子保险丝错误)-我应该捕获到的 Rootky 错误。 交叉参考使我认为电子保险丝和 OTP 是相关的。

    第6行中的"flashWREG->FEDACCTRL1 = 0x000A060AU;"语句也使我失望。 在检查 ESM 错误标志6之前、闪存 ECC 似乎被启用。 这不会为闪存 OTP 读取留出时间来产生问题。 在进一步审阅后、可以在_c_int00 ()的前几行中找到相同的确切语句、这意味着闪存 ECC 已启用、可以感应代码的开头。 我质疑为什么在 fmcBus2Check()中再次重复这一表述,但它不会影响最终结果。

    基于这一点、在随后的步骤将 ESM 清除之前、似乎用户代码会在"user code begin (32)"处捕获 ESM 通道6错误。 可能不需要向 HALCoGen 团队提出建议来添加额外的"用户代码"部分。

    谢谢、
    艾伦