您好!
我们想开始一个新的论坛主题、探讨如何远程更新 Cortex M3和 C28内核上的固件以用于协处理器系列。
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.
您好!
我们想开始一个新的论坛主题、探讨如何远程更新 Cortex M3和 C28内核上的固件以用于协处理器系列。
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 内核应该有两种模式。
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
您好、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、
很高兴这些步骤能帮助您进行实验、并使您实现所需的目标。
关于闪存 API 问题:请查看以下资源、然后将您的问题发布到 E2E 的新帖子中。
(i) http://www.ti.com/lit/pdf/spnu595
㈡ http://processors.wiki.ti.com/index.php/C2000_Flash_FAQ
谢谢、此致、
Vamsi