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.

[参考译文] CODECOMPOSER:在 IDE 内通过 Segger 编程器刷写 MSPM0G3107并不总是能正常工作

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1496246/codecomposer-flashing-mspm0g3107-via-segger-programmer-from-within-ide-not-always-working-correctly

器件型号:CODECOMPOSER
主题中讨论的其他器件:SEGGER、MSPM0G3107 SysConfig

工具与软件:

你(们)好  

我遇到过这样的问题:通过 Segger JLink 编程器从 CCS Theia (v20.1.0.6_1.7.0)中刷写 MSPM0G3107 MCU 并不总是有效的。  

现在我经常会遇到这种情况、并且使用多个(完全相同的定制)电路板。 在某些较旧版本的 IDE 中已经观察到同样的行为  

结果如下所示  

所以很显然,该故障在某种程度上与编程的 NONMAIN 段(它确实是要生成的二进制的一部分,我知道是有效的所有默认值,除了 BSL 调用引脚,因为在默认情况下会导致我们的应用程序中的问题....)

这种行为与闪烁的尝试密切相关、闪烁的顺序为一分钟、而不是最多几秒。  

我当前的解决方法是通过 Jflash 编程工具刷写一个已知的工作二进制文件(虽然具有相同的非主内容),然后铺就 IDE  

(当我谈论通过 IDE 进行刷写时、我其实是指闪存和启动调试会话...)

我的启动配置是这样的

 

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "MCUCode",
            "type": "ccs-debug",
            "request": "launch",
            "projectInfo": {
                "name": "MCUCode",
                "resourceId": "/MCUCode"
            }
        }
    ]
}

我按此方式设置目标配置  

我的工作 jlink 配置 设置如下(必须以.jflash 文件附件上传方式存储、这样对我来说似乎无效)

 

  AppVersion = 79611
  FileVersion = 2
[GENERAL]
  aATEModuleSel[24] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  ConnectMode = 0
  CurrentFile = "C:\Users\pbendema\OneDrive - Clarios\Dokumente - Clarios Li-ION 12V LISB battery - LISB III\06_Product_Engineering\07_Software\Releases\Staging Releases\SW_BSample_105_23012025_1804_55c737d5.elf"
  DataFileSAddr = 0x00000000
  GUIMode = 0
  HostName = ""
  TargetIF = 1
  USBPort = 0
  USBSerialNo = 0x00000000
  UseATEModuleSelection = 0
[JTAG]
  IRLen = 0
  MultipleTargets = 0
  NumDevices = 0
  Speed0 = 4000
  Speed1 = 4000
  TAP_Number = 0
  UseAdaptive0 = 0
  UseAdaptive1 = 0
  UseMaxSpeed0 = 0
  UseMaxSpeed1 = 0
[CPU]
  NumInitSteps = 1
  InitStep0_Action = "Reset"
  InitStep0_Value0 = 0x00000000
  InitStep0_Value1 = 0x00000000
  InitStep0_Comment = "Reset and halt target"
  NumExitSteps = 0
  UseScriptFile = 0
  ScriptFile = ""
  RAMAddr = 0x20200000
  RAMSize = 0x00008000
  CheckCoreID = 1
  CoreID = 0x0BB11477
  CoreIDMask = 0x0F000FFF
  UseAutoSpeed = 0x00000001
  ClockSpeed = 0x00000000
  EndianMode = 0
  ChipName = "TI MSPM0G3107"
[FLASH]
  NumBanks = 2
[FLASH0]
  aRangeSel[1] = 0-127
  BankName = "Internal flash"
  BankSelMode = 1
  BaseAddr = 0x00000000
[FLASH1]
  aRangeSel[1] = 0
  BankName = "NONMAIN"
  BankSelMode = 1
  BaseAddr = 0x41C00000
[PRODUCTION]
  AutoPerformsDisconnect = 1
  AutoPerformsErase = 1
  AutoPerformsProgram = 1
  AutoPerformsSecure = 0
  AutoPerformsStartApp = 1
  AutoPerformsVerify = 1
  EnableFixedVTref = 0
  EnableTargetPower = 0
  EraseType = 1
  FixedVTref = 0x00000CE4
  MonitorVTref = 0
  MonitorVTrefMax = 0x0000157C
  MonitorVTrefMin = 0x000003E8
  OverrideTimeouts = 0
  ProgramSN = 0
  SerialFile = ""
  SNAddr = 0x00000000
  SNInc = 0x00000001
  SNLen = 0x00000004
  SNListFile = ""
  SNValue = 0x00000001
  StartAppType = 0
  TargetPowerDelay = 0x00000014
  TimeoutErase = 0x00003A98
  TimeoutProgram = 0x00002710
  TimeoutVerify = 0x00002710
  VerifyType = 1
