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.

[参考译文] MSPM0L1105:CAN##39;t 对 MCU 进行编程/调试

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1379168/mspm0l1105-can-t-program-debug-the-mcu

器件型号:MSPM0L1105
主题中讨论的其他器件: LP-MSPM0L1306UNIFLASH、MSPM0L1306

工具与软件:

您好!

我在使用评估板(LP-MSPM0L1306)时在定制电路板上遇到了 MSPM0L1105问题。 已受影响的2个定制板。

问题是、我在调试固件时根本没有任何问题、但在 停止调试并再次尝试对电路板进行编程后、它无法进行编程、尽管之前编程的固件仍然在工作。 J-Link 编程器返回错误"Error:Failed to initialized DAP"。

还尝试使用 UniFlash 将 MSPM0L1105连接到评估板上提供的 XDS110调试探针进行编程或恢复出厂设置、但显示错误"[错误] CS_DAP_0:连接到目标时出错:DAP 连接错误。 这可能是由器件进入低功耗模式引起的。 尝试强制执行外部复位。 如果错误仍然存在、请尝试强制执行 BSL、批量擦除或恢复出厂设置。 有关更多信息、请查看器件常见问题解答。"

我遵循了该指南: /cfs-file/__key/communityserver-discussions-components-files/908/1220.Unlock-MSPM0-instructions.pdf 、但我停留在方法1:步骤5。 此步骤让我采用方法2、该方法工作正常、因为我收到绿色消息"Send firmware successfully"和"Download complete"(如 PDF 中所示的图像)、但 MCU 与之前的状态相同、但未进行编程、并且在尝试解锁时停留在方法1:步骤5。

我不是尝试在 NVM 或 NONMAIN 上进行写入(我看到这可能是导致锁定的原因、但我不使用它)、它只是一个简单的固件、可以对 IO 和 SPI 引脚进行读取和写入、来测试 定制板上的组件是否正常工作。

注意:我将 vscode 与 cmake 一起使用来构建固件 和 J-Link (通过 SWD 进行编程/调试)。

