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.

[参考译文] TDA2EVM5777:SBL 多核邮箱 EVE UART 输出问题

Guru**** 2614265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/658380/tda2evm5777-sbl-multicore-mailbox-eve-uart-output-issues

器件型号:TDA2EVM5777

你(们)好

  我想在 "ti_compones\drivers\pdk_01_08_00_16\packages/ti\boot\sbl_auto_examples\sbl_multicore_mbx\tda2xx"下测试 SBL 多核邮箱示例

  我通过"MultoreImageGen_tda2xx.bat"生成了一个与 A15和 EVE1输出文件组合的 AppImage。

  结果很好:

   多核邮箱应用- MPU-Core0主内核

   EVE1引导成功

  但在读取 src 文件"SBL_mbx_MPU_CPU0.c"后、我发现"多核邮箱应用- MPU-Core0主内核"和" EVE1启动成功"都是从 A15输出的、而 EVE1只是在其主函数中向 A15发送消息、而不向 UART 输出任何内容。

  我的问题是如何直接从 EVE 输出日志?  

  我已经测试了以下方法、但无法正常工作:

 1 C 语言的 printf

  在"SBL_mbx_eve1.c"中   

      void main (void){

uint32_t msg ='D'


printf ("EVE1 main\n");

/*等待来自 MPU 的消息*/
while (message_invalid ==
MailboxGetMessage (SOC_MAILBOX2_base、mailbox_queue_6、&msg);

/*向 MPU 发送 ACK 消息*/
MailboxSendMessage (SOC_MAILBOX9_BASE、mailbox_queue_0、0xAA55FF00);
while (1);

  这里、printf 函数没有输出日志。

  2 个 UARTConfigPuts()

  就像 "SBL_mbx_MPU_CPU0.c"一样、我在  "SBL_mbx_eve1.c"中添加了 UARTConfigPUTs ():

 void main (void){

uint32_t msg ='D';

UARTConfigPuts (uartBaseAddr、"\r\n EVE1主 UARTConfigPuts\r\n "、-1);

/*等待来自 MPU 的消息*/
while (message_invalid ==
MailboxGetMessage (SOC_MAILBOX2_base、mailbox_queue_6、&msg);

/*向 MPU 发送 ACK 消息*/
MailboxSendMessage (SOC_MAILBOX9_BASE、mailbox_queue_0、0xAA55FF00);
while (1);

   但是 、UARTConfigPut 也不起作用。

那么、如何直接从 EVE 输出日志?

谢谢

Xuanbo

   

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

    在第一种情况下、您使用 printf、这意味着消息不会发送到 UART 控制台。
    对于第二种情况、您将从 EVE 向 UART 发送一些数据、而无需等待 SBL 完成。
    这可能会导致 SBL 日志中的某些损坏。
    如果要从 EVE 输出日志、应等待 SBL 完成、请在 EVE 应用程序中执行 UART 初始化(与 SBL 使用的 UART 配置无关)、然后发送 UART 输出。

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

    你好、Rishabh

      您的意思是"等待 SBL 完成"?

      输出"EVE1启动成功"日志是否意味着"SBL 已完成"? 因为此时已经实现了 A15和 EVE 的主功能 。

      我在 EVE 应用程序中执行了 UART 初始化、但仍然无法正常工作:

    "SBL_mbx_eve1.c"  

    uint32_t uartBaseAddr = SOC_UART1_base;

    void padConfig_prcmEnable()

      /*焊盘配置*/

      HW_WR_REG32 (SOC_CORE_PAD_IO_REGISTER+CTRL_CORE_PAD_UART1_RXD、0x00040000);

      HW_WR_REG32 (SOC_CORE_PAD_IO_REGISTER+CTRL_CORE_PAD_UART1_TXD、0x00000000);

      /*设置 UART 参数*/

      UARTConfigInit (uartBaseAddr、BAUD_RATH_115200、UART_WORD_LENGTH_8、UART_STOP_BIT_1、UART_NO_奇 偶校验、

              UART_16x_MODE);

    void main (void){

      uint32_t msg ='D';

      /*等待来自 MPU 的消息*/

      while (message_invalid ==

         MailboxGetMessage (SOC_MAILBOX2_base、mailbox_queue_6、&msg);

      /*向 MPU 发送 ACK 消息*/

      MailboxSendMessage (SOC_MAILBOX9_BASE、mailbox_queue_0、0xAA55FF00);

      /*Pad 配置和 PRCM 启用*/

      padConfig_prcmEnable();

      UARTConfigPuts (uartBaseAddr、"\r\n EVE1主 UARTConfigPuts\r\n "、-1);

      while (1);

    与"SBL_mbx_MPU_CPU0.c"相同、但没有"EVE1主 UARTConfigPuts"日志输出。

    2.

    uint32_t uartBaseAddr = SOC_UART2_base;

    void padConfig_prcmEnable()

      /*焊盘配置*/

      HW_WR_REG32 (SOC_CORE_PAD_IO_REGISTER+CTRL_CORE_PAD_UART2_RXD、0x00040000);

      HW_WR_REG32 (SOC_CORE_PAD_IO_REGISTER+CTRL_CORE_PAD_UART2_TXD、0x00000000);

      /*设置 UART 参数*/

      UARTConfigInit (uartBaseAddr、BAUD_RATH_115200、UART_WORD_LENGTH_8、UART_STOP_BIT_1、UART_NO_奇 偶校验、

              UART_16x_MODE);

    void main (void){

      uint32_t msg ='D';

      /*等待来自 MPU 的消息*/

      while (message_invalid ==

         MailboxGetMessage (SOC_MAILBOX2_base、mailbox_queue_6、&msg);

      /*向 MPU 发送 ACK 消息*/

      MailboxSendMessage (SOC_MAILBOX9_BASE、mailbox_queue_0、0xAA55FF00);

      /*Pad 配置和 PRCM 启用*/

      padConfig_prcmEnable();

      UARTConfigPuts (uartBaseAddr、"\r\n EVE1主 UARTConfigPuts\r\n "、-1);

      while (1);

    请使用 UART2替换 UART1、但该方法也不起作用。

    根据 TDA2X EVM 原理图、USB 端子仅连接到 UART1:

    那么、应用中是否只能使用 UART1?

    谢谢

    Xuanbo

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

    SBL 在主器件 A15上运行。 A15解析应用程序映像、在识别/加载多核映像中存在的应用程序映像后、从站内核将逐个退出复位状态。 首先是 IPU、然后是 DSP、最后是 EVE。 然后、它将打印时序统计信息。 之后、SBL 将跳转到 A15应用程序。 直到 SBL 未跳转到 A15应用程序、SBL 未完成。

    未连接 EVM 上的 UART2、因此应使用 UART1。

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

    感谢你的答复。
    我知道 SBL 流程、就像您说的、"加载映像、重置从内核、然后跳转到主内核的二进制文件、即 A15应用程序"。 "SBL_mbx_MPU_CPU0.c"的主函数是否是 A15应用程序? 我之前的理解是"SBL_mbx_MPU_CPU0.c"的主函数是 A15的应用程序、"SBL_mbx_eve1.c"的主函数是 EVE 应用程序。 因此、当输出"EVE1引导成功"日志时、A15应用程序已跳入并实现、这意味着 SBL 已完成? 但从你上面所说的话来看,我认为我的理解是错误的。
    那么、哪一部分是 A15应用、哪一部分是 EVE 应用?

    谢谢
    Xuanbo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、整个日志是:

    TDA2xx SBL 引导

    DPLL 配置完成

    时钟域配置完成

    模块启用配置完成

    TI EVM 焊盘配置完成

    DDR 配置完成

    应用程序映像下载开始

    SD Boot (SD 引导)-文件打开成功完成

    尝试使用标题版本1引导应用程序映像

    MPU CPU0映像加载完成

    DSP1映像加载完成

    EVE1图像加载完成

    应用程序映像下载完成

    将 MPU CPU1置于关闭模式

    EVE MMU 配置完成

    EVE MMU 配置完成

    EVE MMU 配置完成

    EVE MMU 配置完成

    (一

    PMCCNTR 每64个时钟周期进行一次计数、每64个时钟周期进行多次计数、以获得实际的 CPU 周期

    SBL 初始配置周期- 114701 (9.78ms)
    SoC Init 周期- 264161 (22.54ms)
    DDR 配置时钟周期- 68023 (5.80ms)
    APP 图像加载周期- 814209 (69.47ms)
    从 Core 启动周期- 323094 (27.57ms)
    SBL 启动周期- 1585525 (135.29ms)
    SBL 启动 IPU1_0 - 10895的时间(0.92ms)
    (一

    跳转到 MPU CPU0应用

    多核邮箱应用- MPU-Core0主内核

    EVE1引导成功

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A
    在"EVE1启动成功"之前、有"跳转到 MPU CPU0应用"、因此我之前的理解是"SBL_mbx_MPU_CPU0.c"的主要函数是 A15应用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    语句"SBL_mbx_MPU_CPU0.c"的 main 函数是 A15的应用程序、"SBL_mbx_eve1.c"的 main 函数是 EVE 应用程序正确。

    从时间的角度思考这个问题。 x 时、EVE 启动并开始运行 SBL_mbx_eve1.c 的 main

    A15并行引导其他内核。 完成所有操作后、A15跳转到 SBL_mbx_MPU_CPU0.c 的 main

    直到15的主启动点、EVE 不应发送任何 UART 打印。 此外、A15主系统不应初始化 UART。

    此致、

    Rishabh

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

    感谢您的解释。 我现在已经解决了这个问题。
    我的解决方案如下:
    1在 EVE 将 msg 发送到 A15后,让 EVE 再次等待 A15发送的 msg,而不是等待 while (1);
    2在 A15输出"EVE1引导成功"后、让 A15再次向 EVE 发送消息;
    3当 EVE 再次从 A15接收消息时、这意味着 A15是"空闲"的且不占用 UART 资源、则 EVE 可以使用 UARTConfigPuts 函数输出日志。

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

    很高兴听到这个消息。 请继续操作并将答案标记为已验证、并通过创建新主题随时提出任何后续问题。

    此致、
    Rishabh