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.

[参考译文] MSPM0G3507:【错误】Cortex-M0P:数据块大小小于 1KB!!! Datablock at0x0 验证失败

Guru**** 2917090 points

Other Parts Discussed in Thread: UNIFLASH, MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1642997/mspm0g3507-error-cortex_m0p-data-block-size-less-than-1kb-verification-failed-for-datablock-at0x0

器件型号: MSPM0G3507
Thread 中讨论的其他器件: UNIFLASH

【错误】Cortex-M0P:数据块大小小于 1KB!!! Datablock at0x0 验证失败

MSPMG3507 控制器。 从 uniflash 引导加载程序更新代码时出现错误。

请指导我如何解决此问题。

[CORTEX]、3:27:10 PM] [INFO] CORTEX_M0P:编程内存运行时间:26.88s[CORTEX]、2026年5月6日 3:27 :10 PM][INFO] CORTEX_M0P:编程速度:0.927kByte/s[CORTEX]、3:27:10 2026年5月6日:编程字节数:25520 字节[CORTEX]、2026年5月6日、3:27:10 PM]、[INFO !CORTEX]小于 2026年5月6日! Datablock at0x0[CRC、3:27:10 PM][info] Cortex-M0P 验证失败:0x0 处的 2026年5月6日 检查不匹配。 预期值:从 BSL 获得的 0xF582EB02:0x3A9E479E[CRC0] 2026年5月6日、3:27:10 PM][info] CORTEX_M0P 2026年5月6日  :[80][00][26][00][00][00][00][C0][2E][2E][02E 2026年5月6日 ][70] 2026年5月6日 [80][09][00][26][C0][2E][00][00][C0][2E][00][00][62][90][A7][49][ 2026年5月6日 2026年5月6日  2026年5月6日、3:27:11 PM][INFO 2026年5月6日]  {00}{08}{05}{00}{32}{1F}{65}{95}{51}{3B}{B2}{00}{B4}[ 2026年5月6日 2026年5月6日  2026年5月6日、3 2026年5月6日 :27 2026年5月6日:11 PM][INFO ] CORTEX_M0P:  

 

.cmd 文件设置

-uinterruptVectors
-stack_size=512

移动数据

  闪存中      (Rx) :origin = 0x00000000、length = 0x00020000
  SRAM       (rwx):origin = 0x20200000、长度= 0x00008000
  BCR_CONFIG   (R) :origin = 0x41C00000、length = 0x00000080
  BSL_CONFIG   (R) :origin = 0x41C00100、length = 0x00000080
}

