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.

[参考译文] LP-AM263:AM263x 多核工程通过 QSPI 闪存运行、但不通过 UART (XDS110) 直接刷写时运行

Guru**** 2835765 points

Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1623536/lp-am263-am263x-multicore-project-runs-via-qspi-flash-but-not-when-directly-flashed-via-uart-xds110

器件型号: LP-AM263
Thread 中讨论的其他器件: UNIFLASH

您好:
 
我正在使用 MCU+ SDK (MCU_PLUS_SDK_am263x_11_01_00_19) 和 Code Composer Studio 来处理 AM263x LaunchPad。 我创建了一个具有 4 个 R5F 内核的定制多核 FreeRTOS 项目、其中:
  • Core0 会切换用户 LED
  • 在所有内核上启用 IPC 通信
我观察到不同的行为、具体取决于应用程序的加载方式。
案例 1–调试运行(不工作)
 
当我通过 CCS Debug 运行工程时、应用程序会正确运行。
所有内核正常启动并且 IPC 消息打印在 UART 控制台上、但 IPC 开始按摩后没有打印任何内容。
 
屏幕截图: Debug Run.png
 
案例 2–使用 UniFlash 的 QSPI 闪存(工作)
 
当我通过 UniFlash 使用 QSPI 和 SBL 刷写应用程序时、应用程序也会正常工作。
引导加载程序会加载多核映像、并按预期显示 IPC 消息。
 
屏幕截图:
 
屏幕截图: QSPI output.png
 
案例 3–在 CCS 上通过 UART 直接闪存(不工作)
 
当我通过 UART 引导模式直接刷写应用程序时、程序无法正确执行。
UART 控制台仅显示:
 
IPC 启动
[r5F1-1] 0.000460s:IPC 启动
 
并且应用不会继续执行。
 
屏幕截图: UART Output.png
 
硬件/其他信息
  • 电路板:AM263x LaunchPad
  • SDK:MCU+ SDK (MCU_PLUS_SDK_am263x_11_01_00_19)
  • IDE:CCS
  • RTOS:FreeRTOS
工程类型:定制多核工程(4 个内核)
我还核实:
  • 正确设置引导模式开关以进行 UART 引导
  • 为所有内核启用 IPC
  • 同一工程可以正确运行 QSPI 引导

附加代码为 ZIP。 Main_Card_Core_0.zip 

