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.

[参考译文] TDA4AEN-Q1:Lauterbach CMM 脚本无法加载 MCU 域 FreeRTOS 应用。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1525290/tda4aen-q1-lauterbach-cmm-script-not-working-to-load-mcu-domain-freertos-application

器件型号:TDA4AEN-Q1
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

您好团队:

调试器零件号:-  LA-3506 带 LA-3743A JTAG-ARM 的 PowerDebug X50

Trace32 版本:- TRACE32 for ARM ->版本:R.2024.09.000175016

RTOS-SDK 版本:-  ti-processor-sdk-rtos-j722s-evm-10_00_00_05

我们正在尝试将 hello-world FreeRTOS 程序加载到 MCU-r5fss0-0 内核 TDA4AEN 电路板。 附加了所使用的.cmm 脚本。

 Trace32 显示目标正在运行、但我们无法在 ttyUSB1(MCU 域)串行终端上看到任何打印内容。 附加的 ttyUSB0(唤醒域)日志以供参考。

我已经在 Blackhawk 上测试了相同的程序,它工作正常。 但我们需要为工程使用 Lauterbach。

因此、您能否帮助我们使用 Lauterbach 进行调试、并与我们分享可正常工作的 CMM 脚本。

e2e.ti.com/.../TDA4AEN_5F00_CR5.cmm.txt

此致、

Tarun C

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

    您好:

    无法直接加载此~裸机.out 文件的基本原因是 MCU 在附加之前运行了一些 ROM 代码、从而使 MPU 和 ICache 处于启用状态。  在发生可靠的新对象加载+运行之前、需要进行复位或内核清理。  有几种方法可以强制复位、但在这种情况下、最简单的解决方案可能就是添加一些清理、从而使 ICache 和 MPU 崩溃。  我做了一个简短的视频,显示了一个~的半随机版本的一个 Hello world 我抓狂了,并添加了下面的脚本片段。

    e2e.ti.com/.../2025_2D00_06_2D00_10_5F00_13h54_5F00_25.mp4

    SYStem.Attach
    Break
    GOSUB CLEAN_CORE
    GOSUB TI_SEMIHOST
    data.load.auto "d:/syms/j7aen/hello_world.release.out"
    data.list
    break.set main
    Go
    WAIT !RUN()
    Register.Set PC hello_world_main+0xa
    Go
    
    enddo
    ;
    CLEAN_CORE:
    (
      Register.reset
      cache.INVALIDATE.dc
      cache.INVALIDATE.ic
      PER.Set.simple C15:0x1 %Long 0x01E50878  ; shut off I/D/M let the application turn it on
      ; R5 to SVC mode with IRQs + async abort masked
      Register.Set M 0x13  ; SVC
      Register.Set I 1
      Register.Set F 1
      Register.Set A 1
      Register.Set T 0
      RETURN
    )
    
    TI_SEMIHOST:
    (
      TERM.RESET
      TERM.size #2 80. 50. 200.
      TERM.METHOD #2 CCIO C$$IO$$ __CIOBUF_
      WinPOS ,,,,,, semihost, Normal "SemiHost Console"
      TERM.GATE #2
      Break.Set C$$IO$$
      RETURN
    )
    
    ARM_SEMIHOST:
    (
      TERM.RESET
      TERM.HEAPINFO 0x00000 0x10000 (0x70680000+0x4000) 0x70680000  ; IAR/GCC - GCC-newlib broken heap needs 0
      TERM.METHOD armswi
      TERM.Mode STRING
      TERM.GATE
      RETURN
    )

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

    尊敬的 Richard:

    感谢 CMM 脚本。 现在、我能够在 Trace32 控制台中获得 print 语句。

    但是我有三个问题

    1.我得到的这些打印语句位于 Trace32 控制台中,而不是 UART 上。 我打开了/dev/ttyUSB1(因为它是 MCU 内核)、但在串行终端中没有看到任何内容。 如何在 UART 中获取这些照片?

    2.做什么  Register.set PC hello_world_main+0xA  在 CMM 脚本中有什么作用? 如果我正在运行任何其他代码、我应该更改什么。

    3.如何包含用于调试的源符号?

    此致、

    Tarun C

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

    你好、Tarun、

    –0- 一般答案如下所示:

    要使用 TI 提供的驱动程序运行 SDK 示例、您需要将 sbl_null 刻录到闪存中。  此映像将加载并载入为驱动程序提供所需服务的固件。

    如果您执行此步骤(烧录 SBL NULL 并设置 DIP 开关)、UART 将正常工作。

    上述步骤使用 uniflash 程序来下载映像并将映像刻录到 EVM 目标中。  也可以使用 Lauterbach 闪存器将映像烧录到电路板中、但当您使用 SDK 进行开发时、最好只需首次遵循这些步骤。  如果 uniflash 有用、稍后您可以忽略它。

    现在具体问题:

    –1-  

    UART 需要运行 TI 驱动程序、这需要 sciserver 服务、具体取决于运行 cortex-m/tifs 内核的固件。  提供第一个在电源时运行的软件后、在 JTAG 应用尝试加载之前、它会起作用。  

    –2-

    register.set PC MAIN+0xA 跳过使用 sciserver 的驱动程序初始化调用、并在打印 hello world 时开始执行。  这点是让你到~同样的点,你与黑鹰(可能只是更远的一点实际上),因为这可能得到了主要,但失败,因为你没有刻录固件。   与刷写一样、可以通过一些方法将更多内容转移到 JTAG、但 SDK 不支持这些功能、尤其是对于在启动时、其计数器很有成效、需要在开始之前开始自定义。

    –3-  

    获取源代码最简单的方法是转至列表窗口、然后右键单击装配体列表中的散列区域。  出现的菜单有一个“解源“选项,允许您导航到源,它将修复所有内容。   您也可以在脚本或命令中使用 symbol.spath. srd、使其搜索源代码的目录结构。  实际上、建立路径的方法有很多种、如果您查看 TRACE32 文档中的“SmboL",“,则、则会有许多示例。   对于这些特定于工具的问题、最好咨询 Lauterbach 支持、因为他们可以为其工具提供最佳建议。  

    此致、

    理查德·W·