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.

[参考译文] MSPM0L1306:通过 Keil IDE 使用 J 链路刷写非主区域。

Guru**** 2393725 points
Other Parts Discussed in Thread: UNIFLASH, SYSCONFIG, MSPM0L1306

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1491164/mspm0l1306-flashing-non-main-region-with-j-link-through-keil-ide

器件型号:MSPM0L1306
主题中讨论的其他器件:UNIFLASHSysConfig

工具与软件:

客户端有一项要求以完全限制的方式完全锁定调试、因此在 BCR 区域、当我配置为完全限制并将最后一个十六进制文件刷写到 MCU 时、我仍然能够连接和擦除/读取存储器。 我尝试移除并重新连接电源、但仍然是相同的。  



这是 BCR 配置的二进制部分、我将使用 JLINK 将二进制文件刷写到 MCU。 BSL 禁用  


有人能找出这里的错误  

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

    Ashish、您好!

    理论上、如果将 SWD 安全性设置为级别2、则将禁用应用调试、批量擦除等。 您的意思是、设置之后、您仍然可以读取存储器、您能否帮助读取并检查地址41C00004h 中的值? 我们需要检查闪存中的实际值、而不是您的代码文件中的值。  

    事实上、如果您要对 NONMAIN 进行编程、您需要在 Keil 中设置某个值、您是这样做的吗?

    此致、

    Janz Bai

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

    尊敬的 Janz:

    感谢您的答复。  

    我尝试了它与 Keil 和 Jlink 闪存软件,也仍然非主要区域没有更新 (仍然0x41C00004h 是 AABBAABB ),但闪烁没有显示问题或警告,所以只是想知道我错过了任何设置或其他任何东西这里需要配置额外的二进制或 Keil ,

    是的、这个非主区域被添加到调试器设置的闪存下载中。


    谢谢。此致  

    Ashish Kumar Verma  

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

    Ashish、您好!

    1)。 您可以如下所示配置"Options -> Debug->Flash Download":

    2)。 然后、您需要执行以下步骤:

    • 再进行点击  
    • 在工程项目窗口中、点击"添加文件"、选择"boot_config.c"文件并添加它。

        

    • 然后、构建项目以生成您需要的文件。 然后下载该文件。 从理论上讲、可以成功修改 NONMAIN。

    此致、

    Janz Bai

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

    谢谢、Janz

    我确认了所有这些步骤、并按照相同的方式执行、因为我们可以看到也以十六进制为该区域生成了二进制文件。 我不知道为什么 MCU 中不更新。

    我将在刷写步骤中再次进行检查、并告知您我是否找到了内容  

    此致、

    Ashish Kumar Verma

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

    Ashish、您好!

    添加了一点、请检查是否为 NONMAIN 区域设置了写保护。 如果没有、那么在理论上、执行这些步骤应该是成功的。 您也可以尝试直接使用 J-link 和 Keil 进行下载、而不是使用 hex 文件进行下载。 或者、您可以尝试生成 bin 文件或 txt 文件来执行相同的测试。 也可以尝试使用 XDS110进行相同的测试。 这些测试可以帮助您确认问题的位置。  

    并添加了 boot_config.c 文件、对吧?

    此致、

    Janz Bai

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

    是为以下 BCR 区域设置了写保护我已经给出了更新的十六进制文件  



    然后我刷写了 J link、刷写完成了  

    然后,我仍然能够读回  



    不知何故、它没有更新 BCR 区域、或者我在这里仍然犯了任何错误  

    下面是通过 Jlink 闪烁的情况



    刷写后  






    下面是我在代码中进行的 BCR 区域设置  




    如果还需要其他东西、请告诉我  

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

    Ashish、您好!

    实际上、我的意思是、将写保护设置为 NONMAIN 可能会导致您无法对 NONMAIN 进行编程。 但现在这并不重要。 如果不想、则不需要为 NONMAIN 设置写保护。 您使用的 hex 文件在 NONMAIN 中似乎具有修改后的值、但在使用 J-Link 和 J 闪存进行闪存之后、未成功修改 NONMAIN。 J Flash 窗口还会显示您已选择所需的闪存区域。 这太奇怪了。 现在、请执行以下测试并告诉我结果:

    • 通过 Keil 和 J Link 直接下载您的项目、而不使用 J 闪存;  
    • 生成 bin 文件或 TI txt 文件并使用 J Link 和 J Flash 进行下载;
    • 生成 bin 文件或 TI txt 文件并使用 J Link 和 Uniflash 下载;
    • 生成 bin 文件或 TI txt 文件并使用 XDS110和 Uniflash 下载(如果您有 XDS110);
    • 使用 J Link 和 J 闪存下载十六进制文件;
    • 使用 J Link 和 Uniflash 下载十六进制文件;
    • 使用 XDS110和 Uniflash 下载十六进制文件(如果您有 XDS110)

    此致、

    Janz Bai

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

    和 Ashish、

    你可以将你曾经使用过的 hex 文件发送给我(无需设置写保护)、我可以尝试使用 J Link 和 J Flash 进行下载来验证我这边的问题。

    此致、

    Janz Bai

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

    尊敬的 Janz:

    我尝试使用 Jlink Flash 而不是 Jlink-Flash lite 进行刷写、现在我知道它不是更新到 BCR 区域、它显示了类似这样的错误、是的、你让我使用 Keil 中的 Load 选项也抛出了错误和  





    你对此有什么建议吗

    还有一个问题:BSL 段不是以十六进制生成的、我是否也必须对其进行配置?

    此致

    Ashish Kumar Verma   


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

    Ashish、您好!

    我在我这边做了一些测试。  

    理论上、如果您已经完成了如下图所示的配置、则可以成功下载代码。 您应该选择所使用的端口、如果可以检测到您的设备、您将在"Device (设备)"窗口中找到它。 如果在窗口中找不到、请检查设备连接。  

    请注意、如果您使用 正版 J-link、那么您需要一个外部 VCC 为 MCU 供电。 J-link 无法为 MCU 供电。

    如果上述信息无法解决您的问题、请尝试更新您的软件。 你可以发送你向我使用的 hex 文件、我可以尝试在我这边进行测试下载。

    此致、

    Janz Bai

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

    尊敬的 Janz:

    很抱歉、可以提供所有二进制文件、因为这是客户端项目、无法披露信息、但我注意到 TI 为 MSPM01306提供的 SDK 中有一项内容"flashctl_nonmain_memory_write"

    它们使用属性(place_in_memory (".bCRConfig") )将整个结构放置在文件 boot_config.c 的 BCR 区域地址中。



    不仅如此,他们还把 algo 写入 main ()中的 BCR 和 BSL 区域。



    当我注释 boot_config.c 代码时、为该段生成了十六进制、但 BCR 区域更新了我在 main ()写入中提供的值、但当我注释 main ()写入函数时、BCR 区域不会更新  


    是否有办法仅通过十六进制生成来更新 BCR 区域? 我的意思是、不对应用执行任何操作、仅通过 BCR 区域的 J-Link 生成十六进制并进行刷写。  仅限通过应用程序代码更新 BCR 区域的选项。

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

    Ashish、您好!

    事实上、您只需在 Sysconifg 中配置 NONMAIN、并根据我之前提到的步骤执行。 我不知道为什么直接使用 Keil 下载代码时会出现错误、以及为什么使用 J Link 和 J Flash 无法帮助您实现此目的。 但是、正如我在之前的回复中提到的、您应该注意到、如果您使用 正版 J-link、那么您需要一个外部 VCC 来为 MCU 供电。 J-link 无法为 MCU 供电。

    1.检查您的硬件连接:  如果您使用 正版 J-link、则需要一个外部 VCC 为 MCU 供电。 J-link 无法为 MCU 供电。

    2.设置 JLINK 配置 我在前面提到过

    3.使用 SysConfig 根据需要配置 NONMAIN 区域  

    4.  首先构建您的项目

    5.在构建后添加 boot_config.c

    6.再次构建项目并下载  

    或者、您也可以在构建项目后使用 J Flash 下载 hex 文件。

    我使用它  

    7.我尝试了我自己的一边,我可以根据这些步骤成功地下载代码。 如果您仍然不能、请先尝试更新您的软件。

    如果您发现不带 NONMAIN 配置的下载代码也会失败、可以先执行恢复出厂设置。 请参阅此帖子以执行恢复出厂设置。

    (+) MSPM0L1105:MSPM0L1105TDGS20R -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    此致、

    Janz Bai

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

    是的、Janz、我们也尝试了这些步骤、它显示刷写已完成、但未更新 BCR 区域。

    如果您检查已下载的验证代码、则会抛出错误。  




    与 J-Flash 软件(最新)相同:如果这个区域没有变化,那么它将说完成,但如果我们试图修改该区域,那么它将抛出一个验证问题。 MCU 由外部 VCC (定制电路板)供电。

    但是、如果我们通过应用程序更新运行时区域、则表示它有效。

    我们在"ti\mspm0_sdk_2_04_00_06\examples\nortos\LP_MSPM0L1306\driverlib\flashctl_nonmain_write\Keil"位置探索了 MSPM0的 SDK 中提供的示例代码

    这个示例代码生成二进制文件以写入位置0x4C100000、但作为替代、它也在更新代码以在主应用程序的运行时更新 BCR 区域。

    我们必须通过闪存 CMDWEPROTNM 寄存器取消写保护、然后擦除并更新 BCR 区域。

    问题来了  

    是否可以仅通过 JLink 闪存更新 BCR 区域?

    我不想在我的闪存区域(0x00000000 - 0x0000FFFF)中添加任何与 BCR 相关的内容。 我的意思是、我不想通过主应用程序更新 BCR 区域。 SWD 将在最终生产中锁定,BCR 区域只会在最后阶段闪存,而不是在开发阶段,我们也不能为它保留宏,因为客户端不想这样做。


    抱歉、由于客户合同、我无法共享二进制文件。

    如果可能、您能否提供二进制文件和工作区? 我们将尝试刷写和检查相同内容、并对其进行更新。

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

    Ashish、您好!

    • 实际上、我已经尝试 检查下载的验证代码。 就我而言、也可以取得成功。 我已在以下两种配置中进行过尝试、可以尝试这两种设置。 我这边没有错误。

    • 说实话,这是非常奇怪,为什么你不能成功,但我可以,当我们使用相同的设置. 只需执行简单的 NONMAIN 配置和下载操作。 这让我感到困惑。 如果您读取当前 MCU 的闪存数据、并且 当前 MCU 芯片 NONMAIN 中的 BOOTCFG4寄存器未设置 NONMAIN 的写保护、则没有理由使操作失败。

    • 正如我在之前的响应(通过 SysConfig 配置 NONMAIN 并根据我分享的步骤执行设置)中提到的、您只需修改 NONAMIN、而无需在 main.c 中编写代码
    • 我可以将我使用的项目分享给您。 我只需配置 NONMAIN 以禁用 BSL 并启用快速模式(这些选项仅用于执行测试、测试 NONMAIN 是否可以  成功修改)、您可以参考我的设置并尝试直接将代码下载到 MCU 中、或者您可以尝试使用 J-FLASH 下载十六进制文件、以检查 NONMAIN 是否可以成功修改。

    e2e.ti.com/.../L1306_5F00_GPIO-toggle_2B00_-NONMAIN-modification.zip

    • 然后、请更新支持包。

    • 所有这些尝试都无法解析您的功能、请尝试仔细检查您的软件环境和硬件环境。  
    • 请尝试将 Simply 工程导入 Keil 并通过 SysConfig 修改 NONMAIN、然后测试是否能够将工程成功下载到 MCU 以及是否能够成功修改 NONMAIN。
    • 在执行下载测试之前、请尝试对 MCU 执行恢复出厂设置、或者请使用另一个单芯片进行测试、以找出根本原因
    • 请尝试使用其他工具进行下载测试:1)。 J-Link + Uniflash;2)。 将工程迁移到 CCS 并使用 CCS + J-Link;3)。 将工程迁移到 CCS 并使用 CCS + XDS110
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有上述的方法是我现在可以提供给你的信息,因为一切似乎正常在我身边。 很奇怪、为什么您无法自行修改 NONMAIN。 请先尝试上面我提到的方法一步一步。

    此致、  

    Janz Bai

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

    谢谢、Janz。 我真的很感谢您在帮助我解决这些问题方面所付出的努力。

    我将尝试使用所提供的工作区进行测试;完成后、我会告知您状态。

    此致、  

    Ashish Kumar Verma  

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

    Ashish、您好!

    不用客气。 希望这可以帮助您解决您的问题。 祝你好运。

    并添加了一点、您也可以尝试生成 bin 文件来进行测试。 换言之、现在它需要您进行更多的测试、有关环境、设置等、以找到根本原因。

    此致、

    Janz Bai

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

    尊敬的 Janz、是的、您的 hex 文件很有用、它正在更新至 BCR 区域。 我分析了您的映射文件和 Hex 文件  

    在映射文件中、我看到左侧是我的、右侧是您的  



    为什么会这样  

    这是我的代码 Boot_config.c 文件  



    对此有什么建议吗??

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

    Ashish、您好!

    事实上,我不知道你的地图为什么与我的不同。 但在您的映射中、大小为0x0、在我的映射中、它有实际的 size 值。 我认为这就是无法正确更新 BCR 区域的原因。 我想您可以尝试部分地将您的代码部分迁移到我与您共享的项目中。 在迁移过程中、您有时可以检查映射以确认没有错误。 因为我不知道您为什么生成这个奇怪的映射文件。

    很抱歉、今天我没有时间在这篇文章上为您提供帮助、因为我需要完成一个 DDL 是明天的案例。 因此,只是根据我的回应做测试,如果你有一些关于 Keil 本身的问题,我认为尝试在 Google 上搜索它也是一个很好的方法,如如何生成映射文件等

    此致、

    Janz Bai