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.

[参考译文] TMS320F28379D:无法在独立模式下引导 CPU2

Guru**** 2540460 points
Other Parts Discussed in Thread: C2000WARE, TMS320F28379D, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1388758/tms320f28379d-cannot-boot-cpu2-in-standalone-mode

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE、、 SysConfig

工具与软件:

您好!  

我一直在梳理许多讨论帖子、最终没有找到可以解决我的问题的帖子。 我正在尝试从闪存引导 CPU1和 CPU2。 我在使用单核工程引导 CPU1时不会遇到问题。 但是、引导两个程序都会给我带来问题。 根据我所读的内容、我只需 Device_Boot 在 DeviceInit 之后调用 CPU1中的函数"CPU2 (C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH)"、然后断开调试器、即可进行复位。 我的程序如下:

1.将程序加载到 CPU1闪存中。

2.将程序加载到 CPU2闪存中。  

3.通过关闭 launchpad 上相应的开关来断开调试器的连接。 将 BOOT0和 BOOT1引脚保持在高电平。

4.重置设备。

然后、我看到基本上没有任何东西--该程序应该交替闪烁灯、但这不会发生。 由于调试器已断开连接、我不确定发生了什么、但从我阅读的所有内容来看、这是我需要遵循的唯一步骤。 它是一个双核工程、在两个程序中均调用 IPC_SYNC、因此如果任一程序未能引导、另一个程序将暂停。 我怀疑 CPU1在此处停止并且 CPU2未引导。

我将使用以下路径中的示例工程: C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f2837xd\examples\dual\led。 我唯一做的修改是在 CPU1代码的 main 中, Device_Boot 在 DeviceInit ()后添加了一个对"45U2 (C1C2_Brom_bootmode_boot_from_flash)"的调用;

非常感谢您的帮助。

此致!

