跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Blogs
  3. 如何解决Flash被保护后的程序下载问题

如何解决Flash被保护后的程序下载问题

已定时 已固定 已锁定 已移动 Blogs
7 帖子 2 发布者 665 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • houjun_xiaoH 离线
    houjun_xiaoH 离线
    houjun_xiao YunTu
    写于 最后由 houjun_xiao 编辑
    #1

    在YTM32Bx系列MCU中,可通过EFM模块ADDR_PROT寄存器对内部Flash进行写保护,ADDR_PROT寄存器中的每个bit被设置为0时,其对应的Flash区域即被写保护。MCU上电后ADDR_PROT寄存器值仅允许从1变为0,而不允许从0变为1,即MCU允许过程中Flash一旦被写保护,则本次运行期间不能被取消写保护。

    EFM模块中ADDR_PROT寄存器的初始值来自于MCU内部CUS_NVR Flash中指定位置(详见MCU参考手册),用户可根据自身需求通过写CUS_NVR Flash设置该寄存器的默认值,需注意,若该寄存器默认值被设置为0,则MCU上电后对齐的Flash即被写保护,后续将无法通过JTAG或软件内部的Flash driver对被写保护的Flash进行擦除或编程操作。

    此时如果需要解锁被写保护的Flash,则只能通过重置ADDR_PROT寄存器初始值,即擦除重写CUS_NVR Flash中对应位置的值。若MCU内部所有Flash均被写保护,则该MCU无法在向Flash中下载任何程序,此时若需修改ADDR_PROT寄存器初始值,则需新建一个工程用于擦除CUS_NVR Flash,并将该工程所有代码放在RAM中运行.

    下面以YTM32B1MD14为例介绍实现过程:

    1.在YCT工具中新建工程,并配置YT-LINK模块,删除该模块中Flash中配置的所有sector信息,并在RAM中创建.text段以及.rodata段,用于存储代码及const类型数据。
    85fb3330-3100-4864-9c0c-4c98873fe6bc-image.png

    2.在main.c中通过如下代码实现CUS_NVR擦除。

    uint32_t TestCnt=5;
    void Test_CusterNvrErase(void)
    {
        EFM->CUS_KEY = 0x4dff32;
        EFM->CMD = 0U;
        EFM->STS = EFM_STS_FAIL_MASK |
                    EFM_STS_ACCERR_MASK |
                    EFM_STS_UNRECOVERR_MASK |
                    EFM_STS_RECOVERR_MASK |
                    EFM_STS_DONE_MASK;
        EFM->NVR_ADDR = 0x10000400U;
        EFM->CMD_UNLOCK = 0xfd9573f5;
        EFM->CMD = 0x41U;
        while ((EFM->STS & EFM_STS_DONE_MASK) == 0U) 
        {
        }
    
        if(((EFM->STS&EFM_STS_ACCERR_MASK) != 0)||((EFM->STS&EFM_STS_FAIL_MASK) != 0))
        {
            while(1)
            {}
        }
    }
    /* USER CODE END 0 */
    
    
    /**
     * @brief  The application entry point.
     * @retval int
     */
    int main(void)
    {
        /* USER CODE BEGIN 1 */
        /* USER CODE END 1 */ 
        Board_Init();
        /* USER CODE BEGIN 2 */
        Test_CusterNvrErase();
        /* USER CODE END 2 */
    
        /* Infinite loop */
        /* USER CODE BEGIN WHILE */
        while (1)
        {
            TestCnt++;
            if(TestCnt>1000)
            {
                TestCnt = 0;
            }
            /* USER CODE END WHILE */
            /* USER CODE BEGIN 3 */
        }
        /* USER CODE END 3 */
    }
    
    static void Board_Init(void)
    {
    }
    
    
    1. 通过调试工具将代码下载至MCU运行,然后reset MCU即可完成Flash写保护解锁。

    4.注意示例代码中写入的CUS_KEY为MCU默认值,若MCU CUS_KEY被修改,则需根据实际情况写入KEY值。
    Erase_CUSNVR.zip

    1 条回复 最后回复
    1
    • BJXB 离线
      BJXB 离线
      BJX
      编写于 最后由 编辑
      #2

      你好 有没有B1HA01的示例

      1 条回复 最后回复
      0
      • houjun_xiaoH 离线
        houjun_xiaoH 离线
        houjun_xiao YunTu
        编写于 最后由 编辑
        #3

        目前没有专门针对每款芯片做示例,操作的方式是原理都是一样的,可以直接参考这个示例做。

        BJXB 1 条回复 最后回复
        0
        • BJXB 离线
          BJXB 离线
          BJX
          回复了houjun_xiao 最后由 编辑
          #4

          houjun_xiao 请问,打开这个工程报如下错误怎么解决
          19a8f720-1e7d-4a3d-b008-ad64a9ec1322-QQ_1763602634173.png

          1 条回复 最后回复
          0
          • houjun_xiaoH 离线
            houjun_xiaoH 离线
            houjun_xiao YunTu
            编写于 最后由 编辑
            #5

            Erase_CUSNVR.zip你试一试,这个是基于SDK 1.4.0的

            BJXB 1 条回复 最后回复
            0
            • BJXB 离线
              BJXB 离线
              BJX
              回复了houjun_xiao 最后由 编辑
              #6

              houjun_xiao 好的,可以打开了,但HA01的 EFM_Type 没有 NVR_ADDR ,
              代码里的 EFM->NVR_ADDR = 0x10000400U; 要怎么替换
              3bb39ebe-a3ed-40cb-9794-1f0b87b62ab3-QQ_1763604478637.png

              1 条回复 最后回复
              0
              • houjun_xiaoH 离线
                houjun_xiaoH 离线
                houjun_xiao YunTu
                编写于 最后由 编辑
                #7

                直接对目的地址赋值即可,例如*((uint32_t *))0x10000400)=0;
                需要注意HA0的FLASH存在WE控制位,在赋值前先将CTRL寄存器中的WE位置1
                image.png

                1 条回复 最后回复
                0

              • 云途开发生态介绍

                快速上手云途开发生态

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YT CONFIG TOOL调查问卷

                帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

              • can
                19
                demo
                19
                uds
                13
                lin stack
                10
                md14
                6
                fbl
                5
                yt-link
                5
                adc模块
                4
                Online Users
                SBH_HZNS
                SBH_HZN
                swordsS
                swords
                jiankang_wangJ
                jiankang_wang
                guangnanG
                guangnan
                runR
                run
                LlllllL
                Llllll
                EkkoE
                Ekko
                DerrickD
                Derrick
                yifeng_xieY
                yifeng_xie
                hanxiaofeiH
                hanxiaofei
                FrankieF
                Frankie
                • 登录

                • 登录或注册以进行搜索。
                • 第一个帖子
                  最后一个帖子
                0
                • 版块
                • 最新
                • 标签
                • 热门