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.

[参考译文] MSPM0G1107:使用调试锁定策略/密码配置 NONMAIN 时的 CRC 值无效

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1467625/mspm0g1107-invalid-crc-value-when-configuring-nonmain-with-debug-lock-policy-password

器件型号:MSPM0G1107
主题中讨论的其他器件:SysConfigSEGGER

工具与软件:

我正在尝试使用密码限制软件调试访问。 但是、当我使用 JFlash 7.96刷写器件时、我收到以下关于 NONMAIN 中 CRC 值的问题:

重现步骤:

1.根据1.5.2设置串行线调试锁定策略

2.根据1.5.4设置 SWD 密码

作为测试、我使用虚拟口令:00010203 04050607 08090A0B 0C0D0E0F



3、以下是编译后的映像中位于正确地址的值:

4.尝试擦除器件、但失败、因为 NONMAIN 扇区已锁定

5.尝试对设备进行编程、但 CRC 不正确

6.尝试反向工程的默认 CRC32摘要值发现在1.5.15 ,但这是几乎不可能的,如果你不知道你使用的地址范围或确切的算法方案。




问题:

1.如何在不中断器件的情况下使用 JFlash 擦除 NONMAIN?

2.分别使用哪个确切地址范围来计算 BCR 和 BSL 的 CRC?

3.您使用哪种确切的 CRC32算法来计算校验和?

4. TI 如何期望我们自己计算这些 CRC 值?

5.我们想要随机设定密码并在 CI/CD 部署过程中自动执行该过程,是否有一个 python 库/脚本,您建议使用完全相同的 CRC 方案? 如果不是、我们如何能够随机化密码、然后在编译/链接时使用随机化字填充这些字段?

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

    尊敬的 Edward:

    您是否正在使用我们的 SysConfig 工具? 此操作将为您找到具有给定设置和密码的 CRC。 您可以在此处执行所有设置、然后如果不想使用我们的 SysConfig、请将文件复制到您的程序中。

    此致、
    Luke

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

    嗨、Luke!

    因此、此 SysConfig 工具似乎很有用、我一定要查看它、但它位于哪里? 功能? 似乎在开发时验证 CRC 会很有用、但这对我们有关问题5的原因没有帮助

    我们需要一种随机设置密码的方法、然后将该密码放入 NONMAIN 中。 也必须相应地更新 CRC。 具体思路是、我们要运行相同的 CRC32算法并将它们本身放置到 NONMAIN 中。 在部署过程中、这似乎不能自动完成(Jenkins / Cloudbess)

    我们不使用 CCS 进行开发、因为我们运行 WSL 和 Docker 来管理我们拥有的所有不同构建环境。 所以 CCS 并非对我们最佳。 我们已经将其用于您建议的示例代码

    问题4、这是你们期望我们生成 CRC 的唯一方式吗?

    另外、请回答问题1、2、3和5。

    我们能否安排一次通话、我认为知识的转让比电话沟通要快得多、这对我和我的团队来说是高度优先的事项。

    谢谢!
    Eddie Devlin

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

    尊敬的 Edward:

    我来检查多项式和配置、这样我得到的结果就不会错误。

    1. SEGGER -您需要擦除非主存储器并对其重新编程、该行为与正常存储器地址相同、但是 请勿执行  在编程非主器件前、对器件进行复位或下电上电。  如果您有已擦除的器件、则重启电源将无法再次访问它。
    2. BCR 和 BSL 的相应寄存器是 CRC 校验中使用的寄存器。
    3. 正在为您获取这些信息
    4. 一旦拥有 CRC 方法、就可以自行生成
    5. 我们没有这样做的工具,你必须创建你自己的方法随机密码.
      1. 创建一个脚本来将密码和 CRC 添加到您的 hex 文件中是一个可行的选项

    此致、
    Luke

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

    非常感谢您的回复、期待您的参与。

    问题2.

    特别是对于 BCR、我知道0x41C0005C 是 BOOTCRC 摘要值(请按照步骤查看#6、在原始文章中重现)。 默认值为0x1879DAC3、我一直在努力独自获取它。 不知道你们使用的确切地址范围,我只是在黑暗中拍摄,感觉我在浪费我的时间。 可能我看不到手册的正确位置、或者手册中没有。 我还想了解有关 BSL 配置数据的信息、以防万一

    我需要:

    a)你们用来计算 BOOTCRC 值的起始地址和结束地址

    b)你们用来计算 BSLCONFIGCRC 值的起始和结束地址

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

    尊敬的 Edward:

    这是 BCR 和 BSL 的存储器地址

    长度是从 ID 寄存器开始的、直到相同的 CRC。 这是 G 系列技术参考手册 NONMAIN 寄存器中的内容

    此致、
    Luke

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

    尊敬的 Edward:

    以下是 CRC 的参数。 (初始值和最终值是输入和输出、具体取决于您的设置)

    此致、
    Luke

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

    感谢 CRC32的详细介绍- XOR 值正是我们所需要的!

    关于问题1

    我们仍在努力擦除 NONMAIN。 在 SEGGER JFlash 中、我们同时启用了 MAIN 和 NONMAIN 这两个扇区并运行了擦除扇区(F3)和擦除芯片(F4)命令。 这两种情况都会导致此错误:


    所以似乎不像编程 main 那么简单。 我们如何解锁这个扇区以便我们可以擦除它?

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

    尊敬的 Eddie:

    我采用 gpio_toggle_output 示例并将其调整为执行快速引导选项(以生成新的 NONMAIN)。 在刷写 NON-MAIN 时没有遇到任何问题。 我的 J-Flash 版本为8.12、而不是7.96、我通常会选择量产编程选项、而不是对扇区进行单独擦除。