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.

[参考译文] MSPM0G1507:刷写后无法自动启动程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1345625/mspm0g1507-cannot-automatically-launch-the-program-after-flashing

器件型号:MSPM0G1507
主题中讨论的其他器件: UNIFLASHMSPM0L1306MSPM0G3507

MSPM0G1507器件在下载后无法自动运行代码。

即使我们选择了下载后运行程序的选项、仍然需要复位才能从0x0执行程序。

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

    你好、Tiger、

    您使用什么程序来刷写器件?

    此致、
    卢克

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

    Uniflash、Web 版本。

    该错误适用于 Mac 和 Linux、无论我们使用何种形式的 xds110 (M0L1306、M0G3507或 CC3220 Launchpad)

    但 MSPM0L1306目标 IC 没有这个问题。

    更新:

    打开 macOS ,如果我使用的是以下路径中的本机 DSLite:

    Fullscreen
    1
    2
    3
    4
    5
    /Applications/ti/uniflash/deskdb/content/TICloudAgent/osx/ccs_base/DebugServer/bin/DSLite help
    DSLite version 12.3.0.3041
    DSLite [operation] [Args...]
    ...
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    不需要重置!

    我 不确定这是否链接到某个程序。

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

    你好、Tiger、

    是否在 MSPM0G 和 MSPM0L uniflash 会话之间采用了相同的设置? 特别是与复位配置有关的内容。

    当前、当选择了硬复位选项时、代码将自动运行、您无需连接 NRST 引脚、因为它是通过 SWDIO 连接调用的。 我将介绍为什么需要硬复位选项。

    此致、
    卢克

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

    我的设置与您的屏幕截图完全相同。

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

    你好、Tiger、

    我将解决我们在通话中谈到的问题。

    软复位和硬复位均完全通过软件完成、其中软复位的目的是 CPU 复位、而硬复位则是系统复位。 使用空白器件或调用 BSL 时、软复位不会使器件进入 MAIN 模式、而是由于器件内部存在硬复位。 当用户使用辅助 BSL 时、他们不会进入这个模块。

    此致、
    卢克

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

    在进一步调查该问题之后。 我添加了以下代码:

    Fullscreen
    1
    2
    3
    4
    void NMI_Handler(void) {
    DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_24);
    while(1);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后、在刷写器件后立即使用 CCS 连接调试器(看到无响应、无 GPIO 切换)。 PC 指示代码运行到此处。 但 GPIO 似乎没有设置。

    附件是我的修改文件。 我只从 SDK 复制您的示例(MSPM0G3507示例、转换为我的目标1507)

    /cfs-file/__key/communityserver-discussions-components-files/908/boot_5F00_application_5F00_mod.c

    另一件奇怪的事情是、如果我在代码的任何位置放入一个阻塞快捷方式 while (1)、我可以看到 PA24已设置。 否则、PA24永远不会被置位。

    注意:MCUBOOT_LOG 已禁用。 优化标志:-OS 堆栈/堆1024。

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

    进一步调查:

    停止时、SYSCTL->SOCLOCK。 NMIIIDX 指示 SRAM 双错检测。

    您能进一步研究一下吗?

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

    跟进:

    下面的代码对我来说是权变措施、但 SRAMDED 的原因仍然不清楚。

    BTW、我尝试了 SYSCTL_RESETLEVEL_LEVEL_CPU、但它不起作用。 POR/BOOTRST 工作。

    Fullscreen
    1
    2
    3
    4
    5
    6
    void NMI_Handler(void) {
    if (SYSCTL_NMIIIDX_STAT_SRAMDED == DL_SYSCTL_getPendingNonMaskableInterrupt()) {
    DL_SYSCTL_resetDevice(SYSCTL_RESETLEVEL_LEVEL_BOOTLOADEREXIT);
    }
    while (1);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    你好、Tiger、

    您使用的是自定义的启动代码还是 ROM 中的启动代码?

    复位是否允许您的代码返回 main?

    我认为 GPIO 不会变为高电平是在初始化 GPIO 之前出现 SRAM DED 错误的症状。

    此致、
    卢克

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

    您的意思是"自定义启动代码"? 我只是以 bootmanger (mcuboot)为例。

    奇怪的是、如果我删除 mcuboot 函数调用并只是进行 GPIO 切换、问题就会消失。

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

    最终找出原因的根源。

    器件进入闪存0x0地址执行状态、但立即触发 SRAMDED NMI 中断。 根本原因是 链接器文件中的 SRAM 区域指向0x20000000、但 M0G 系列放弃了 ECC。 因此访问该区域可能会导致问题。 但是、SYSRST 可以解决这一问题。 (在 NMI ISR 中、触发 SYSRST、或手动切换 RST 引脚以触发 POR)。

    分辨率:

    需要按照示例更改链接器文件、使用0x20200000。