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.

[参考译文] AM2432:AM2432 复位隔离内核 M4 卡在 SOC_waitForFwlUnlock 处

Guru**** 2782625 points

Other Parts Discussed in Thread: AM2432, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1601019/am2432-am2432-reset-isolation-core-m4-stuck-at-soc_waitforfwlunlock

器件型号: AM2432
主题: SysConfig 中讨论的其他器件

您好、

我将 AM2432 与工业 SDK 11.00.00.08 配合使用、

我正在尝试在工程上实现 reset_isolation 示例。 我有一个内核 M4 和内核 R5 的应用工程以及一个 SBL OSPI 工程、并在我的器件上刷写了这两个工程。 我的代码与该示例非常相似、但当它重新启动时、核心 M4 仍然卡住。

我期望会发生的情况是:
1.从 core m4,我调用 SOC_generateSwWarmResetMainDomainFromMcuDomain();
2.调用导致执行 resetReqIsr () 函数,  
然后在 gIPCRestartSem 上执行 SemaphoreP_POST;
3.然后执行 ipcRestartTask() 函数、等待 SOC_waitForFwlUnlock();
4.同时、内核 R5 重新启动并执行 SBL。 SBL OSPI 执行 Bootloader_socNotifyFirewallOpen() 并通知内核 m4;
5、内核 m4 现在可以继续执行。

我会发现、内核 R5 通过将魔术字值写入地址 0x0 来正确通知 FirewallOpen、但内核 M4 继续读取值 0。

我不明白这是否是一个地址问题。 我假设对于内核 R5、通知函数中使用的地址 0x0 直接是主域的地址 0x0、因为根据处理器视图、它应该是 ATCM 地址、但在此阶段尚未启用 ATCM。 而由于 SysConfig 中配置了 RAT 区域 CONFIG_ADDR_CONVERSION_REGION0 0x0(48 位转换地址)<-> 0x80000000(32 位本地地址)、内核 M4 访问主域的地址 0x0。

当我尝试使用 CCS 中的“Memory Browser“工具访问它时、我看到内核 R5 实际上看到该值被正确写入了 0x0、而如果我从内核 M4 读取地址 0x80000000、我会看到整个存储器区域为空。

此外、如果我向 SBL OSPI 工程添加 RAT 区域 0x0(48 位转换地址)<->0xA0000000(32 位本地地址)、那么它是有效的、但我希望该示例在没有这个时也能正常工作。

我可以做些什么来调查问题? 我是否有误解?

谢谢您、

此致、

