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.

[参考译文] AM263P4:了解复位和引导矢量

Guru**** 2595800 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1372315/am263p4-understanding-resets-and-boot-vectors

器件型号:AM263P4

工具与软件:

您好!
我想再次核对一下我对 TCMA 中引导矢量表的理解并复位:

  1.  一旦覆盖 ROM 引导加载程序且控制权被传递给 SBL/SW、就无法复位回 ROM 引导加载程序。 软件控制的复位将 使 R5开始使用地址0处的引导矢量。  
    1. 如果引导矢量损坏且命令进行复位、会发生什么情况? 依赖 PMIC 看门狗进行外部 POR 复位?
    2. 我知道、理论上、我们可以通过将 SBL 的引导矢量表设置为0来切换回 SBL、但这是不是推荐的做法?  
  2.  如果所有内核都 使用地址0x0000_0000的引导矢量进行复位、这是否意味着它们都必须共享相同的矢量表? 在向量中、我们可以根据它们的核心 ID 切换行为?

谢谢!

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

     Eric Liu、您好!

    Unknown 说:
    ]如果引导矢量损坏并且发出复位命令、会发生什么情况? 依赖 PMIC 看门狗进行外部 POR 复位?[/QUOT]

    有。 这是预期行为、此类故障属于灾难性故障、至少需要 热复位才能恢复系统。

    [quote userid="608245" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1372315/am263p4-understanding-resets-and-boot-vectors 我知道、理论上、我们可以通过将其引导矢量表设置为0来切换回 SBL、但这是一个推荐的做法吗?

    不是通过软件实现的。 应依靠热复位流程来复位系统。

    [报价 userid="608245" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1372315/am263p4-understanding-resets-and-boot-vectors ]]如果所有内核都 使用地址0x0000_0000处的引导矢量进行复位、这是否意味着它们都必须共享同一个矢量表? 在向量中、我们可以根据其核心 ID 切换行为?


    每个内核都有其 TCM 存储器、该存储器 在其访问中映射到0x0。 物理上、这些存储器是不同的存储器、但对于 TCM 快速路径、它们映射在0x0、从而可以更快地访问。 所以 编号  但是、所有 CPU 的引导矢量的地址0x0000_0000是相同的、它们本质上是不同的存储器和不同的矢量表。

    如果您可能感兴趣、此常见问题解答将帮助您澄清许多有关器件复位架构的问题- https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1342613/faq-mcu-plus-sdk-am263x-what-are-the-difference-types-of-reset-in-the-soc

    我希望这对您有所帮助。

    此致、
    Aakash

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

    谢谢 Aakash、

    这非常有用、并且详细说明了、我有一个后续问题、那就是是否有 建议的方法 在内核内的应用之间进行切换? 示例:SBL 之后有一个额外的引导加载程序、该额外的引导加载程序需要加载主应用程序。

    我假设我们 将引导矢量的内容更改为要跳转到的映像、然后进行复位。 这项工作是否可取?  

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

     

    我建议始终使用简单的 JUMP 或分支指令来引导加载程序。 但它更为复杂、因为它涉及到完全重新初始化高速缓存、MPU 和中断控制器(VIM)。

    因此、另一种选择是使用上面的常见问题解答中提到的 G_RST。 这将允许自动清除所有子系统项目。 这也意味着您将观察跟踪模块(即 ETM)和调试器(也正在清除)。 对于 AM263Px、您将看到 RAT 和 RL2也将发生同样的复位。

    这是你的调用如何做同样的。

    此致、
    Aakash

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

    在  您建议的第一种方法中、我们使用三级引导加载程序的跳转/分支、是否仍需更改0x0000_0000处的异常表? R5硬件是否 仅针对复位处理程序或针对其他异常也只查看0x000_0000?  

    如果我正确理解了 SDK、我们 需要在 VIM 中手动注册 IRQ/FIQ 处理程序、 那么这些处理程序是否明确需要出现在0x0000_0000的表中?

    感谢您帮助澄清问题、

    Eric

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

     

    异常表(复位处理程序)需要指向第三引导加载程序的初始化代码。 这需要更新。 对于不同的引导加载程序、您可以对 FIQ/IRQ 代码重复使用异常处理、但这可能会使您的设计变得复杂、尤其是对于您更愿意使用 CCS 加载流程的开发流程而言。

    此致、
    Aakash

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

    嗨、 、  

    抱歉、恐怕我仍然有一点迷路。 在我的假设(全部在同一内核上)中:SBL 加载三级引导加载程序、TertiaryBL 加载应用。 根据文档、我可以从 SBL -> TertiaryBL 中收集这部分信息、我们需要将异常表指向三级 BL 的初始化代码、然后命令复位。  

    我 不清楚从 TertiaryBL 到"应用"的步骤是什么。 根据您之前的注释、一种选择是在 TertiaryBL ->应用程序初始化代码中添加分支/跳转命令、但我想知道我们是否还需要修改0x000_0000处的异常表、以便应用程序的向量位于其中。  换句话说、从 MCU 硬件的角度来看、异常表是只包含该内核中代码的起始地址、还是它还需要表中的其他条目来执行?

    再次感谢、  
    Eric

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

    Eric、您好!

    重置附带有价格。 如果您覆盖矢量表(休息前)、您将打开一个窗口、其中您的当前软件缺少异常表、并可能导致灾难性故障。 但是、它使软件更容易、因为 MPU、高速缓存、向量或调试寄存器等所有核心依赖项都已停止、并且您可以观察到干净的程序启动。

    我的建议是尽量减少故障窗口。 就要重置 CPU 或子系统、 从而覆盖中断表。 在整个系统执行过程中随时覆盖。

    此致、
    Aakash