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:从 RM44迁移会导致偶然的 ESM 组3通道7错误-推测取指令???

Guru**** 2337880 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/588269/rm48l952-migration-from-rm44-causes-occasional-esm-group-3-channel-7-errors---speculative-fetch

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

您好!

我的 RM44代码在 RM44 CPU 上"完美地"运行(OS、DMA、某些外设)、在某些移植工作后、代码在 RM48上运行、但当代码通过调试器停止时、ESM 组3通道7错误被激活。

症状很奇怪、因为如果您执行步进代码、问题可能不会出现、同样、如果我禁用1个任务(立即挂起)问题不会出现、但如果将同一个任务置于延迟循环(仅操作系统延迟)、问题会再次引起。 每次我设法完成整个基于 SafeTI 的 CPU 初始化并启动操作系统、直到出现此错误。

此外、FUNC_ERR_ADD 寄存器显示的 SW 值始终相同、但如果更改代码 A 位、地址可能会略有更改(几个字节)。 FUNC_ERR_ADD = 0x135a98。 我的代码只有0x20000长、并且"相同的代码"(由于需要一些 HalCoGen 更改而不再相同)与 RM44一起工作我强烈怀疑应用中没有任何错误、而且所有 HalCoGen 文件都被 RM48变体所取代 (这也是更改 CPU singe HalCoGen 的疯狂工作,不提供迁移选项,首先使 HCLK 相同,然后使用.DIL 文件 diff &手动将文件从 mfile 移动到其他文件,希望得到最好的结果:)。

我还使用"无代码执行、无专用边缘访问、无用户访问"启用0x130000至0x1400000之间的 MPU、并且不会触发。 通过将 MPU 设置为0x10000至0x20000的应用程序区域来测试 MPU、并生成预取中止。

在开始想 DMA 是否仍然会变得疯狂并执行一些时髦的操作之后、但知道它运行的是非私有边缘、因此假设 MPU 会捕获它、它是否会实际捕获它? 为什么 MPU 会发现该错误原因、因为 FUNC_ERR_ADD 清楚地表明问题在 MPU 监控区域...


经过数天的果站和读 e2e、并记住几个月前读过的旧帖子、"推测取回"是否会导致这种行为、因为一旦我完全编程整个 ROM、错误就会消失 (对于 IAR IDE、我使用了"linker->checks"->fill from 0 to 0x2FFFFF"选项、闪存实际上花费了很多时间)?

问题:

-为什么我的 RM44没有受到这种推测取操作的影响(从未对整个闪存进行编程)
-为什么步进代码看起来会产生很大的影响,错误是否出现
-您是否真的需要手动对整个闪存编程一次(一次就足够了? 在调试时始终刷写它所花费的时间太长)

—为什么 MPU 没有赶上它
-在生产中:您需要提供一个包含整个闪存的二进制文件吗? (基本上、现场更新可以使用正常的二进制文件来完成(如果编程时间很重要)。。)

最后一个
根据症状,是投机取的根本原因,是否有办法从某处检查,因为我不喜欢那些“可怕的失望”的问题,通常这些问题会迟早回来,除非你真的知道它为什么消失

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

    建议使用相应的 ECC 值填充孔洞、以避免由于推测取导致的不可纠正的 ECC 错误。 您可以使用项目 cmd 文件中的 fill 命令用0xFFFFFFFF 填充所有未使用的闪存。 将这些0xFFFFFFFF 放入.out 文件将导致 CCS 生成 ECC。

    FUNC_ERR_ADD 有2个部分:[2:0]是 B_OFF、[31:3]是 UNC_ERR_ADD。 如果寄存器值为0x135a98、则 UNC_ERR_ADD 应为0x25B53 (0x135a98 >> 3)。 该地址不在 MPU 范围内(0x130000~0x140000)。

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TRM 中的 UNC_ERR_ADD 说明:
    "当总线奇偶校验错误时、该寄存器捕获完整的32位传入地址。 它仅捕获22:3的地址以产生多位 ECC 错误。"
    因此、UNC_ERR_ADD 不会捕获它从地址捕获位22-3的最低3位、也不能像您那样将该值移位3。

    TRM 中的 B_OFF 说明:
    "捕获的地址与64位边界对齐、地址位[2:0]等于0"

    由于我在整个寄存器中有值0x135a98,我无法以任何其他方式解释 TRM 文本,因为错误在存储器范围0x135a98 - 0x135a9f...9f 最低的三个位置为0是... 98


    我还问了很多其他问题、我希望/需要回答这些问题。 此外、为什么在 RM44中、我们从未遇到过这种问题、我还在 RM48上运行 RM48 OS 演示软件没有遇到任何问题(也没有刷写整个存储器)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这可以关闭、我将创建与此相关的新线程、因为我有1个特定的请求。

    MPU 没有反应的原因是该地址没有被实际使用(因为它是推测取指令、而不是该地址的实际使用)。 并且基于 UNC_ERR_ADD 的相同源值、不应移位、如果出错、在将值放入寄存器时、它只会屏蔽来自错误地址的3个最低位。