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.

[参考译文] TMS320F28377D-CPU1:EP 外部闪存引导

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1444812/tms320f28377d-ep-spi-external-flash-memory-boot-for-cpu1-and-cpu2

器件型号:TMS320F28377D-TMS320F28377D-DSP EP
主题中讨论的其他器件: TMS320C28346C2000WARE

工具与软件:

我尝试使用 TMS320F28377D-CPU2来使模块的独立模式、且此模块必须在此项目中使用双核(EP 和 CPU2)。

但是、我无法理解如何制作这个项目。

我 通过使用 具有外部 SPI 闪存启动的 TMS320C28346开发了独立的模块模式。

当我使用 TMS320C28346时、

我从示例中获得了"hex 转换文件"、  

所以、

我可以将 project.out 文件更改为 project.hex 文件。

通过使用这个 project.hex、我可以编写 外部 SPI 闪存引导。

然后、我可以从 SPI 闪存引导中引导加载。

但是、

当我 尝试使用 TMS320F28377D-CPU2来创建模块的独立模式时、此模块必须在此工程中使用双核(EP 和 CPU2)。

我不知道如何  使用 EP 具有双核的 TMS320F28377D-TMS320F28377D-DSP 独立于模块、

因为、我找不到双核外部 SPI 闪存引导加载程序的示例。

如果您有、请提供给我吗?

和、

如果不是,我有一些额外的定位。

1.当我将 TMS320F28377D-CPU 与双核及 外部 EP 闪存引导加载程序一起使用时、是否必须为每个 CPU 制作每个十六进制文件? [cpu1.out --> cpu1.hex、cpu2.out--> cpu2.hex]  

或者是否有其他十六进制转换文件来生成关于 CPU1.out 和 CPU2.out 的一个十六进制文件?

2.如果 我必须为每个 CPU 制作每个十六进制文件[CPU1.out --> cpu1.hex、CPU2.out->CPU2.hex]、那么我是否可以使用 之前在 TMS320C28346项目中针对每个 CPU1.out 和 CPU2.out 文件使用的相同十六进制转换文件。

3.  如果 我必须为每个 CPU [CPU1.out --> cpu1.hex , CPU2.out->CPU2.hex]制作每个十六进制 文件,如果我只为两个十六进制文件使用一个 SPI 闪存,我是否必须将它们(两个十六进制文件)存储 在不同的内存地址?

4.然后、使 CPU1引导加载与 我使用 TMS320C28346时的方法相同、然后、 CPU2可以通过 CPU1 (master)中的命令进行引导加载。  

5.我必须从每个 存储器地址加载每个 CPU1和 CPU2引导加载程序、这些地址是在存储在 Flashe 存储器中期间修复的。

关于上述5个序列、是否正确?