[PERFORMANCE]
  DisableSkipBlankDataOnProgram = 0x00000000
  PerfromBlankCheckPriorEraseChip = 0x00000001
  PerfromBlankCheckPriorEraseSelectedSectors = 0x00000001

我配置的非主设置是(SysConfig 工具自动生成):  

PLACE_IN_MEMORY(".BCRConfig")
const BCR_Config BCRConfig =
{
    .bcrConfigID          = 0x1,
    .debugAccess          = BCR_CFG_DEBUG_ACCESS_EN,
    .swdpMode             = BCR_CFG_SWDP_EN,
    .tifaMode             = BCR_CFG_TIFA_EN,
    .bslPinInvokeEnable   = BCR_CFG_BSL_PIN_INVOKE_EN,
    .passwordDebugLock    = {CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE,
        CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE},
    .fastBootMode         = BCR_CFG_FAST_BOOT_DIS,
    .bootloaderMode       = BCR_CFG_BOOTLOADER_MODE_EN,
    .massEraseMode        = BCR_CFG_MASS_ERASE_EN,
    .factoryResetMode     = BCR_CFG_FACTORY_RESET_EN,
    .passwordMassErase    = {CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE,
        CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE},
    .passwordFactoryReset = {CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE,
        CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE},
    .staticWriteProtectionMainLow  = CFG_DEFAULT_VALUE,
    .staticWriteProtectionMainHigh = CFG_DEFAULT_VALUE,
    .staticWriteProtectionNonMain  = BCR_CFG_NON_MAIN_STATIC_PROT_DIS,
    .secureBootMode                = BCR_CFG_SECURE_BOOT_DIS,
    .userSecureAppStartAddr        = CFG_DEFAULT_VALUE,
    .userSecureAppLength           = CFG_DEFAULT_VALUE,
    .userSecureAppCrc              = CFG_DEFAULT_VALUE,
    .userCfgCRC                    = 0x1879dac3,
};


/* Bootloader configuration */

PLACE_IN_MEMORY(".BSLConfig")
const BSL_Config BSLConfig =
{
    .configID                          = 0x1,
    .interfacePins.UART_RXD_pad_num    = DEF_UART_RXD_PAD,
    .interfacePins.UART_RXD_PF_mux_sel = DEF_UART_RXD_MUX,
    .interfacePins.UART_TXD_pad_num    = DEF_UART_TXD_PAD,
    .interfacePins.UART_TXD_PF_mux_sel = DEF_UART_TXD_MUX,
    .interfacePins.I2C_SDA_pad_num     = DEF_I2C_SDA_PAD,
    .interfacePins.I2C_SDA_PF_mux_sel  = DEF_I2C_SDA_MUX,
    .interfacePins.I2C_SCL_pad_num     = DEF_I2C_SCL_PAD,
    .interfacePins.I2C_SCL_PF_mux_sel  = DEF_I2C_SCL_MUX,
    .pin.pinData0                      = DEFAULT_BSL_PIN_INVOCATION_DATA0,
    .pin.pinData1                      = DEFAULT_BSL_PIN_INVOCATION_DATA1,
    .memoryRead         = BSL_CFG_MEMORY_READOUT_DISABLE,
    .password           = {CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE,
        CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE,
        CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE, CFG_DEFAULT_VALUE},
    .pluginType         = BSL_CFG_PLUGIN_TYPE_ANY,
    .flashPluginEnable  = BSL_CFG_PLUGIN_FLASH_NOT_EXIST,
    .pluginSramSize     = 0xff,
    .pluginHook[0]      = CFG_DEFAULT_VALUE,
    .pluginHook[1]      = CFG_DEFAULT_VALUE,
    .pluginHook[2]      = CFG_DEFAULT_VALUE,
    .pluginHook[3]      = CFG_DEFAULT_VALUE,
    .BSLAlternateConfig = BSL_CFG_FLASH_BSL_NOT_EXIST,
    .reserved           = 0xFFFFU,
    .BSLAlternateAddr   = CFG_DEFAULT_VALUE,
    .appRev             = (uint32_t *) CFG_DEFAULT_VALUE,
    .securityAlert      = BSL_CFG_SECURITY_IGNORE,
    .i2cSlaveAddress    = 0x48,
    .userCfgCRC         = 0xc46912c7,
};

我在采用 MCU 省电模式的两个软件版本和未采用该模式的软件版本中都发现了此问题、因此我可以排除这种可能性

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

    尊敬的 Marc:

    我还通过 CCS v20.1.0.6__1.7.0 + JLink 测试使用 nonmain 的程序、结果似乎很好。  

    我认为 nonmain 数据应该没问题、因为它是由 SysConfig 自动生成的。

    我可以问您对 .jflash 文件进行了哪些修改吗?

    此致、
    Pengfei