Andrea

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

    您好、 Andrea、

    我正在查看您的查询、您可能希望在一两天内得到答复。

    此致、

    Anil.

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

    您好、 Andrea、

    实际的 SBL 不会写入地址 0x00 处的 PSRAM 存储器位置。 相反、它会写入 R5F TCMA 地址空间。

    您可以通过连接调试器并从 R5F 内核检查 CCS 中地址 0x00 处的内容来确认这一点。 观察到的值没有 0xFEDCBA98u、这表明 PSRAM 中没有发生写入。

    根据此行为、当 R5F 内核尝试写入地址 0x00 时、该地址似乎映射到 TCMA 存储器、而不是 PSRAM。

    您可以通过将调试器连接到 A53 内核并在 Memory Browser 中检查地址 0x00 来进一步验证这一点。

    在该位置、您将看到 0x00 或 0xFEDCBA98u、具体取决于映射和访问路径。

    请确认上述测试结果。 根据这一确认、我可以提出进一步的建议。

    此致、

    Anil.

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

    您好 Anil、

    感谢您的答复。

    [报价 userid=“525901" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1601019/am2432-am2432-reset-isolation-core-m4-stuck-at-soc_waitforfwlunlock/6174643

    实际的 SBL 不会写入地址 0x00 处的 PSRAM 存储器位置。 相反、它会写入 R5F TCMA 地址空间。

    您可以通过连接调试器并从 R5F 内核检查 CCS 中地址 0x00 处的内容来确认这一点。 观察到的值没有 0xFEDCBA98u、这表明 PSRAM 中没有发生写入。

    [/报价]

    如果我使用 CCS 中的 Memory Browser 检查内核 0、则可以看到值 0xFEDCBA98u 写入 0x0:

    这是执行 Bootloader_socNotifyFirewallOpen () 之前的屏幕截图:

    这是执行 Bootloader_socNotifyFirewallOpen () 后的屏幕截图:

    现在我还有一个问题:Memory Browser 工具是否会将地址解释为“Processor View“或“Main Domain“视图?

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    如果连接调试器并尝试从 R5F 内核查看地址 0x00 处的内容、它始终映射到 R5F TCM 存储器。

    在 AM243x 上、地址 0x00000000 永久映射到 R5F 的 TCM、不会映射到 PSRAM。 因此、从 R5F 内核对 0x00 进行的任何写入都会进入 TCM、在 R5F 域之外不可见。

    此外、MCU M4F 内核无法直接访问 SoC/PSRAM 地址。 M4F 必须使用区域地址转换器 (RAT) 来访问 PSRAM 或任何 SoC 级存储器。

    若要访问 R5F 和 M4F 之间的共享 PSRAM 存储器、请执行以下操作:

    • 在 R5F 内核上启用 RAT
    • 将本地 RAT 地址映射到所需的 PSRAM 物理地址
    • 通过 R5F 上的 RAT 映射地址写入已知数据
    • 在 MCU M4F 内核上启用 RAT
    • 将相同的 PSRAM 物理地址映射到 M4F 上的本地 RAT 地址
    • 通过 M4F 上的 RAT 映射地址读取数据

    使用这种方法、两个内核访问同一个物理 PSRAM 存储器、从而避免在地址 0x00 处进行固定的 TCM 映射。

    此致、

    Anil

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

    您好 Anil、

    感谢您的答复。

    我之前的解决方案是:
    -在内核 R5 上、一个具有本地地址 0xA0000000 和转换后的系统地址 0x0 的 RAT 区域
    -在内核 M4 上,一个带有本地地址 0x80000000 和转换后的系统地址 0x0 的 RAT 区域
    我只是不确定、因为我认为此解决方案是不必要的、因为我确信这些示例是正确的。

    我还有一些问题:
    -是否有必要使用 0x0 处的 PSRAM 区域来实现此机制? 或者、共享存储器区域是否足够?
    -我是否还需要在 MPU 中添加相应的区域?

    -此外,有了这个解决方案,一切似乎都正常工作。 但是、如果我在使用安全启动时执行该解决方案、那么在重启后执行 SOC_waitForFwlUnlock 时、内核 M4 上会出现 HWIP_HardFault。 具体来说、如果添加断点并逐步运行、执行就会起作用、但如果我没有设置任何断点并且执行未停止、就会收到该错误。 我的假设是、在内核 M4 上使用断点会减慢执行速度、并允许内核 R5 在内核 M4 过早访问 0x0 之前执行特定的操作。 所有这一切只发生在启用了安全启动的设备上、但我认为问题不在于安全启动本身。 事实上、在类似的项目中、即使使用安全启动、也不会出现此 HardFault 问题。
    RAT 区域的选择是否有问题?

    谢谢您、

    此致、

    Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、借助此解决方案、一切似乎都正常工作。 但是、如果我在使用安全启动时执行该解决方案、那么在重启后执行 SOC_waitForFwlUnlock 时、内核 M4 上会出现 HWIP_HardFault。 具体来说、如果添加断点并逐步运行、执行就会起作用、但如果我没有设置任何断点并且执行未停止、就会收到该错误。 我的假设是、在内核 M4 上使用断点会减慢执行速度、并允许内核 R5 在内核 M4 过早访问 0x0 之前执行特定的操作。 所有这一切只发生在启用了安全启动的设备上、但我认为问题不在于安全启动本身。 事实上、在类似的项目中、即使使用安全启动、也不会出现此 HardFault 问题。
    选择 RAT 区域是否有问题?

    我添加了我注意到的这个细节:似乎内核 M4 在 R5 内核已经重新启动到 SBL 之前访问存储器时会收到硬故障。 实际上、通过在 SOC_waitForFwlUnlock 上的 M4 内核上设置断点并在 SBL OSPI 的不同部分中添加 LOOP_FOREVER 调用、似乎没有特定的 SBL 指令会在内核 M4 在执行之前访问存储器时导致硬故障、并且在执行后允许内核 M4 毫无问题地访问存储器。 是否有一些 RBL 操作在使用安全启动时比不使用安全启动时更慢 、并且允许对内核 M4 进行存储器访问?
    目前、我通过在内核 M4 中添加 SOC_waitForFwlUnlock (1) 之前添加 ClockP_Sleep (1) 来解决了这个问题、它是有效的、但我也想了解我的假设是否正确。

    谢谢您、

    此致、

    Andrea

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

    您好 Andrea、

    我上周休假、导致回复延迟。
    我会将您的问题发送给一位 SBL 专家、以便对您的上述观察结果进行评论。
    要写入 0x00 PSRAM 存储器、我们需要 RAT;没有 RAT、就无法写入 0x00 存储器。

    此致、

    Anil.

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

    您好 Anil、

    感谢您的答复。

    是否有任何更新?

    此致、

    Andrea

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

    您好、

    指定的专家今天已离职。 请在接下来的 2/3 天内回复。

    此致、
    Ritapravo

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

    您好 Ritapravo、

    感谢您的答复。

    是否有任何更新?

    此致、

    Andrea