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.

[参考译文] RM46L852:ESMSR[4]在下电上电后读取0xC0000000

Guru**** 2393725 points
Other Parts Discussed in Thread: RM46L852, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/779925/rm46l852-esmsr-4-read-0xc0000000-after-power-cycle

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

大家好、

我们注意到 ESMSR 寄存器(RM46L852) 在上电时有时不清零。 在我们的下电上电测试后、我们会观察到这一点。  

我们捕获的一个情况是 ESMSR[4]的值为0xc000000。 根据数据表保留了两个通道(63和62)。

有人能给这个灯亮吗?

谢谢

Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在器件中、TRM 被声明在 ESMSR[4]的 nRST 值保持不变、但是在 PORRST 之后、它们将被重新初始化为缺省状态- 0。
    PORRST 之后 ESMSR[4]寄存器中的所有位必须为0。
    您可以监控 DCC 模块是否有错误。 DCC2错误信号被映射到 ESM 组1通道62。 ESM 组1错误具有可配置的中断响应和可配置的错误引脚行为。

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

    感谢您的快速响应。
    我们的测试是切断基于 RM46L852的电路板的电源。 因为 PORRST 会清除 ESMSR 寄存器。 因此、错误必须在加电后的启动过程中发生。
    我查看了我们之前的测试数据、ESMSR1 (0x80000000)和 ESMSR2 (00000004)显示了电源周期测试中最常见的错误。 这些错误对应于组1通道31 (CCMR4自检故障)和组3通道2 (CCMR4比较故障)。
    我的问题是这些错误是否偶尔发生
    由于来自 CCM 模块的 RM46芯片本身、
    或者由于我们的电路板设计、
    3或由于启动初始化不当而导致的。
    感谢您的建议。

    此致、
    Jeff
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    Cortex-R4F 的 CPU 比较模块(CCM-R4F)比较了运行在1oo1D (一对一、带诊断功能)锁步配置中的两个 Cortex-R4F CPU 的内核比较总线输出。 CPU 的内核比较总线输出中的任何差异都会标记为错误。 出于诊断目的、CCM-R4F 还包含自检功能、允许对 CCM-R4F 本身内的硬件故障进行引导时间检查。
    即使您使用的是自检、如果一切正常、初始化也应通过。
    能否附加 sys_startup.c 和 sys_selftest.c 文件?

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

    e2e.ti.com/.../0842.sys_5F00_startup.ce2e.ti.com/.../7750.sys_5F00_selftest.cHello、Miro

    我们执行 CCM 自检、如启动代码中所示。 但是、 在 CCM 自检之前检测到 CCM-R4F 错误。 请在 sys_startup.c 中搜索"2883911" 以了解更多信息。

    谢谢、

    Jeff

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

    您好、Miro、

    在我们的循环通电测试中发现了此问题、但热启动测试中不会出现此问题。

    我不确定这是否能为根本原因提供任何线索。 请告诉我我们是否有发现或提供更多信息。

    谢谢、

    Jeff

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

    Hercules MCU 包含在锁步操作模式下运行的双 Cortex-R4F CPU。 一个内核比较模块(CCM-R4)比较来自每个 R4F CPU 的输出信号。 两个 CPU 输出中的任何差异都被标记为高严重性级别的故障。 对于两个 CPU、不保证 CPU 内部寄存器以相同的状态加电。 CPU 通过函数调用将内部寄存器压入堆栈、这可能导致检测到内核比较错误。 因此、在进行任何函数调用之前、CPU 内部内核寄存器需要被初始化为预定义状态。

    请在启动后初始化 CPU 寄存器。

    /*初始化内核寄存器以避免 CCM 错误*/
    _coreInitRegisters_();
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ、

    感谢您的建议。  

    在跳转到 main()之前,start.S 中似乎调用了_coreInitRegisters_()。 (请参阅随附的文件)。 请查看,可能它错过了一些核心寄存器?。

    在功率循环情况下、假设所有内核寄存器都应设置为定义的值、e2e.ti.com/.../4810.reset.S 可能存在一些例外情况

    谢谢、

    Jeff

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

    上电、RESET.S 或 START.S 后调用哪个函数? 您使用哪种编译 IDE?

    最好在加电后将 CPU 内部内核寄存器初始化为零。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ

    它是 reset.S (抱歉、start.S 是一个拼写错误、我们的代码库中没有 start.S 文件)。  

    我们的编译器是 GNU arm-no-eabi-gcc。

    arm-none-eabi-gcc (Crossstep-NG Crossstep-ng-1.22.0) 5.2.0
    版权所有(C) 2015 Free Software Foundation、Inc.

    感谢您的帮助、如果需要更多信息、请告知我们。

    Jeff

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

    您是否仍然使用 HALCoGen 生成的 sys_startup.c、它调用 reset.S 中定义的_coreInitRegisters_()? 只需确保在使用 CPU 寄存器之前对其进行初始化即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ、

    我们不使用 HALCoGen 生成的 sys_startup.c 版本 早期初始化在 RESET.S (之前附加)中完成。 在 sys_startup.c 中,复位后立即调用_coreInitRegister__()。 我们的代码稍后会执行它。 我们将其拉高后、问题似乎不再发生。

    非常感谢您帮助解决此问题、感谢您的帮助。
    Jeff