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.

[参考译文] MSPM0G3107:通过 MCU 应用代码手动启用 MSPM0G3107 读取保护

Guru**** 2524550 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1528301/mspm0g3107-manually-enable-mspm0g3107-readout-protection-from-mcu-application-code

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

工具/软件:

您好:  

我正在尝试   在生产器件上启用读出保护功能、但需要一些指导。

我没有找到正式的任何 API 来做到这一点,所以我尝试生成 OTP 区域配置

并手动将其写入闪存。  

问题似乎是我们已经在 BCR 和 BSL 区域中写入了一些默认配置。

我只想修改 BCR 配置、并编写一个新配置。 似乎可能的是删除整个

扇区并写入一个新扇区、我看到它不会返回任何错误。 但当我尝试读取这些数据时

 指针可提供 NMI。 因此、我不确定它是否可行。 有人能给出一些建议吗  

从 MCU 上执行此操作可能有什么问题或不可能?

如果无法手动完成此操作、则需要使用原始映像和我们的一些器件刷写此配置

不会启用此保护。

谢谢你。

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

    尊敬的 Mykolat:

    [报价 userid=“594130" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1528301/mspm0g3107-manually-enable-mspm0g3107-readout-protection-from-mcu-application-code

    但当我尝试读取这些数据时

     指针可提供 NMI。

    [/报价]

    请检查什么触发了 NMI? 您可以找到触发源:

    以及您读取的地址在哪里?

    B.R.

    Sal

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

    顺便说一下、您想要使用什么读数功能? 您能在此处展示如何配置 NVM 吗?

    B.R.

    Sal

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

    您好感谢您的答复。 我可以更准确地检查是什么触发它明天,并在这里回复。

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

    下面是我 尝试执行的操作的片段:  

    //由 SysConfig 生成的结构具有一些调试端口限制
    extern const BCRConfig;
    extern const BSL_Config BSLConfig;

    #define BCR_CONFIG_ADDR 0x41C00000

    BCR_Config BCR_READ ={0};
    memcpy (&BCR_read、(uint8_t*) BCR_CONFIG_ADDR、sizeof (BCR_Config));

    if (memcmp (&BCRConfig、&BCR_read、sizeof (BCR_Config))== 0){
    Log_DBG(“BCRConfig Matches“);
    返回;
    }

    //在这一点上、我确信 BCR 配置不是 应该的配置、所以我尝试修改它

    DL_FlashCTL_unprotectSector (FLASHCTL、BCR_CONFIG_ADDR、FLASHCTL_CMDCTL_REGIONSEL_NONMAIN);

    if(!DL_FlashCTL_waitForCmdDone (FLASHCTL)){
    Log_DBG(“Unprotect sector error“);
    返回;
    }


    DL_FlashCTL_eraseMemory (FLASHCTL、BCR_CONFIG_ADDR、FLASHCTL_CMDTYPE_SIZE_SECTOR);

    if(!DL_FlashCTL_waitForCmdDone (FLASHCTL)){
    Log_DBG (“扇区擦除错误“);
    返回;
    }

    RET = DL_FlashCTL_programMemoryBlocking (FLASHCTL、BSL_CONFIG_ADDR、(uint32_t *)&BCRConfig、sizeof (BSL_Config)、FLASHCTL_CMDCTL_REGIONSEL_NONMAIN);

    Log_DBG(“闪存程序 ret:%d“、ret);

    此时、我期望 BCR 数据会更新。 因此、我使用与之前相同的命令继续检查:  

    if (memcmp (&BCRConfig、(uint8_t*) BCR_CONFIG_ADDR、sizeof (BCR_Config))== 0){
    Log_DBG(“BCRConfig Matches“);
    返回;
    }

    但是、这一次尝试访问  BCR_CONFIG_ADDR 区域中的数据会触发 NMI(我怀疑是总线错误或闪存错误)。

    我也会对 BSL 重复相同的操作并保护扇区、只是我因为在错误处理程序中而没有进入这里。

    我不确定这种做法是否有效。 文档中不清楚是否允许执行此类操作。

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

    以下是配置 themselfs:


    const BCRConfig =

    .bcrConfigID = 0x1、
    .debugAccess = BCR_CFG_DEBUG_ACCESS_DIS、
    swdpMode = BCR_CFG_SWDP_EN
    .tifaMode = BCR_CFG_TIFA_DIS、
    .bslPinInvokeEnable = BCR_CFG_BSL_PIN_INVOCK_DIS、
    .passwordDebugLock ={CFG_default_value、CFG_default_value、
    CFG_DEFAULT_VALUE、CFG_DEFAULT_VALUE}、
    .fastBootMode = BCR_CFG_FAST_BOOT_DIS、
    .bootloaderMode = BCR_CFG_bootloader_mode_DIS、
    .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 = 0xc629ebd0、
    };

    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_INCTION_DATA0、
    pin.pinDATA1 = DEFAULT_BSL_PIN_UNCTION_DATA1、
    MemoryRead = BSL_CFG_MEMORY_READY_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_EXBOSE、
    .reserved = 0xFFFF、
    BSLAlternateAddr = CFG_DEFAULT_VALUE、
    .appRev =(uint32_t *) CFG_DEFAULT_VALUE、
    .securityAlert = BSL_CFG_SECURITY_IGNORE、
    i2cSlaveAddress = 0x48、
    .userCfgCRC = 0xF7df416、
    };

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

    尊敬的 Mykolat:

    我将在本周晚些时候检查您的配置。

    您触发了什么 NMI?

    B.R.

    Sal

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

    很抱歉晚才回复。 这是一个繁忙的时期。 我发现有一个有关如何写入 NONMAIN 闪存的 TI 示例、我的操作几乎与我相同、但有很少的不同。 我刚刚复制了它、它是有效的、所以我们可以将这个问题标记为已解决。