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.

[参考译文] RM48L952:在发生中断时、在安全初始化中启用自检、从而导致 ESM 错误

Guru**** 2323450 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/587540/rm48l952-self-test-enable-in-safety-init-causing-esm-error-when-interrupt-occurs

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

大家好、

我正在尝试在 Hacogen 中使用 RTI 中断示例和"安全初始化"函数。 我的代码非常简单:

/*用户代码开始(2)*/
uint64_t milliseconds = 0;
/*用户代码结束*/

int main (void)
{
/*用户代码开始(3)*/
/*启用实时中断*/
rtiInit();

/*启用 RTI 比较0中断通知*/
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);

/*启用 IRQ -清除 CPS 寄存器中的 I 标志*/
/*注意:这通常由操作系统或 SVC 调度程序来完成*/
_enable_interrupt_();

/*启动 RTI 计数器块0 */
rtiStartCounter (rtiCOUNTER_BLOCK0);

while (true)
{

};
/*用户代码结束*/

返回0;
}


//用户代码开始(4)*/
void rtiNotification (uint32通知)
{
milliseconds ++;
}
/*用户代码结束*/ 

中断工作正常、但在我启用 Halcogen 中"Safety Init"选项卡中的所有框后、在 RTI 第一次中断后、ESM 模块中出现错误。 ESM 正在发出组3位7错误信号(FMC -不可纠正的错误:总线1和总线2接口(不包括地址奇偶校验错误和 EEPROM 组访问错误)。

我的 CCS 为6.1.0.00104、Halcogen 为04.06.00。 是否有我没有的配置?

kr

Thiago Esteves

ccmSelfCheck

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

    我认为您没有对整个闪存进行编程。 当 CPU 访问未编程的区域时、会产生 ECC 错误。 如果您使用 ECC 对整个闪存进行编程、该错误将消失。

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

    感谢您的回答。 我将刷写所有三个组:组0、组1和组7。 在 Halcogen 中、我在闪存选项卡中启用了"闪存 ECC 使能"、并使用调试器 XDS100v2检查了所有组在编程前被擦除、并且启用了"自动 ECC 生成"。 我是否遗漏了任何内容? 我仍然看到了这个问题…
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Thiago 您好!

    我使用 HALCoGen 4.6.1创建了一个项目。 在这个项目中、ECC 被启用、并且安全初始化中的所有自检被启用。  但我没有看到错误。 您 是否尝试从代码中某个位置的未编程闪存位置读取代码?   如果 ESM 组3通道7位置被置位、那么读取未编程位置将会得到一个错误、除非您针对整个闪存对 ECC 进行编程。

    此致、

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

    我的代码太简单了、我100%不会访问任何未编程的闪存位置、除非链接器或编译器(CCS 6.1.0.00104 + TI v5.2.2)为此创建了代码。 在任何情况下、我都得到了您对整个闪存进行编程的建议、并更改了链接器以计算和插入 CRC (sys_link.cmd)。

    存储器

    引导程序(X):origin=0x00000000 length=0x00000020 fill=0xffffffff
    FLASH0 (RX):origin=0x00000020 length=0x0017FFE0 vfill=0xffffffff
    FLASH1 (RX):origin=0x00180000 length=0x00180000 vfill=0xffffffff
    堆栈(RW):origin=0x08000000 length=0x00001500
    RAM (RW):origin=0x08001500 length=0x0003EB00

    /*用户代码开始(2)*/
    ECC_VEC (R):origin=0xf0400000 length=0x00000004 ECC={input_range=vectors}
    ECC_FLA0 (R):origin=0xf0400004 length=0x0002FFFC ECC={INPUT_RANGE=FLASH0}
    /*用户代码结束*/


    /*其他 *

    /*用户代码开始(6)*/
    ECC{
    algo 名称:address_mask = 0x003ff8.
    汉明_mask = R4
    奇偶校验掩码 = 0x0c
    镜像 = F021

    /*用户代码结束*/

    我还从调试器中删除了"Auto ECC generation"、错误消失了。 非常感谢。

    kr
    Thiago Esteves