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:通过 CAN 对 TMS320F28379D 微控制器进行编程

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/970987/tms320f28379d-programming-tms320f28379d-microcontroller-through-can

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

您好!

我想同时拥有 从闪存运行 TMS320F28379D 微控制 器和通过 CAN 对微控制器进行编程的功能。  我对此有几个问题:

是否 可以在无需开发自定义引导加载程序的情况下实现此目的?

2. 对于从闪存运行和通过 CAN 进行编程的情况、我应该将 GPIO72和 GPIO84设置为高电平吗?  (我将以数据表第197页的表9-14器件引导模式为基础、在该模式下、我假设我们希望在两种操作中都处于"获取模式"、对吧?)

3. 根据技术参考手册的表4-8,我看到默认情况下,闪存启动在“GET 模式”下发生,当 BOOTCTRL 寄存器的 BMODE 位域设置为0x07时,“CAN 启动0”发生。  由于 BMODE 是软件控制的、而不是硬件控制的、我如何告知 MCU 是从闪存引导还是从 CAN 引导?  (我通常会从闪存引导、但几乎肯定会有时间需要通过 CAN 对 MCU 进行重新编程。)

4. 如果我设置 BMODE = 0x07、在没有收到 CAN 信号的情况下、MCU 会从闪存启动时、是否会发生任何超时?

谢谢、

Kevin

 

谢谢、

Kevin

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

    Kevin

    不需要、您需要在闪存中放置自定义引导加载程序。 ROM 引导加载程序的代码位于 C2000Ware 中、供您参考。

    2.是的、两个引脚都处于高电平将使您进入闪存引导模式。

    这些启动值将进入 OTP、因此只能设置一次。 您可以在闪存引导时将其保留为未编程状态、但一旦您将其编程为 CAN 引导、GetMode 将始终运行 CAN 引导加载程序。  

    4. CAN 引导加载程序中没有超时。 如果您的 CAN 主机发送了不正确的密钥、则它将引导至闪存。 但是、如果您不发送任何内容、它将永远不会超时并卡在 CAN 引导加载程序中。

    此致

    Chris

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

    Chris、

    感谢您的回复。  我以前从未执行过自定义引导加载程序。  使用自定义引导加载程序、是否可以使用其中一个 GPIO 告知 MCU 是从闪存引导还是从 CAN 引导?

    谢谢、

    Kevin

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

    Kevin、

    是的、这是可能的。 基本上、它就是这样的:您始终需要引导至闪存。 在您的应用代码中、您可以等待来自 CAN 总线的特定数据模式。 接收到该数据表明闪存编程是有保证的。 然后、您可以分支到 ROM 本身中的 CAN 引导加载程序。 或者、您也可以根据 GPIO 引脚的状态做出决定、在应用中可能无法始终访问 GPIO 引脚。  

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

    Hareesh、

    感谢您的回复。  对于我们的应用、我们有时不会将任何器件连接到 CAN 总线。  在这种情况下、我们希望能够运行存储在闪存中的程序。  

    因此、我假设您提到的第一种方法("您可以等待来自 CAN 总线的特定数据模式。 无法接收此数据信号、表明闪存编程是有必要的") 。

    如果在一段时间后没有从 CAN 总线接收到数据、是否有办法从闪存引导?

    还是唯一决定是从闪存引导还是使用 GPIO (例如通过切换开关控制) CAN 的方法?

    谢谢、

    Kevin

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

    [引用]因此、我假设您提到的第一种方法("您可以等待来自 CAN 总线的特定数据模式。 无法接收此数据信号、表明闪存编程是有必要的")。 [/报价]  

    应用程序等待该数据模式2秒。 如果未收到该模式、则继续执行常规应用程序。 如果这种等待不切实际、那么 GPIO 方法是可行的。  

    [报价]如果在一段时间后没有从 CAN 总线接收到数据、是否有从闪存引导的方法?

    如上所述、这需要在您的应用中进行处理。 引导 ROM 中的 CAN 引导加载程序不支持此选项。

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

    Hareesh、

    您能否澄清一下"您可以分支到 ROM 本身中的 CAN 引导加载程序"的含义?  您可以在应用程序代码中执行此操作、而不是需要自定义引导加载程序吗?

    是否可以在不需要自定义引导加载程序的情况下始终从闪存引导(通过在硬件中将 GPIO72和 GPIO84设置为高电平)、然后再引导

    如果 有来自 GPIO 的特定数据模式、则从我的应用代码分支到 CAN 引导加载程序、并通过 CAN 对 MCU 进行重新编程

    2. 如果没有来自 GPIO 的特定数据模式、则运行存储在闪存中的现有程序   

    谢谢、

    Kevin

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

    [引述]您能否澄清"您可以分支到 ROM 本身中的 CAN 引导加载程序"这一说法?  您可以在应用程序代码中执行此操作、而不是需要自定义引导加载程序吗? [/报价]

    是的、如果闪存编程有保证、您可以从应用程序分支到引导 ROM 中的 CAN 引导加载程序。 我自己没有尝试过,但我看不到为什么不能这样做的原因。

    [引用]是否可以在不需要自定义引导加载程序的情况下始终从闪存引导(通过在硬件中将 GPIO72和 GPIO84设置为高电平)、然后[/引用]

    是的。

    [引述] 1.  如果 GPIO 存在特定的数据模式、则从我的应用代码分支到 CAN 引导加载程序、并通过 CAN重新对 MCU 进行编程

    是的。

    [引述] 2.  如果没有来自 GPIO 的特定数据模式、则运行存储在闪存 中的现有程序

    是的。 您是否真正想说来自 GPIO 的数据模式? 我认为您只需读取单个 GPIO 引脚的电平即可确定是要运行应用程序还是分支到 ROM 中的 CAN 引导加载程序、以便开始通过 CAN 端口拉取数据。

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

    Hareesh、

    感谢您的回复。  C2000Ware 中是否有任何示例展示了如何从我的应用程序代码中分支到 CAN-bootloader?

    谢谢、

    Kevin

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

    不存在此类示例。 您应该能够在 C:\ti\c2000Ware_3_03_00_00\libraries\boot_rom\f2837xd\revB\rom_sources\CCS_files\cpu01\Release 中加载符号、以确定跳转至何处。

    请注意、器件状态(PLL 乘法器/除法器等)可能与您通过引导 ROM 调用 CAN 引导加载程序时的状态不完全相同。