问题
为什么应用程序在通过 QSPI 引导加载时工作、但在通过 UART 直接刷写或调试工程时会失败?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    多核工程取决于内核间同步。 当通过 CCS/DEBUG (mode) 加载时、您能告诉我是否加载所有内核、以及各个内核的启动程序顺序是什么。

    此外、我将无法调试您共享的应用程序。

    请参阅 IPC 共享存储器示例作为参考。

    SBL 的工作顺序可能是因为内核的运行顺序-

    在 SBL 中、第一个内核 3、然后是内核 2、然后是 core1、然后 core0 开始运行。

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

    我将使用 UART 引导模式检查 SDK 中的 IPC 共享存储器示例、我之前没有测试过该示例、但我希望它能照常工作、因为内核启动序列、逻辑与 SBL OSPI mcelf 相同

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好:Nilabh、
    感谢您的答复。
    是的、我将在 CCS 调试模式下加载所有内核。 我在查询中附加了 创建 4 核工程时生成的整个多核工程文件。 此处链接到  相同的 Github 链接。
    我 在从 CCS 运行时遵循了所需的内核启动序列、但应用程序仍无法正常工作。 由于可以在串行终端上看到、因此不会打印预期的输出。
    供参考:
    •  通过 CCS 加载时、IPC 共享存储器示例工作正常。
    • 但是、当我创建一个新的空多核工程 并使用基本的 LED 闪烁示例实施一个简单的 IPC 机制时、通过 CCS/调试加载时它无法正确运行。
    • 如果我将相同的代码刷写到 QSPI 并从闪存引导、则应用程序工作正常、所有内核都按预期运行。
    因此、只有通过 CCS/DEBUG (UART/XDS110) 运行多核应用程序、而闪存引导正常工作时、才会出现该问题。
    此外、正如您所提到的、我尝试了遵循 SBL 内核启动序列 (Core3→Core2→Core1→Core0)、但行为仍然相同。
    我通过运行--> FLASH_PROJECCT、运行--> debug_project 来刷写代码。
    通过 CCS 调试模式加载多核应用时、如果需要执行任何其他步骤、敬请告知我们。
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个主要关注点是 GEL 文件:

    1.在基于 CCS 的开发引导模式下调试过程中、您应该会获取 GEL 文件日志、此流程应该会编译工程并点击调试工程、它会自动加载 GEL 文件以完成初始化。

    但在使用 UART 引导模式时、您需要避免使用 GEL 文件、因为它们将覆盖 SBL_URT 配置、不会使程序正常运行。

    请勿使用 CCS 的闪存项目、因为该器件不是内部闪存器件、因此需要单独使用 Uniflash 工具来刷写工程。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好:Nilabh、
    感谢您对 GEL 文件的澄清。
    为了验证这种行为、我 直接从 MCU+ SDK 测试了 SDK 示例 ipc_rpmsg_echo_callback。
    以下是我的意见:
    1. 当我编译示例并使用具有 QSPI 引导模式的 Uniflash 对其进行刷写时、应用程序会正确运行、我可以在串行终端上看到预期的日志、如 README.html 所示。
    2. 但是、当我尝试通过 DEVBOOT 在 CCS 调试模式下运行相同示例时、应用程序不会运行。 串行终端上未打印任何日志。
    3. 我还尝试了 UART 引导模式,但行为是相同的 — 应用程序不会启动,也不会打印日志。
    4. 从 CCS 运行时、我还确保按照建议遵循内核启动序列:
      Core3→Core2→Core1→Core0
    尽管遵循了这个顺序、但通过 CCS 进行调试时、应用仍然不会运行。
    所以目前的行为是:
    • QSPI 引导(通过 Uniflash) →正常工作
    •  CCS 中的 UART 引导调试→不工作
       
    •  CCS 中的 DEVMODE 调试→不工作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想您可能缺少一些步骤、因为我同时测试了开发引导模式和 UART 引导模式、所以它工作正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我当前的入职顺序如下:
    1. 工程选择: 在工程向导中搜索并选择 IPC RPMSG 回调示例。
    2. 工具链配置: 选择具有 FreeRTOS 的默认 CCS TI 编译器。
    3. 导入和设置: 成功将工程导入我的工作区。
    4. 编译过程: 运行编译、会生成多核 .appimage 和 .mcelf 文件(如我的控制台输出中所示)。
    5. 加载:RUN->闪存项目/调试项目 。
    这符合 TI 的 API 指南
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    快速更新

    我可以ipc_rpmsg_echo_callback 在 UART 引导模式下使用 Python UART 引导加载程序脚本成功刷写工程。
    • 命令: python .\uart_bootloader.py -p COM6 --bootloader=...sbl_uart_multicore_elf.release.tiimage --file=...ipc_rpmsg_echo_callback_system.mcelf
    • 结果: 状态报告成功、我可以通过 UART 终端看到预期的日志。 这样可确认我的硬件和多核映像正确无误。
    问题:
    1. Run -> Flash: 当我尝试使用内部 CCS“Flash"命令“命令时、它不起作用。
    2. Run -> Debug: 当我尝试使用“Debug"按钮“按钮时、工程无法正确加载、并且无法在控制台中看到任何日志。

     在 CCS 中对程序进行刷写/调试的正确方法是什么。

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

    请参阅以下内容:(详细阅读应该有助于全面了解刷写和加载)

    software-dl.ti.com/.../LOADING_APPLICATION.html

    请勿使用 CCS 的闪存项目、因为该器件不是内部闪存器件、因此需要单独使用 Uniflash 工具来刷写项目

    我之前提到过这一点、这不是内部闪存器件、因此它也需要使用 python 脚本或 Uniflash 进行显式刷写。