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.

[参考译文] AM2431:AM243X EVM 引导问题

Guru**** 2779905 points

Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1604163/am2431-am243x-evm-boot-up-issue

器件型号: AM2431
Thread 中讨论的其他器件: UNIFLASH

EVM 在 UART 模式下无法正常引导。 它工作正常、然后突然 UART 模式无法正常工作。 我在控制台中看不到字符“C",“,而、而是看到一些垃圾。

UART uniflash 步骤失败:

image.png

 

UART 控制台输出:  

image.png

我尝试使用 CCS Scripting 方法执行 SOC Initialization、但使用“loadJSFFile 命令“失败:

image.png

 

 

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

    您好、

    EVM 在 UART 模式下无法正确引导

    我假设您使用的是 TI EVM 而不是定制电路板、请确认这一点。 我希望 UART 引导模式设置正确。

    我尝试使用 CCS Scripting 方法执行 SOC Initialization、但使用“loadJSFFile command“失败:

    此命令在较新版本的 CCS 上不起作用、您可以直接 从 CCS 加载 sciclient_ccs_init.release.out 文件以初始化 SoC。

    此致、

    会面。

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

    尊敬的会议:

    是的、我当然处于使用 TI EVM 的 UART 引导模式。 为了排除电缆/电源问题、我使用不同的 EVM 板交换了相同的设置、这样就可以正常工作。

    我正在测试您建议解决这个问题的解决方案 AM2431:AM243x EVM,通过闪存引导 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛。 因为这样、电路板没有在 UART 模式下引导。

    关于 LoadJSFileCommand、如果此命令/方法过时、请更新过程。  

    谢谢、

    Prasanna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于 LoadJSFileCommand、如果此命令/方法过时、请更新程序。  [/报价]

    较新的 CCS 版本不支持此命令、但以前版本中支持此命令、因此这可能是未在 MCU+SDK 文档中更新该命令的原因、我将在内部检查是否可以更新此命令、现在您可以 在开发引导模式下直接从 CCS 加载 sciclient_ccs_init.release.out、正如我前面提到的初始化 EVM。

    是的、我当然处于使用 TI EVM 的 UART 引导模式。 为了排除电缆/电源问题、我使用不同的 EVM 板交换了相同的设置、工作正常。

    在 EVM 上的闪存似乎存在一些问题、在这里您看到了该问题、您能否尝试以下方法来尝试恢复闪存:  Re:AM2432:设置为混合模式后闪存错误  

    在最新版本 (11.2) 中、该问题已经得到解决、并在 SBL OSPI 中添加了用于启用 DAC 的代码、以下补丁发生了该更改、您可以将此集成到 SBL 中、而不是我在之前的主题中提供的修复程序:

    --- /home/a0513761/ti/MCU_PLUS_SDK/AM243/10_01_00/examples/drivers/boot/sbl_ospi/am243x-evm/r5fss0-0_nortos/main.c
    +++ /home/a0513761/ti/MCU_PLUS_SDK/AM243/11_02_00_24/examples/drivers/boot/sbl_ospi/am243x-evm/r5fss0-0_nortos/main.c
    @@ -113,6 +113,7 @@
     
         Bootloader_socNotifyFirewallOpen();
     
    +
         Drivers_open();
         Bootloader_profileAddProfilePoint("Drivers_open");
     
    @@ -225,7 +226,7 @@
                 #if 1
                 if( status == SystemP_SUCCESS)
                 {
    -                /* enable Phy and Phy pipeline for XIP execution */
    +                /* Enable Phy and Phy pipeline for XIP execution */
                     if( OSPI_isPhyEnable(gOspiHandle[CONFIG_OSPI0]) )
                     {
                         status = OSPI_enablePhy(gOspiHandle[CONFIG_OSPI0]);
    @@ -234,6 +235,9 @@
                         status = OSPI_enablePhyPipeline(gOspiHandle[CONFIG_OSPI0]);
                         DebugP_assert(status == SystemP_SUCCESS);
                     }
    +                /* Enable Dac mode */
    +                status = OSPI_enableDacMode(gOspiHandle[CONFIG_OSPI0]);
    +                DebugP_assert(status == SystemP_SUCCESS);
                 }
                 #endif
     
    

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

    尊敬的会议:

    感谢您的更新。 我使用当前的 SDK 10.1 测试了此修复程序、但它无法正常工作。  我更新为最新的 SDK 11.2、现在可以正常运行。 我想 SDK 中必须有其他一些修复才能使其正常工作。  

    我还没有着手恢复闪存的程序。 我会在我到达时告诉您。

    我有一个后续问题:请告诉我、这是否需要成为一个单独的主题:

    是否可以在 XIP 和非 XIP 执行之间动态切换?

    下面是我的用例:

    在 OSPI 引导加载程序中:

    1.检查闪存上已知偏移处的标志。

    2.如果 (FLAG =1)->在非 XIP 模式下运行存储在闪存偏移 X 处的 APP1

      Else ->在 XIP 模式下运行存储在闪存偏移 Y 处的 APP2。

    谢谢、

    Prasanna

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

    尊敬的 Prasanna:

    是否可以在 XIP 和非 XIP 执行之间动态切换?

    我认为这应该没问题、您可以通过检查您所描述的标志在 SBL 中的这两个应用之间进行切换。

    此致、

    会面。

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

    感谢您的确认。

    以下是我在 AM243x EVM 上进行验证的用例:

    - POR

    - RBL->R5 上的 SBL

    - SBL->检查标志->在 R5 上的非 XIP 模式下运行 APP1 ->在闪存中执行一些任务和更新标志->复位 SoC (R5+M4+DMSC)

    - RBL->R5 上的 SBL

    - sbl->检查标志->在 R5 上的 XIP 模式下运行 APP2

    复位 SoC 的最佳方法是什么?

    到目前为止、我已经尝试了这两种 API、并在 bootloader_soc.c 文件中看到了更多的 soc。

    1. soc_generateSwWarmResetMcuDomain()。 这似乎是有效的。 不确定是否全部复位。 执行此操作后闪存访问失败。

    2. soc_generateSwPORResetMainDomain()。  这不起作用。  

    谢谢、

    Prasanna

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

    感谢您的确认。

    以下是我在 AM243x EVM 上进行验证的用例:

    - POR

    - RBL->R5 上的 SBL

    - SBL->检查标志->在 R5 上的非 XIP 模式下运行 APP1 ->在闪存中执行一些任务和更新标志->复位 SoC (R5+M4+DMSC)

    - RBL->R5 上的 SBL

    - sbl->检查标志->在 R5 上的 XIP 模式下运行 APP2

    复位 SoC 的最佳方法是什么?

    到目前为止、我已经尝试了这两种 API、并在 bootloader_soc.c 文件中看到了更多的 soc。

    1. soc_generateSwWarmResetMcuDomain()。 这似乎是有效的。 不确定是否全部复位。 执行此操作后闪存访问失败。

    2. soc_generateSwPORResetMainDomain()。  这不起作用。  

    谢谢、

    Prasanna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SOC_generateSwWarmResetMcuDomain()。 这似乎是有效的。 不确定是否全部复位。 执行此操作后闪存访问失败。

    能否提供有关此故障的更多详细信息? 您是否收到任何可能指示出错的错误消息?

    您还可以使用 2 个非 XIP 映像(而不是 1 个非 XIP 映像和 1 个 XIP 映像)尝试此过程、并验证此过程是否起作用、这将提供一些提示、说明这是否是与 XIP 应用映像相关的问题或其他问题。

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

    尊敬的会议:

    我做了一些测试、现在有两个不同的问题:

    1.您能否确认 SBL_OSPI 是否只能访问具有 3 个地址字节的闪存? 我认为这仅限于 RBL。

    当我使用超过 16MB 的偏移量时、我无法让我的应用程序启动。 APP1 位于 0x80000、APP2 现在位于 0x200000。

    我需要使用 64MB 的总闪存大小。 这是我需要通过 syscfg 启用的一些配置、还是缺少一些初始化步骤?

    APP1(非 XIP)和 APP2 (XIP) 之间的切换:

    在 APP1 中、我的任务完成后、重置 SoC。 现在、SBL 检测到切换到 APP2 并成功加载 APP2。

    在这之后、如果我通过 POR/CCS 复位电路板并尝试加载 APP1、它会在 Bootloader_parseMulticoreAppImage ()-> Bootloader_verifyMulticoreImage () 函数处失败。 用于说明某些闪存初始化/复位未正确执行或未退出 XIP 模式。    

    在尝试更新 CCS/SDK 时、我遇到了调试器问题。 因此、我现在无法进一步调试。 我将在星期一上更新。

    谢谢、

    Prasanna

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

    您好、

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

    此致、
    Ritapravo

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

    尊敬的会议:

    我已将范围缩小到 MPU 配置:

    我注意到、在内部执行闪存读取时、您正在切换到使用 DAC 模式(即使在 syscfg 中未启用 DAC 模式)、然后根据初始状态将其禁用。 现在,如果没有为闪存地址空间定义 MPU 区域: 0x60000000 到 0x64000000 ,这些直接读取就会被搞乱。  

    Bootloader_verifyMulticoreImage ()->对映像进行身份验证时、首先尝试解析 X509 证书。 为此、您使用 DAC 模式并直接访问闪存。 这是失败的。

    因此、我添加了一个 MPU 区域并在所有 SBL、APP1 和 APP2 中定义了闪存区域。

    现在、这在我第一次引导 APP2、然后切换到 APP1 时有效。  如果我重置电路板、尝试引导至 APP1、它不起作用并且失败。

    对于我正在运行的所有 3 个不同应用程序、MPU Region 属性应该是什么样子?

    以下是我的当前设置:

    1. bootloader/sbl:完整的 64MB 闪存访问。 区域属性为“严格排序“

    2、App1:非 XIP : 完全 64MB 闪存访问。 区域属性为“严格排序“

    3. App2:XIP:仅需要部分闪存区域、并且此区域属性标记为“可缓存“以支持 XIP。

    这是有效的配置吗? 在这种情况下、设置 MPU 的最佳方法是什么?

    还请注意、在 SBL syscfg -> OSPI 基准时钟为 166.66MHz(启用 PHY)、但在其他示例中为 133.33MHz。 我希望它们是相同的、以免扰乱闪存访问。

    谢谢、

    Prasanna

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

    尊敬的会议:

    请按先前的要求澄清以下事项:

    用于复位 SoC 的正确 API(类似于 CCS 运行菜单中的“系统复位“选项)。

    2.我使用以下 FS 将二进制映像 (HS.API 和 XIP) 从我的应用程序代码中写入闪存。

    确认这些寄存器是否可以安全地从用户应用程序用于更新到闪存。  bootloader_uniflashFlashFile() 和 Bootloader_Uniflash_ uniflashFlashFile()

    使用这些函数将二进制文件写入闪存后、便会处理后续闪存访问。 我不确定导致此问题的原因。 也许我需要闪存复位或 OSPI 控制器复位?  

    谢谢、

    Prasanna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用正确的 API 重置 SoC(类似于 CCS Run 菜单中提供的“System Reset“选项)。

    请参阅以下常见问题解答:关于:  【常见问题解答】AM6442:AM64X:如何使 SOC 复位(热复位)?  

    我使用以下 FS 将二进制映像 (HS.XIP 和 XIP) 从我的应用程序代码写入闪存。

    此 API 专门用于通过 UNIFLASH 应用程序进行刷写、因此我不确定它在将其用于此用例时的行为。 您可以直接使用 Flash_write API 将内容写入闪存: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/11_02_00_24/exports/docs/api_guide_am243x/group__BOARD__FLASH__MODULE.html#ga001f20252aa7da2e6a33036cd2d45178 

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

    尊敬的会议:

    感谢您使用复位 API。 它按预期运行。 我的系统工作正常、现在我能够在 XIP 映像和非 XIP 映像之间正确切换。

    我在代码中对闪存进行了非对齐写入、使闪存处于奇怪的状态、导致后续访问失败。

    但我仍然没有在发生故障的 EVM 电路板上尝试恢复过程。 我将保持该主题开放、查看我是否可以解决此处发布的原始问题。

    谢谢、

    Prasanna