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.

[参考译文] F29H85X-FOTA-EVM:SOM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655856/f29h85x-som-evm-fota

器件型号: F29H85X-EVM-EVM SOM

我有一个在 CPU 1 和 CPU 3 上运行的应用、工程结构基于闪烁的多核代码。 在构建应用程序时、会为 CPU1 工程生成一个 elf 文件、根据可以理解、编译后步骤包括一节中的 CPU3 闪存内容。 每个内核的闪存区域从组管理模式 2 的基本默认值开始。 选择此 elf 文件以在 CSS 中下载、用于闪存编程。

假设我已经可以将所述的 elf 文件传输到目标、我想了解如何使用 FOTA 对其进行编程。 我想知道 F29x 最近是否有任何可能帮助我实现此目标的示例或文档?

 

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

    我似乎每个 CPU 都需要一个二进制文件、一个用于闪存以偏移 0x10000000、另一个用于闪存以偏移 0x10400000、或者 FOTA 地址 0x10600000 和 0x10700000。 那么、有些银行管理层会欺骗他们去换行吗?

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

    尊敬的 Simon:

    请阅读:

     【常见问题解答】F29x 闪存模块和 FOTA:常见问题解答 

    如果您还有其他问题、请告诉我

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

    Nilabh、

    感谢您的反馈。 我已经看到了,它真的没有详细介绍什么和哪里加载的东西。对不起,这个文件是一个百万英里的距离我需要的信息。 方波时钟

    1、我需要将什么输出工件发送到电路板。 假设这是 CPU1 中的 bin 文件?


    2.当它到达时,我需要对 CPU1 和 CPU3 的区域进行编程? 它是如何构建的、如何拆分的?

    3.我是否必须在关闭时为 CPU 1 编程 0x10000000、为 CPU3 编程 0x10400000、或为 FOTA 地址 0x10600000 和 0x10700000 编程?

    4.在这种情况下使用 FOTA 意味着存储体模式 3. 如果设置存储体模式 3、CCS 无法对器件进行编程。 如何克服这一问题?

    5.对数据进行编程后、我需要更新 BANK_UPDATE_CTR 并重新启动、这就是全部吗?

    此致

    Simon

     

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

    让我整合信息、然后通过星期一回复您。

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

    尊敬的 Simon:

    我认为这个例子应该是你问题的良好起点  

    1. 带 FOTA 的基于闪存的 CAN SBL 示例

    有关您的问题的更多信息、

    您  .bin 从 CPU1 工程发送组合文件。 SBL 示例中的编译后步骤会将引导加载程序+ CPU1 应用程序(和 CPU3 内容)合并到单个二进制文件中、并预先附加 X.509 证书 1.这与现有构建已经生成的工件相同— .bin 从 CPU1 工程的编译后步骤生成、其中将 CPU3 闪存内容作为嵌入式部分包含在内。


    2.结构和分割

    4MB 程序闪存组织为 4 个交错组对(每个 1MB 组合、两个 512KB 物理组)。 在存储体模式 3 中、闪存 在 CPU1 和 CPU3 之间拆分并 启用 FOTA 2:

    大得多 活动(执行) 未激活(FOTA 目标)
    CPU1 FRI-1 (0x10000000) FRI-3 CPU1 部分 (0x10600000)
    CPU3 FRI-2 (0x10400000) FRI-3 CPU3 部分 (0x10700000)

    您的 SBL .bin 将接收单个地址、并将 CPU1 和 CPU3 部分编程到其各自的非活动存储体地址。 SBL 示例代码处理此拆分 — 根据映像结构,它可以知道哪些部分会转到何处。


    3.用于编程的地址

    对于 FOTA 更新、编程到非活动/更新地址:0x10600000 (CPU1) 和 0x10700000 (CPU3) 3.这些映射到 FRI-3,固件更新区域。 0x1000000/0x10400000 地址是 活动 执行区域、您在应用程序运行时不能在该区域进行写入。 存储体交换后、您在 0x10600000/0x10700000 处编程的值将变为新的活动代码 0x1000000/0x10400000。


    4.在存储体模式下进行 CCS 编程 3.

    使用 PROG_BANKMODE 寄存器 (SSU_GEN_REGS 中的偏移量 0x70) 4.此寄存器 仅 在 SSUMODE1/SSUMODE2(调试模式)期间覆盖编程逻辑的活动组模式、而不更改实际运行时组模式。 工作流程:

    1.  PROG_BANKMODE.MODE = 0x3 通过 CCS 闪存插件设置进行设置(CPU1/CPU3 与 FOTA 分开)
    2. CCS 现在可以对面向存储体模式 3 存储器区域的代码进行编程
    3. 对 BANKMGMT 扇区进行编程、以将实际器件 BANKMODE 设置为 3
    4. 发出 XRSn 复位—器件在组模式 3 下启动

    或者、对于初始器件设置、您可以使用  SDK 中的 UART/CAN 闪存编程器工具、该工具直接支持存储体模式配置命令 1.


    5.完成 FOTA 更新

    是的、这基本上是整个流程 5:

    1. 将新固件编程到非活动存储体(FRI-3 地址)
    2. 擦除无效的 BANKMGMT 扇区
    3. 对非活动 BANKMGMT 中的 BANKMODE 字段进行编程
    4. 编程 BANK_UPDATE_CTR 为  比活动区域计数器小一个值(较低=较新)
    5. 触发 XRSn 复位(通过 SIMRESET.XRSn CPU1 中的寄存器或硬件引脚)

    重要订购: 在 BANK_UPDATE_CTR 之前对 BANKMODE 进行编程、以防止功率损耗过程中出现引导故障。 复位后、bootROM 会检测到较低的计数器值并自动交换存储体。


    1. 具有 FOTA 的基于闪存的 UART SBL 示例
    2. F29H85x 数据表 — 闪存组模式
    3. F29x 闪存模块 FOTA 常见问题解答
    4. F29H85x TRM - PROG_BANKMODE 寄存器
    5. F29H85x FOTA 应用手册 — 组管理
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nilabh、

    非常感谢您的更新、它帮助了很多、我认为我拥有所有需要的信息、

     不要使用 SBL 并计划仅对 CPU、开关组和重启的闪存区域进行编程。 您认为这种方法有任何问题吗?

    对 bin 文件仍然有点困惑。 这样分组是有意义的。 我一直在阅读和倾倒闪光区域,以帮助我理解。 似乎 CPU1out elf 文件包含我需要的所有内容、我打算使用它。 我在 BIN 文件中找不到任一 CPU 闪存段开头的二进制匹配项。 有什么想法、为什么会加密、压缩?

    此致

    Simon  

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

    似乎我需要一个平面的二进制映像文件来刷新软件。 这似乎不是.bin 中创建的内容。 我需要使用 tiobj2bin 还是创建自己的程序来生成平面二进制映像?

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

    Simon、

     不打算使用 SBL、而是计划仅对 CPU、开关组和重启的闪存区域进行编程。 您认为这种方法有任何问题吗?

    是的、这取决于系统设计方式。

    [引述 userid=“671670“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655856/f29h85x-som-evm-fota/6390178

    对 bin 文件仍然有点困惑。 这样分组是有意义的。 我一直在阅读和倾倒闪光区域,以帮助我理解。 似乎 CPU1out elf 文件包含我需要的所有内容、我打算使用它。 我在 BIN 文件中找不到任一 CPU 闪存段开头的二进制匹配项。 有什么想法、为什么会加密、压缩?

    [/报价]

    我们一直在使用.bin 映像作为示例。 对 BIN 文件进行签名、以便 HSM 可以验证固件的验证性。

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

    试着找出我在转储某些闪存位置的起始位置的情况。 当 CCS 使用.out 文件对内容进行编程时、它会逐段写入闪存。 证书的第一部分。 其起始地址是 0x10000000 和 0x10400000、可以在.out 文件中看到。 但是、此模式不在.bin 中。 因此、我看不出发送纸槽是如何工作的。 我需要起始值为 0x10000000 和 0x10400000 的平坦图像。 bin 从不同的数据开始。

    闪存数据转储

    .out 文件与闪存内容匹配

    BIN 文件不匹配

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

    如果该容器可以正常运行、我如何知道我写入 0x10000000 和 0x10400000 的内容。 它看起来并不像平面图像。

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

    让我在星期五之前回到这个问题。

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

    因此、bin 文件似乎不包含 CPU1 或 CPU3 的证书。  

    我可以在没有证书的情况下对闪存进行编程吗? 如果是、我是否需要将证书闪存范围保留为空? 在组合的 CPU1/CPU3 二进制文件中、两个 CPU 的映像在 BIN 文件中只是按顺序排列的。 因此、当 CPU1 映像的大小发生变化时、CPU3 的数据开始位置将移动。 这意味着嵌入式软件需要以某种方式处理映像、以便了解闪存偏移 0x10000000 和 0x10400000 处的内容。 嵌入式软件是否可以查找数据中的任何特定模式来标记 CPU3 闪存区域的开始。 我已经注意到 CPU1 映像减去证书是多少  

    00 90 30 0C 7F 11 52 0B 7F 11 52 0B C0 10 68 00

    处理器

    02 90 31 0C 7F 11 52 0B 7F 11 52 0B FF 28 78 01

    这似乎是我可以匹配的某种模式? 通常您希望嵌入式软件如何执行此操作?