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.

[参考译文] F28M35H52C:Concerto 远程固件更新选项

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/649154/f28m35h52c-concerto-remote-firmware-update-options

器件型号:F28M35H52C

您好!

我们想开始一个新的论坛主题、探讨如何远程更新 Cortex M3和 C28内核上的固件以用于协处理器系列。  

目前在 cortex m3上、我们开发了一个简单的第二级引导加载程序、该引导加载程序在 cortex m3中的引导 ROM 结束执行后执行。 到目前为止、该引导加载程序只是简单地跳转到存储在 M3闪存中不同存储器部分的应用程序。 因此、作为未来的实施方案、我们将在跳转到此应用程序代码之前、通过此引导加载程序中的串行方式检查应用程序固件升级。  
 
但现在的挑战是探索如何远程升级 C28应用程序代码。 这就是我们需要 TI 帮助的地方。 我指出了一些我们认为可能的选择。 但是、您能否确认其中是否有任何一项工作正常、或者如果没有、请指导我们完成 RITE 方向。  
 
首先、我们需要清楚了解 如何在整个 Concerto 微控制器上完成存储器映射{M3和 C28如何共享存储器}、如果有人能指出这一磁珠、那将会很棒
  相关章节。  
 
选项1:
 
在 M3引导加载程序内通过 IPC 机制更新 C28应用程序闪存部分。
 
选项2:
 
 M3和 C28具有单独的串行 I/O 引脚、可以单独触发这些引脚以进行固件更新。   
 
最终选项:
 
在这里、我们考虑更新其在 Concerto 评估板上的当前工作方式。 其中我们将有一个 FTDI 芯片、该芯片将使用 USB 分别更新 M3和 C28。 我想这需要 TI 共享一些闪存算法。
 
如果我们下周需要打电话、请告诉我。  
 