提前感谢。

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

    您好!

    1.确保您的.cmd 文件和启动文件已从 L1306迁移到 L1105。

    2.恢复出厂设置时、似乎使用 BSL 重新下载代码、但该代码适用于 L1306、不适用于 L1105。 如果您有 SWD 和 RESET 引脚、请尝试通过 CCS.e2e.ti.com/.../Factory-reset_5F00_Auto.pdf 遵循本指南

    此致、

    Zoey

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

    您好、感谢您的 快速回复

    1.我没有迁移、因为我在"TI 系统配置工具"中创建了一个新项目。 我使用 GCC 构建、没有.cmd 文件。 我正在使用该工具生成的链接器文件(.lds)、其中在"Select Device"中选择了 MSPM0L1105。

    (已尝试一切措施来解决警告、但在选择器件后、它仍然会显示)

    我的启动文件是"startup_mspm0l110x_gcc.c"、包含在 MSPM0 SDK v2.00.00.03中(source/ti/devices/msp/m0p/startup_system_files/gcc)

    如果是这样、会生成链接器文件:

    /* Generate a link error if heap and stack don't fit into RAM */
    _Min_Heap_Size  = 0;      /* required amount of heap  */
    _Min_Stack_Size = 0x80; /* required amount of stack */
    
    /* Specify the memory areas */
    MEMORY
    {
        FLASH           (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00007FF8
        SRAM            (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00001000
        BCR_CONFIG      (R)   : ORIGIN = 0x41C00000, LENGTH = 0x00000080
        BSL_CONFIG      (R)   : ORIGIN = 0x41C00100, LENGTH = 0x00000080
    }
    
    /* Note: SRAM length must match MPPC/MEMSS config! Please edit it manually. */
    
    REGION_ALIAS("REGION_TEXT", FLASH);
    REGION_ALIAS("REGION_PREINIT_ARRAY", FLASH);
    REGION_ALIAS("REGION_INIT_ARRAY", FLASH);
    REGION_ALIAS("REGION_FINI_ARRAY", FLASH);
    REGION_ALIAS("REGION_BSS", SRAM);
    REGION_ALIAS("REGION_NOINIT", SRAM);
    REGION_ALIAS("REGION_DATA", SRAM);
    REGION_ALIAS("REGION_STACK", SRAM);
    REGION_ALIAS("REGION_HEAP", SRAM);
    REGION_ALIAS("REGION_TEXT_RAM", SRAM);
    REGION_ALIAS("REGION_ARM_EXIDX", FLASH);
    REGION_ALIAS("REGION_ARM_EXTAB", FLASH);
    
    /* Define output sections */
    SECTIONS
    {
        /* section for the interrupt vector area                                 */
        PROVIDE (_intvecs_base_address =
            DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00000000);
    
        .intvecs (_intvecs_base_address) : AT (_intvecs_base_address) {
            KEEP (*(.intvecs))
        } > REGION_TEXT
    
        PROVIDE (_vtable_base_address =
            DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20000000);
    
        .vtable (_vtable_base_address) (NOLOAD) : AT (_vtable_base_address) {
            KEEP (*(.vtable))
        } > REGION_DATA
    
       .text : {
            CREATE_OBJECT_SYMBOLS
            KEEP (*(.text))
            . = ALIGN(0x8);
            *(.text.*)
            . = ALIGN(0x8);
            KEEP (*(.ctors))
            . = ALIGN(0x8);
            KEEP (*(.dtors))
            . = ALIGN(0x8);
            KEEP (*(.init))
            . = ALIGN(0x8);
            KEEP (*(.fini*))
            . = ALIGN(0x8);
        } > REGION_TEXT AT> REGION_TEXT
    
        .ramfunc : {
            __ramfunct_load__ = LOADADDR (.ramfunc);
            __ramfunct_start__ = .;
           *(.ramfunc)
           . = ALIGN(0x8);
           __ramfunct_end__ = .;
        } > REGION_TEXT_RAM AT> REGION_TEXT
    
        .rodata : {
            *(.rodata)
            . = ALIGN(0x8);
            *(.rodata.*)
            . = ALIGN(0x8);
        } > REGION_TEXT AT> REGION_TEXT
    
        .preinit_array : {
            PROVIDE_HIDDEN (__preinit_array_start = .);
            KEEP (*(.preinit_array*));
            PROVIDE_HIDDEN (__preinit_array_end = .);
        } > REGION_PREINIT_ARRAY AT> REGION_TEXT
    
        .init_array : {
            . = ALIGN(0x8);
            PROVIDE_HIDDEN (__init_array_start = .);
            KEEP (*(SORT(.init_array.*)))
            KEEP (*(.init_array*))
            PROVIDE_HIDDEN (__init_array_end = .);
        } > REGION_INIT_ARRAY AT> REGION_TEXT
    
        .fini_array : {
            . = ALIGN(0x8);
            PROVIDE_HIDDEN (__fini_array_start = .);
            KEEP (*(SORT(.fini_array.*)))
            KEEP (*(.fini_array*))
            PROVIDE_HIDDEN (__fini_array_end = .);
            . = ALIGN(0x8);
        } > REGION_FINI_ARRAY AT> REGION_TEXT
    
        .ARM.exidx : {
            __exidx_start = .;
            *(.ARM.exidx* .gnu.linkonce.armexidx.*)
            __exidx_end = .;
        } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX
    
        .ARM.extab : {
            . = ALIGN(0x8);
            KEEP (*(.ARM.extab* .gnu.linkonce.armextab.*))
             . = ALIGN(0x8);
        } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB
    
        __etext = .;
    
        .data : {
            __data_load__ = LOADADDR (.data);
            __data_start__ = .;
            KEEP (*(.data))
            KEEP (*(.data*))
            . = ALIGN (8);
            __data_end__ = .;
        } > REGION_DATA AT> REGION_TEXT
    
        .bss : {
            __bss_start__ = .;
            *(.shbss)
            KEEP (*(.bss))
            *(.bss.*)
            *(COMMON)
            . = ALIGN (8);
            __bss_end__ = .;
        } > REGION_BSS AT> REGION_BSS
    
        .noinit : {
            /* place all symbols in input sections that start with .noinit */
            KEEP(*(*.noinit*))
            . = ALIGN (8);
        } > REGION_NOINIT AT> REGION_NOINIT
    
        .heap : {
            __heap_start__ = .;
            end = __heap_start__;
            _end = end;
            __end = end;
            KEEP (*(.heap))
            __heap_end__ = .;
            __HeapLimit = __heap_end__;
        } > REGION_HEAP AT> REGION_HEAP
    
        .stack (NOLOAD) : ALIGN(0x8) {
            _stack = .;
            KEEP(*(.stack))
        } > REGION_STACK AT> REGION_STACK
    
        .BCRConfig :
        {
            KEEP(*(.BCRConfig))
        } > BCR_CONFIG
    
        .BSLConfig :
        {
            KEEP(*(.BSLConfig))
        } > BSL_CONFIG
    
        __StackTop = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK);
        PROVIDE(__stack = __StackTop);
    }
    

    2.我曾尝试按照指南操作、但在本例中无法正常工作、使用的是 J-Link、评估板上的 XDS110调试探针(LP-MSPM0L1306)连接到定制板上的 MSPM0L1105。

    使用 J-Link 时、就会出现错误:

    使用 XDS110调试探针:

    单击"Force Reset"时:

    当我单击"确定"时:

    此致。

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

    您好!

    SWD 似乎可以访问您的内核、但无法访问 DAP。

    您可以检查自己的电路板上的 VCORE 电压吗?

    这似乎是由硬件造成的。

    此致、

    Zoey

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

    您好!

    VCORE 的电压为1.347V。 硬件开发指南指出典型电压为1.35V、情况应该不错。

    我可以在首次将板连接到 PC 时加载固件、第一次连接后固件会停止连接。

    此致。

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

    您好!

    很抱歉这么晚才回复。  

    您的软件对于 MSPM0L1306 LaunchPad 来说是可以的、但如果迁移到自己的工程、它无法正常工作?

    看门狗? 有一种可能的条件是、在发送 DSSM 消息时您的 MCU 始终处于复位状态。

    请尝试执行以下步骤进行确认:

    1.将 PA18上电并使 MCU 进入 BSL 模式。

    2.尝试在10秒内下载或恢复出厂设置。

    此致、

    Zoey

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

    您好!

    我的意思是、该软件适用于 MSPM0L1306 LaunchPad、因为我每次都可以对其进行刷写/调试。

    但对于定制电路板上的 MSPM0L1105、当我首次刷写/调试时、一切都在运行。 这是我第二次尝试闪存/调试时、MCU 没有响应。

    禁用看门狗。   我在"TI 系统配置工具"上启用的唯一模块是 GPIO、SPI、TIMER 和 SYSCTL (SYSCTL 具有所有默认值)。

    我尝试了 这些步骤 ,但我得到相同的错误,我显示在上一个答复.

    此致

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

    你(们)好

    奇怪的是、一旦你下载了项目、那么 MCU 将被锁定。

    您是否首次尝试过恢复出厂设置? 然后在第二次尝试连接 MCU。

    您能否将电路板的 MCU 器件原理图发送给我们? 让我们首先排除它是否与硬件有关

    此致、

    Zoey

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

    您好!

    这是原理图

    此致

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

    您好!

    硬件没有问题。 您是否可以尝试按照以下步骤读取 MCU 的状态?

    e2e.ti.com/.../Read-CFGAP_5F00_BOOTDIAG.pdf

    此致、

    Zoey

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

    您好!

    我无法读取砖型 MCU 上的这些寄存器、因为我无法连接到 CS_DAP_0 (DAP 连接错误)。

    不确定这是否是您需要的结果、但我购买了新出厂的定制电路板并读取该 MCU 上的寄存器。

    此致。

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

    您好!

    您的 MCU SWD 功能似乎已被禁用。 您是否更改了 NONMAIN?

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

    您好!

    否、我未更改 NONMAIN。 如果 NONMAIN 已更改、那不是因为我想更改。

    此致。

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

    你(们)好

    尝试在 SWDCLK、SWDIO 线路上添加拉电阻、使用2.2K 或4.7K 电阻器上拉至3V。

    应使 SWD 线路稳定。

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

    您好!

    我尝试了两个电阻、先4.7K、然后是2.2k、但都没有使 SWD 工作。

    此致

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

    经过软件和硬件测试后、我们注意到当 IC 处于启用状态时、IC 从机的其中一条 I/O 线路干扰了 SWDIO 引脚、因此我们将更改用于该 I/O 的引脚 感谢您的时间和耐心!