谢谢你

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

    尊敬的 Jaejun:

    我们没有 F2837xD 的双核 SPI 引导加载示例、但您可以在引导 ROM 中参考器件的 SPI 引导加载程序源。  (libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source)。

    F2837xD TRM (请参阅第4.10.4.3节)还提供了有关如何将器件配置为 SPI 引导模式的额外资源。  

    您还可以查看 SCI 引导示例(device_support\f2837xd\examples\dual\F2837xD_sci_flash_kernels) 及相关的用户指南 、以了解有关如何开发双核引导加载程序的参考。  

    至于您的问题:

    1. 是的、您必须为每个 CPU 内核生成 hex 文件。
    2. 您可以使用 CCS 中内置的 C2000十六进制实用程序来生成十六进制文件。 您可以在 Project  Properties > Build > C2000 Hex Utility 中找到该工程。 《汇编语言工具用户指南》 的第12章详细介绍 了 十六进制实用程序选项。
    3. 可以、每个内核"拥有"一个另一个内核无法读取/写入的闪存组。  
    4. 我建议您参考 TRM (第621页)中的引导流程图、了解引导流程在双核上下文中的执行方式。  
    5. 是的、 您必须从每个内核各自的存储器地址加载每个内核的 hex 文件。   

    此致!

    Matt

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

    感谢您的答复。

    但是、  

    当我查看您的参考时、我认为它与我认为的不同。

    我想我的问题是错的、解释了我想要什么。

    所以,我再次问你,我想做什么。

    1、你知道吗? C28346 DSP、该 DSP 没有闪存、因此、用户必须使用外部闪存。  我是 C28346用户之一。

    2.当时我已经使用了 C28346外部 SPI 闪存存储器参考示例。

    3.在我使用 C28346示例时、CPU 可以通过从 SPI 闪存引导来运行我们的固件。 我的固件只设置了启动模式。  我的固件没有使用 SPI 加载 SPI 软件。  我可以通过仅设置 SPI 引导来加载固件。

    4. Simialar 作为 C28346 SPI 闪存引导,我想让 CPU1和 CPU2从外部 SPI 闪存引导。  我认为您的资源 (libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source)与我预期的不同方法。

    5.说实话、我使用的 CPU1 SPI 闪存以及 TMS320F28377D-CPU 的引导方法与 EP 的方法一样、工作得不错。 但是、我想让 CPU2的工作方式与该方法相同。  但是、我不知道如何从外部 SPI 闪存引导 CPU2。  

    谢谢你。

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

    尊敬的 Jaejun:

    根据我的理解、您要尝试创建一个从外部 SPI 闪存加载并同时使用 CPU1/CPU2的 SPI 引导加载程序 专题讨论会 . 您需要使用 CPU2 SPI 引导加载程序、但不知道如何配置为 CPU2引导。

    以下是 F2837xD TRM 中的第7.10章

    本质上、CPU2处于等待引导模式、直到 CPU1完成引导。 然后、CPU1应用程序指示 CPU2引导 ROM 如何使用 CPU2引导 ROM 支持的引导模式 IPC 命令进一步引导。  F2837xD 的 IPC 用户指南 详细介绍了用于实现此目的的 API 函数。

    一些示例:

    • CPU1到 CPU2 IPC 驱动程序位于: \device_support\f2837xd\examples\dual\cpu01_to_cpu02_ipcdrivers
    • CPU2到 CPU1 IPC 驱动程序位于: \device_support\f2837xd\examples\dual\cpu02_to_cpu01_ipcdrivers"

    如果这不符合您的要求、请告诉我。

    此致!

    Matt

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

    感谢你的评分

    我查看了您参考的示例、  

    我获得了 CPU1可以通过使用 CPU1固件中的某个电阻器设置来引导 CPU 2的信息。

    但是、

    我还有一些问题。

    当我选中时、使用 CPU1和 CPU2

    我们可以使用 SPI-A、这意味着我们必须使用一个连接到 SPI-A 的 SPI 闪存

    在这种情况下、

    我不知道如何将每个 CPU 的固件存储在闪存中。

    我们是否需要分别生成 CPU1和 CPU2文件并使 CPU1.hex 和 CPU2.hex 生成每个十六进制文件?

    并存储关于 CPU1.HEX 和 CPU2.HEX 的其他地址?

    如果我们创建 CPU1.hex 和 CPU2.hex、则可以将 CPU1.hex 和 CPU2.hex 存储在闪存中的不同地址。

    然后、在引导加载期间、我们如何设置外部闪存的起始(入口)地址?

    当我们设置 SPI 闪存引导时、我们无法设置外部(SPI)闪存引导存储器、我们只需设置电阻器、引导加载程序会自动使引导 MCU。

    因此、我混淆了上述情况。

    是否必须制作每个 CPU1.out 和 CPU2.out 文件以及 CPU1.hex 和 CPU2.hex 文件。

    和 Dowe 必须将 CPU1.hex 和 CPU2.hex 文件存储在不同的外部(SPI)闪存中?

    此外、在 CPU1引导加载和 CPU2引导加载期间、如何设置外部(SPI)闪存起始地址?

    谢谢你。

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

    尊敬的 Jaejun:

    我们是否必须将每个 cpu1.out 和 cpu2.out 文件以及 cpu1.hex 和 cpu2.hex 文件分开?

    是的、每个 CPU 都需要有自己的.out 和.hex 文件。

    和 Lowe 必须将 CPU1.hex 和 CPU2.hex 文件存储在不同外部(SPI)闪存中?

    是的、您需要这样做。  

    并且、在 CPU1引导加载和 CPU2引导加载期间、如何设置外部(SPI)闪存起始地址?

    根据我对用例的理解、您需要实现 SPI 闪存内核以复制 外部广播 (SPI)闪存 输入 片上 闪存存储器。 SPI 引导加载程序会将外部闪存代码加载到 RAM 中、而不是闪存中。 SPI_Boot 返回的应用起点地址由构建外部闪存代码的项目中的链接器命令文件(.cmd)确定。  

    为了实现所需的行为、必须使用闪存内核。 闪存内核负责擦除之前的控制器代码、接收外部闪存应用程序代码以及使用闪存 API 将外部闪存代码编程到闪存中。 此过程的一般流程如下:

    1. 复位器件并使用 SPI 引导模式
    2. 通过 SPI 将闪存内核从外部闪存传输到控制器
    3. 闪存内核将在 SPI 引导完成后进行控制
      1. 确保与闪存内核对应的.cmd 文件配置为从 RAM 存储和运行
    4. 内核将从控制器上的闪存中擦除旧的应用程序代码
    5. 内核将配置与外部闪存的 SPI 连接并接收新的应用程序代码
    6. 内核会将新接收到的应用程序代码写入闪存并将控制权转移给它
    7. 从外部闪存新接收到的代码将被执行
    [报价 userid="621965" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1444812/tms320f28377d-ep-spi-external-flash-memory-boot-for-cpu1-and-cpu2/5544081 #5544081"]您还可以查看 SCI 引导示例(device_support\f2837xd\examples\dual\F2837xD_sci_flash_kernels) 及相关的用户指南 、以获取有关如何开发双核引导加载程序的参考。  [报价]

    本应用手册讨论了的实现  SCI  闪存内核 、但其主要思路对于了解/实现双核器件的 SPI 闪存内核很有用。  

    此致!

    Matt

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

    感谢您的参加。

    从您的回答中、

    根据我的理解、

    我们必须推迟执行。

    -->实现 SPI 闪存内核以复制  外部广播  (SPI)闪存  输入  片上  闪存存储器。

    我们是否必须将固件从外部(SPI)闪存传输到片上闪存?

    和、

    如果我们在固件中创建 SPI 闪存内核 SW、那么我们可以设置关于每个 CPU1.hex 和 CPU2.hex 的条目(start)地址吗?

    说实话、

    我混淆了一件事、

    因为对于不具有内部闪存的 C28346、它只能使用外部闪存、

    当我使用 C28346时、我们能够将我们的固件从 外部(SPI)闪存定向加载到 RAM、不会加载内部闪存、如上面所示。

    和、

     当我们仅使用 CPU1时、我们在 F28377上成功尝试从外部(SPI)闪存向 RAM 定向加载固件引导(SPI 引导加载)。  

    也就是说、我们可以从外部(SPI)闪存 直接向 F28377 RAM 引导加载程序、而无需加载 F28377内部闪存。

    在本例中、我们仅  在 CPU2处将 SPI 引导加载程序从外部(SPI)闪存添加到 F28377 RAM。

    如果我们要在 CPU2上执行 SPI 引导加载、是否必须 实现 SPI 闪存内核来复制  外部广播  (SPI)闪存  输入  片上  闪存存储器?

    它是否不可在 CPU2处加载 SPI 引导且未  加载 F28377内部闪存? 我想   在 CPU2处直接将 SPI 引导加载程序从外部(SPI)闪存加载到 F28377 RAM。  因为对于 CPU1 SPI 引导加载、我们已经有了一些 SW。

     

    我们不知道 CPU2上的 SPI 引导加载。  

    谢谢你。

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

    尊敬的 Jaejun:

    我知道现在、您仍然希望从 RAM 执行程序、而不是从 F28377片上闪存执行程序。 这是可行的、我之前的 答复仍然有效。

    SPI_Boot 返回的入口地址由构建外部闪存代码的项目中的链接器命令文件(.cmd)确定。  [报价]

    与 CPU1一样、由 CPU2应用程序的链接器命令文件(.cmd)设置的地址将指定其在存储器中的位置。 您将需要两个链接器命令文件-一个用于 CPU1的.out/.hex、以及用于 CPU2的.out/.hex -来指定它们将在 RAM 中执行的位置。  

    GSRAM 可在 CPU 之间拆分。 请参阅以下 C2000Ware 中的共享 RAM 链接器命令文件示例、您可以根据具体应用进行调整。  

    • device_support\f2837xd\common\cmd\2837xD_RAM_lnk_shared_cpu1.cmd
    • device_support\f2837xd\common\cmd\2837xD_RAM_lnk_shared_cpu2.cmd

    此致!

    Matt

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

    感谢您的答复。

    我 想检查我的理解是否正确。

    我们必须使每个 CPU1.out 和 CPU2.out 以及 CPU1.hex 和 CPU2.hex。

    输入、然后。

    我们必须将 CPU1.hex 文件存储在 AxxxxA (address)的外部(SPI)闪存中

    我们必须将 CPU2.hex 文件存储 在 BxxxxB (address)的外部(SPI)闪存中、  

    CPU1.HEX 和 CPU2.HEX 必须存储在 外部(SPI)闪存中不同的地址。

     

    然后、

    CPU1会在 外部(SPI)闪存 和引导加载中搜索 CPU1.hex 文件、如果我们正确设置了电阻器、可以自动运行 CPU1 SPI 引导加载程序。

    CPU2会在 外部(SPI)闪存 和引导加载中搜索 CPU1.hex 文件、如果我们正确设置电阻器、CPU2 SPI 引导加载程序可以自动运行。

    如果以上概念有错误、请告诉我。

    假设上述概念正确、

    我有一些问题。

    我们必须 将 CPU1.hex 文件存储在外部(SPI)闪存中、并 将 CPU2.hex 文件存储 在外部(SPI)闪存中、

    要将这些 CPU1.HEX 和 CPU2.HEX 存储在外部(SPI)闪存中、

     我们可以使用以下示例和函数吗?

    在示例"boot_v500"工程 DSP2834x_M25P40.lib 或 F2837xd_M25P40.c 中、

    我可以查看函数'ProgramExFlash (UINT32 Address、UINT16 Data)'、

    通过使用函数、我可以将 CPU1.hex 文件存储在外部(SPI)闪存的   特定存储器地址处、并将 CPU2.hex 文件存储在外部(SPI)闪存的特定存储器地址处、该地址与 CPU1.hex 文件地址不同。

    谢谢你。

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

    尊敬的 Jaejun:

     您正在使用什么外部存储器(型号)以及 您以前如何在  C28346上实现这些存储器?

    很抱歉、  由于节日原因、我需要更多的时间从 Flash 专家那里获得意见。

    此致!

    Matt

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

    感谢您的答复

    请告诉我您的电子邮件地址、

    我无法在社区中上传我们的硬件器件型号。

    谢谢你

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

    尊敬的 Jaejun:

    我向您发送了一个友谊申请、在您接受后、我可以通过 E2E 直接消息将我的电子邮件发送给您。  

    此致!
    Matt