谢谢   
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Preetham、

    对于第一个问题:

    在 Concerto 上、每个子系统(M3和 C28x)都有自己的存储器。 您可以参阅具有详细存储器映射的器件数据表。 除了专用存储器外、还有一个共享 RAM、该 RAM 在复位时由主器件(M3)拥有、或者默认情况下由主器件配置为 C28x 子系统。 还有消息 RAM 块、可用于将信息从主器件传递到控制(C28x)子系统、反之亦然。 除了共享 RAM 和消息 RAM 外,还有 IPC (进程间通信),它基本上是一组用户软件寄存器,用于在内核之间实现命令<->响应系统或消息传递系统。

    数据表是开始查看的第一个文档,了解方框图和内存映射,然后您可以转到设备 TRM 的系统控制和引导 ROM 章节,了解设备如何启动。

    对于 FW 升级设计、有其他用户在 Concerto (F28M35x 和 F28M36x)上实现了这一点、还有第三方供应商(BPMicro)为 Concerto 提供生产编程解决方案。  

    下面概述了如何在 Concerto 上设计 FW 升级系统。

    您可以开始使用控制套件示例(闪存 API、闪烁),但我们还没有下面的示例。

    您需要 M-Kernel (在 M3上运行)和 C-Kernel (在 C28x 上运行)、这些内核使用器件引导 ROM 支持的引导选项之一下载到相应的内核 (请参阅器件 TRM 以了解 M3上的引导模式和 C28x 上的 IPC 引导命令)、 此外、这些内核还需要 F021闪存 API 用于相应的内核。 加载这些内核后、它们将接管引导外设并下载应用程序并刷写下载的应用程序。

     因此、内核有两个部分:从引导外设读取应用(解析传入的数据)以及闪存 API 来刷写下载的应用。

    1.>  上电时、您将使用引导模式 GPIO 选择引导模式、这将使 M-Boot ROM 进入并行 GPIO 引导模式或 UART 引导等

    2.>  现在、您将发送 M 内核、该内核具有用于从引导外设读取数据的闪存 API 和函数。

    3.>  将 M-Kernel 下载到 M3 RAM 后、引导 ROM 将启动此内核。

    4.>  现在、M 内核应该有两种模式。

    1. 模式1:在 M3闪存中下载并更新 M3应用程序。
    2. 模式2:通过向 C-Boot ROM 发送支持的 IPC 命令、在 C-Boot ROM 上启动引导加载程序。

    5.>  一旦 M-Kernel KICK 启动 C-Boot ROM 上的引导加载程序(并行或 SCI 等)、C-Boot ROM 就可以通过所选的引导外设引脚接收 C-Kernel 了。

    6.>  现在主机将 C 内核发送到 C 引导 ROM。 此 C 内核具有从 C28上的引导外设读取应用所需的闪存 API 和函数。

    7.>  启动 C 内核后、它将开始下载应用并刷写应用、在 C 内核执行此操作时、M 内核处于空闲状态。 另一方面、当 M-Kernel 正在下载应用程序时、C28x 仍在运行其引导 ROM 并处于低功耗空闲模式。

    如果使用并行引导:-

    M-Boot ROM 和 C-Boot ROM 并行 IO 模式都支持相同的 IO 引脚、数据协议格式与早期 C28x 器件的格式类似。 有关更多详细信息、请参阅有关器件 TRM 的引导 ROM 一章。 就像 C28x 的 hex2000一样、有一个 ARMHEX、它将 COFF 转换为十六进制、用于 M3侧。

    应链接内核、使其从 RAM 运行、下载的应用程序应将入口点链接到闪存入口点、以便在使用引导模式引脚选择引导至闪存时启动应用程序。

    对于使用 UART:-

    如果您想支持 SCI/UART、并使用 UART 引导功能(如果您不想连接两个物理 DB9连接器)、则可以遵循类似的内核设计、然后使用 SERPLOOP 功能将 M3上的 UART4回送至 C28x 上的 SCIA、并从该 SCIA 引导。 在本例中、M 内核将充当 UART4和 UART0之间传递数据的桥接器。

    如果您不想使用或不能使用任何提供的 C-Boot ROM 外设引导模式、则必须设计一个 C 内核、该内核可以使用共享 RAM 和 IPC 加载到 C28 RAM、并使用从共享 RAM 运行的 C 内核(分配给 C28) 可以使用消息 RAM 和 IPC 读取 C 应用并在 C28x 闪存中刷写。

    在最后一个问题上、您曾:

    使用 FTDI 和 USB 端口、您将无法将其包含在应用程序中以进行应用程序内固件升级。 此选项应适合生产编程、具体取决于您设计行的方式、但对于 FW 升级、这不是一个好选项。  

    [编辑:-如上所述、如果您还在寻找生产编程解决方案、请参阅 BP Micro]

    请参阅器件 TRM 引导 ROM 一章、您将必须了解引导流程、支持的引导模式、C28x 子系统如何引导及其支持的内容、然后选择要用于引导和固件升级的硬件外设、并继续进行固件升级内核设计。

    希望这对您有所帮助。 如有任何疑问、请告知我们。

    此致
    Santosh Athuru  

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

    您好、Santosh、

    感谢您的第一手全面答复。  

    我将研究您的建议、并在我更清楚地了解之后再与您联系。  

    1.同时,您能否澄清 M3和 C28内核的含义? 您是否暗示拥有我们单独的 M3和 C28引导加载程序应用程序?

    2.此外,当您说我们需要使用 M3引导 ROM 串行下载将 M3内核下载到 RAM 时,您的意思是这只是一个选项,还是这是您建议的选项之一?  

    因为我想在单独的 M3闪存扇区和 C28闪存扇区中刷写引导加载程序、然后让引导 ROM 引导至这个基于闪存的引导加载程序、然后检查固件升级!! 我相信这是可能的,但如果可行,您能建议吗?  

    谢谢  

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

    Preetham、

    [引用 user="Preetham Kashyap"]1. 同时,您能否澄清 M3和 C28内核的含义? 您是否暗示拥有我们单独的 M3和 C28引导加载程序应用程序?

    是的、您需要有自己的内核(或术语中的引导加载程序应用程序)来解析需要刷写的传入应用程序。 包含引导外设读取、传入数据解析、应用闪存、同步发送应用程序的器件和主机之间的通信的 SW 组件是我所指的一些基本组件。

    [引用 user="Preetham Kashyap"]2. 此外,当您说我们需要使用 M3引导 ROM 串行下载将 M3内核下载到 RAM 时,您是说这是唯一的选择还是您建议的选项之一?  [/报价]

    在上面,是的,我举了一个可能的例子。 根据您选择的引导选项、您将使用该外设引导将内核/引导加载程序下载到 RAM。 有关可用的引导模式、请参阅 TRM 引导 ROM 部分。

    [引用 user="Preetham Kashyap">因为我想在单独的 M3闪存扇区和 C28闪存扇区中刷写引导加载程序应用程序,然后让引导 ROM 引导至此基于闪存的引导加载程序,然后检查固件升级!! 我相信这是可能的,但如果可行,您能建议吗?  [/报价]

    是的、这是绝对可能的。 您可以将内核/引导加载程序置于闪存扇区、并让每次内核引导至闪存、引导加载程序将应用程序下载至相应的闪存。 我刚才给出了一个示例、如果您没有闪存中的内核/引导加载程序、那么您可以使用现有的 ROM 加载程序下载它们。

    希望这对您有所帮助、如果您有其他问题、请告知我们。

    此致

    Santosh Athuru

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主持人备注:在此将单独的问题拆分为自己的主题:
    e2e.ti.com/.../653644
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santosh、

    需要澄清一些事情。  

    我有一个简单的 M3和 C28引导加载程序 、我分别在 M3和 C28的闪存部分进行了编程、而不是从 RAM 运行。

    为此、我使用了 CCS 在工程属性对话框中提供的调试选项、允许用户针对所选闪存扇区进行编程。   

    因此、对于 M3引导加载程序、我使用了闪存扇区 N 和 M。对于 M3应用程序(闪烁)、我使用了从0x00208000开始的 N 和 M 之外的剩余部分。 通过此设置、我现在能够单独刷写 M3引导加载程序和 M3应用程序、我也可以让引导加载程序和应用程序在独立模式下工作。 这意味着我可以在 M3闪存的两个不同部分保留两个不同的程序。  

    但现在面临的挑战与 C28内核有关、在该内核中、我尝试执行与上述相同的操作、并且在将 C28应用程序保留在闪存中时遇到了问题。 我已将 C28闪存扇区 A 和 B 用于引导加载程序、并将其余 扇区用于 C28应用程序(闪烁)程序。  

    实际上、我正在尝试从 M3引导加载程序向 C28引导加载程序发送 IPC 命令、以使 C28脱离空闲状态并进入 C28应用程序、从而允许 M3引导加载程序跳转到 M3应用程序。  

    挑战在于刷写 C28的两个不同闪存扇区、以便我可以在某些特定扇区中使用引导加载程序、在其他特定扇区中使用 C28应用程序?  

    您能给我一些关于如何实现上述目标的提示吗?  

    谢谢

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

    不能将应用保留在 C28x 闪存中意味着什么? 您能否提供更多详细信息?

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

    尊敬的 Vamshi:

    下面的屏幕快照应该会向您建议我要做的事情:

    首先、我要尝试从0x13A000闪存扇区 C 开始首先刷写 C28 Blinky 应用程序  

    其次、我将尝试刷写分配了闪存扇区 A 和 B (0x13E000 - 0x13DFFF)的 C28引导加载程序应用程序。

     因此、在我的第二步中、我遇到了一些问题。 我希望只擦除和编程闪存扇区 A 和 B、而是擦除所有其他闪存扇区、也就是擦除我之前编程的应用程序。  如何避免这种情况发生?

    谢谢  

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

    您能否尝试以下步骤并查看其是否适合您?

    (1)不要使用项目属性来配置闪存设置。 相反、请使用下面提到的路径来查找闪存设置 GUI。
    (2)首先使用片上闪存 GUI 擦除所有扇区(CCS 调试窗口->工具->片上闪存)
    (3)然后、在 GUI 中使用"Program Only"选项、而不是"Erase and Program"选项。
    (4)加载您的应用
    (5)加载引导加载程序

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

    您好、Vamsi、

    感谢你们的努力...我不得不做与你们所说的相反的事情。 基本上、我选择了我想要使用您提到的 GUI 对该特定应用进行编程的闪存扇区、并执行了擦除和编程、而不是仅进行编程。  

    现在,我有一些问题需要重新调整闪存 API 应用程序的等级,我可以继续在这里发布这些应用程序,还是应该在 e2e 上为其创建一个不同的帖子??

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

    Preetham、

    很高兴这些步骤能帮助您进行实验、并使您实现所需的目标。

    关于闪存 API 问题:请查看以下资源、然后将您的问题发布到 E2E 的新帖子中。

    (i) http://www.ti.com/lit/pdf/spnu595

    ㈡ http://processors.wiki.ti.com/index.php/C2000_Flash_FAQ  

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    在考虑代码中的闪存 API 之前、我已经完成了应用手册。 但在 M3上对闪存扇区进行偏置时面临一些挑战。  

    按照您的建议、我将在新主题中发布我的问题。

    谢谢