很重要

  .intvecs: > 0x00000000
  .text :palign(8){}> flash
  .const : palign(8){}> flash
  .cinit :palign (8){}> FLASH
  .pinit :palign(8){}> flash
  .rodata : palign(8){}> flash
  .arm.exidx  :palign(8){}> flash
  .init_array :palign(8){}> flash
  .binit    : palign(8){}> flash
  .TI.ramfunc :load = FLASH、palign (8)、run=SRAM、table (BINIT)

  .vtable : > sram
  .args : > sram
  .data : > sram
  .bss  : > sram
  .sysmem : > sram
  .stack : > SRAM (high)

  .bCRConfig :{}> BCR_config
  .BSLSConfig :{}> BSL_config
}

 

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

    你好、Sowmya、

    您能否读取器件的存储器并检查 原始映像以查看其是否仍被正确编程?

    此致、
    Brian

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

    您好、Brian Lee、

    我每次都无法从引导加载程序更新映像。 有时 Uniflash 抛出以下错误。

    请告诉我引导加载程序的硬件要求是什么。  

    调用 BSL invoke () 函数之前,软件的先决条件是什么。  

    首次从 XDS110 加载应用代码。 然后从应用程序代码调用 BSL invoke () 函数。 BSL 正在调用、但我每次都无法从 Uniflash 更新代码。  

    [MCU 2026年5月20日、5:21:31 PM] [info] Cortex-M0P:MSPM0G3507(引导加载程序)
    [Bootloader 2026年5月20日、5:21:31 PM] 【错误】Cortex-M0P:自动调用引导加载程序失败、响应为... 0
    2026年5月20日、5:21:31 PM] 【错误】Cortex-M0P:尝试手动引导加载程序调用...
    2026年5月20日、5:21:32 PM] [info] Cortex-M0P:
    [CORTEX](2026年5月20日、5:21:42 PM] 【错误】CORTEX_M0P:[ERROR_MESS]无法接收预期数据!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Sowmya、

    关于“【错误】Cortex-M0P:数据块大小小于 1KB!!! Datablock at0x0 验证失败“ 我们发现 ROM BSL 返回了意外的 CRC 值、正在内部进行调查。 我将使用我们的引导加载程序团队找到的可用结果更新此主题。

    此外、当通过软件在应用中调用 BSL 时、该器件有一个勘误表:

    您的应用是否考虑了这个问题?

    您使用 Uniflash 时看到的错误是否出现在使用任何应用程序映像时、并尝试使用 BSL 更新固件?

    此致、
    Brian

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

    您好、Brian Lee、

    我可以从 XDS110 刷写映像文件、但无法使用引导加载程序进行更新。 以下代码用于调用来自“bsl_software_invoke“示例的 BSL。 我会在调用 BSL 之前禁用中断。 我还附加了命令文件设置。  

    静态内联 void invokeBSLAsm (void)

    /*在跳转到 BSL 之前完全擦除 SRAM */
    _asm (
    #if defined (__GNUC__)
    “.syntax unified\n“/*加载 SRAMFLASH 寄存器*/
    #endif
    “LDR R4、= 0x41C40018\n“/*加载 SRAMFLASH 寄存器*/
    “LDR R4、[R4]\n“
    “LDR R1、= 0x03FF0000\n“/* SRAMFLASH.SRAM_SZ MASK */
    “ANDS R4、r1\n“/*获取 SRAMFLASH.SRAM_SZ */
    “LSR R4、R4、#6\n“/* SRAMFLASH.SRAM_SZ 至 KB *
    “LDR R1、= 0x20300000\n“/* ECC 代码的起始*/
    “添加 R2、R4、r1\n“/* ECC 代码结尾*/
    “MOV r3、#0\n“
    “init_ecc_loop:\n“/*循环以清除 ECC 代码*/
    “STR R3、[R1]\n“
    “添加 R1、R1、#4\n“
    “CMP R1、R2\n“
    “Blo init_ecc_loop\n“
    “LDR R1、= 0x20200000\n“/*非 ECC-DATA 的开始*/
    “添加 R2、R4、r1\n“/*非 ECC-data 的末尾*/
    “MOV r3、#0\n“
    “init_data_loop:\n“/*循环清除 ECC-data */
    “STR R3、[R1]\n“
    “添加 R1、R1、#4\n“
    “CMP R1、R2\n“
    “Blo init_data_loop\n“
    /*在清除 SRAM 后强制调用 BSL */
    “str %[resetLvl]、[%[resetLvlAddr]、#0x00]\n“
    “STR %[resetCmdVal]、[%[resetCmdAddr]、#0x00]“
    :/*无输出*/
    :[ resetLvlAddr ]“r“(&Sysctl->SOCLOCK.RESETLEVEL)、
    [ resetLval ]“r“(DL_SYSCTL_RESET_Bootloader_entry)、
    [ resetCmdAddr ]“r“(&SysCtl->SOCLOCK.RESETCMD)、
    [ resetCmdVal ]“r“(
    SYSCTL_RESETCMD_KEY_VALUE | SYSCTL_RESETCMD_GO_TRUE)
    :“R1“、“R2“、“R3“、“R4“);
    }

    .cmd 设置

    -uinterruptVectors
    -stack_size=512

    移动数据

    闪存 (RX):origin = 0x00000000、length = 0x00020000
    SRAM (rwx):origin = 0x20200000、长度= 0x00008000
    BCR_CONFIG (R):origin = 0x41C00000、length = 0x00000080
    BSL_CONFIG (R):origin = 0x41C00100、length = 0x00000080
    }

    很重要

    .intvecs:> 0x00000000
    .text:palign(8){}> flash
    .const : palign(8){}> flash
    .cinit:palign (8){}> FLASH
    .pinit:palign(8){}> flash
    .rodata : palign(8){}> flash
    .arm.exidx:palign(8){}> flash
    .init_array:palign(8){}> flash
    .binit : palign(8){}> flash
    .TI.ramfunc:load = FLASH、palign (8)、run=SRAM、table (BINIT)

    .vtable :> sram
    .args :> sram
    .data :> sram
    .bss :> sram
    .sysmem :> sram
    .stack :> SRAM (high)

    .bCRConfig:{}> BCR_config
    .BSLSConfig:{}> BSL_config
    }

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

    你好、Sowmya、

    您是否能够与 SDK 示例复制? 我尝试通过以下方式复制您的流程:

    1.  使用 XDS110 刷写 BSL_software_invoke_app_demo_uart
    2. 按下 S2 以从应用程序调用触发 BSL
    3. 使用 uniflash 加载了标准 GPIO_TOGGLE 示例

    没有遇到任何问题。

    为清楚起见、Uniflash 控制台输出是否是初始 POST 的输出、首次加载应用程序映像时的输出、以及后续加载尝试中的最新控制台输出?

    此致、
    Brian

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

    您好、Brian、

    我想使用 ROM 串行引导加载程序、  
    UART0 PA10 和 P11 用于引导加载。
    PA18 用于应用工程中的 ADC。 向 UART0 发送命令来调用 BSL。   
    当应用程序接收到 BSL 命令时。 它在禁用活动中断后调用 BSL。  
    引导加载无法持续运行。 使用 USB 转 UART 桥接器进行引导加载。  
    并非所有 USB 转 UART 桥接器都支持引导加载。  
    尝试使用 3 个不同的 USB 转 UART 桥接器。 在一个并非始终一致的电桥上工作。
    我使用 MSPM0G3507 评估 板遵循了示例工程的顺序。
      按如下所示更改了 ROM 引导加载程序的命令文件存储器映射 :bsl_software_invoke_app_demo_uart。
      闪存 (RX):origin = 0x00000000、length = 0x00020000
      使用 XDS110 刷写了 bsl_software_invoke_app_demo_uart。  
    2.按 S2 从应用程序触发 BSL。
    3.当尝试从 uniflsh 加载 GPIO 切换示例时,我收到了以下错误:
    [MCU 2026年5月25日、11:09:28 AM] [info] Cortex-M0P:MSPM0G3507(引导加载程序)
    [引导 2026年5月25日 加载程序、11:09:28 AM][info] Cortex-M0P:正在调用引导加载程序…
    2026年5月25日、11:09:31 AM] [info] Cortex-M0P:
    [CORTEX] 2026年5月25日、11:09:31 AM] [ERROR] CORTEX_M0P:[ACK_ERROR]标头不正确!
    2026年5月25日、11:09:31 AM ] [INFO ] CORTEX_M0P:[80][01][00][19][B2][B8][96][49]
    [MCU 2026年5月25日、11:09:31 AM ][INFO] CORTEX_M0P:{51}{00}
    [CORTEX](2026年5月25日、11:09:31 AM )【错误】CORTEX_M0P:[ERROR_MESS]Process is Failed!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Sowmya、

    跟进您的原始问题:当首先读取地址 0x0 和 0x4 时、会出现验证错误
    读取。 后续读取按预期工作。 这将在将来的勘误版本中进行说明。

    对于当前问题、您是否可以使用 XDS110 并手动选择中的引导加载程序选项来复制行为
    UniFlash?


    我在该配置中没有看到此问题、这表明 USB 转 UART 桥接器可能是供电方
    看待问题。

    在 BSL 本身上:器件 BSL 存储在 ROM 中、而不是存储在主闪存中。 辅助引导加载程序和闪存插件(如果使用)
    存储在 MAIN 闪存中。 PA18 是默认的 BSL 调用引脚 — 因为您将其用于 ADC 通道、所以应该
    将 BSL 调用功能重新分配到另一个引脚或在软件中禁用该功能。

    有关 ROM 引导加载程序、辅助引导加载程序和闪存插件的详细信息、请参阅 MSPM0 引导加载程序用户指南

    此致、
    Brian