Madelyn

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

    我正在将 launchpad XL 用于 tms320f28379d。

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

    尊敬的 Madelyn:

    您是使用带有 SysConfig 还是不使用 SysConfig 的工程?  

    如果您使用 SysConfig、我认为此主题 会有所帮助(我知道它很长、但包含一些很好的信息): https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1292040/launchxl-f28379d-dual-core-application

    您需要在 SysConfig 中对"Linker Command Tool"进行一些编辑、才能将程序实际加载到闪存。  

    如果您在没有 SysConfig 的情况下使用该工程、则需要做的是将编译配置分别更改为 CPU1_FLASH_standalone 和 CPU2_FLASH。 如果将这些.out 文件分别加载到 CPU1和 CPU2、则应该无需进行任何其他更改即可正常使用。

    如果您有任何后续问题、请告诉我!  

    此致、

    Ben Collier

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

    尊敬的 Ben:

    不过、我使用的是 SysConfig、我只是想让这个简单的工程进行引导、这样我就可以对自定义工程执行相同的操作、即使用 SysConfig、但不使用"CMD"功能。 我看了看那篇文章,似乎确实建议了我所做的——把两个引导引脚拉起来,然后调用 Device_bootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH );紧跟在 Device_init ()之后。

    我看到的唯一构建配置选项是 CPU1和 CPU2工程的"FLASH"和"RAM"。 我为这两者选择了"flash"。 此外、我在 SysConfig 的"CMD"选项卡中选择了"Setup FLASH DEFAULT"。

    最新动态:  

    我在 CPU1调用 Device_bootCPU2之前添加了一个用于关闭(上拉) LED 的调用、现在当我复位时、该 LED 会关闭。 我进行了检查、当开关的配置错误时、LED 仍然亮起、这意味着我知道代码正在进入 CPU1中的此行、并且可能会在尝试引导 CPU2时停止。

    感谢你的帮助。

    Madelyn

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

    Madelyn,

    [报价 userid="615030" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1388758/tms320f28379d-cannot-boot-cpu2-in-standalone-mode/5310307 #5310307"]我正在使用 SysConfig、但我只是尝试让这个简单的项目进行引导、以便我可以对自定义项目执行相同操作、即使用 SysConfig、但不使用"CMD"功能。

    led_ex2_sysconfig_multi 示例默认使用"CMD"功能。 您是否删除了此功能并将您自己的链接器文件添加到这些项目中? 这样可行、我只是想了解 您的项目设置。

    我看到的唯一构建配置选项是 CPU1和 CPU2项目对应的"flash"和"RAM"。

    我提到的其他构建配置仅在 ex1中提供(无 SysConfig 示例)。

    [报价 userid="615030" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1388758/tms320f28379d-cannot-boot-cpu2-in-standalone-mode/5310307 #5310307"]此外、我在 SysConfig 的"CMD"选项卡中选择了"Setup flash default"。

    太棒了! 这就是您通过 ex2 (SysConfig)示例实际选择闪存或 RAM 的方式。  

    这是我放置  Device_bootCPU2 (C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH)的位置;此函数的放置位置也很重要。

    添加此行并验证 CMD 工具已为 CPU1和 CPU2使用默认闪存设置后、示例可以正常运行。  

    此致、

    Ben Collier

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

    示例工程使用的是 CMD 功能。 但最终我想使用我的 使用 CMD 的自定义工程进行引导。 不管怎样、我在 CPU1代码中的 Board_init 之后立即调用"Device_bootCPU2"函数、我已经为两个 CPU 点击了"设置闪存默认值"、但它仍然无法引导。  

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

    跟进:将工程加载到 CPU1中、然后将单独的工程加载到 CPU2中的建议过程是什么? 我找到实现此目的的唯一方法(可能这是我的问题)是调试配置、选择"program"选项卡、以及为每个内核分配一个输出文件。 然后、在我调试过一次之后、当我尝试加载程序时、它会将单独的程序加载到单独的内核上。 我在调试前未成功使用 run->load、因为我收到错误消息"Multiple debuggable cores"(检测到多个可调试内核)

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

    尊敬的 Madelyn:

    将项目加载到 CPU1、然后将单独的项目加载到 CPU2的建议过程是什么? [报价]

    这些说明可在 C2000 Academy IPC 实验室中找到: https://dev.ti.com/tirex/explore/node?node=A__Ac3wGeaxI.l7j3JlrsVfcQ__C2000-ACADEMY__3H1LnqB__LATEST

    但最终我想使用 使用 CMD 的自定义项目进行引导。

    好的。 如果您不使用 CMD 工具、那么您只需编辑您的连接器命令文件、或者只需将其中一个默认的连接器命令文件粘贴到您的项目中、以确定您的代码是否会被加载到闪存或 RAM 中。

    作为初始调试步骤、您是否会尝试 led_ex1_blinky 示例(无 SysConfig)? 要使此示例从闪存运行、您所需要做的 就是如上所述更改构建配置。  

    谢谢!

    Ben Collier

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

    好的。 我尝试了 led_ex1_blinky 示例与你提供的指令,它正在引导。 现在、我要启动自定义项目。 我需要在链接器命令文件中放入什么内容? 我不想使用默认值、因为我必须更改一些内存分配才能使用 CLA。

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

    Madelyn,

    链接器命令文件将告诉链接器在何处放置程序的所有部分、因此您需要决定要更改的内容。  

    请查看此页面以了解有关该链接器的更多信息: https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/linker_description/index.html

    此页面适用于 ARM 编译器、但有关链接器的所有信息也适用于 C28x 编译器。

    此致、

    Ben Collier

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

    我比较熟悉链接器在编译期间所起的作用。 我有一个可以工作的链接器文件--我的双核程序在调试模式下运行良好。 我只是尝试让它在复位后继续运行。 我在 led_ex1_blinky 所在的位置添加了"Device_initCPU2"调用。 这显然是不够的。 我还需要做出哪些改变?

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

    CPU2链接器命令文件看起来是什么样子的?  

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

    我没有意识到、但我 仅对 CPU2使用 CMD。 也许我应该尝试禁用 CMD 并为 CPU2使用默认链接器吗?

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

    我点击了 CPU2的"Setup FLASH DEFAULT"、现在可以运行了! 非常感谢您的帮助。

    此致!
    Madelyn

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

    很高兴你解决了这个问题!