【MPC5744P】S32DS烧录到98%无法继续下载程序

发布于:2023-02-14 ⋅ 阅读:(714) ⋅ 点赞:(0)

mpc5744p烧录到98%无法继续下载程序

ref :MPC5744 烧录一直停留在 98% 的解决方法

突然debug无法下载程序, 表现为右下角进度卡在98%, Console窗口信息如下

...
Loading programming algorithm ...
 
WARNING - Selected .PCP file has been modified. CRC16 = $5A63
Done.
CMD>VC
Verifying object file CRC-16 to device ranges ...
   block 00FA0000-00FA0007 ...
Ok.
   block 00FA0010-00FA0017 ...
Ok.
   block 01000000-0100026D ...

但这时烧录到RAM是没有问题的, 应该是flash有点问题

解决步骤

  • 从历程新建一个工程hello_world_mpc5744p, 编译测试烧录到ram没有问题
  • components添加flash_c55, 生成代码
  • 参考MPC5744 烧录一直停留在 98% 的解决方法
  • 添加代码到led初始化前面, 这样擦除完了led就会闪烁, 我们就知道擦除完成了
    status_t ret = STATUS_SUCCESS;    // 操作状态变量
    uint32_t buffer[1024];             // 缓存数组
    flash_block_select_t blockSelect; // 块选择
    flash_state_t opResult;
    // 禁用缓存 
    //DisableFlashControllerCache(FLASH_PFCR1, FLASH_FMC_BFEN_MASK, &pflash_pfcr1);
    //DisableFlashControllerCache(FLASH_PFCR2, FLASH_FMC_BFEN_MASK, &pflash_pfcr2);
    // 初始化 Flash
    ret = FLASH_DRV_Init();
    DEV_ASSERT(ret == STATUS_SUCCESS);
    // 不对 UTEST 块进行操作 ,直接上锁
    ret = FLASH_DRV_SetLock(C55_BLOCK_UTEST, 0x1U);
    if (STATUS_SUCCESS != ret)
    {
            return ret;
    }
    // 对要擦除的块解锁
    ret = FLASH_DRV_SetLock(C55_BLOCK_LOW, 0x00);
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    ret = FLASH_DRV_SetLock(C55_BLOCK_MID, 0x00);
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    ret = FLASH_DRV_SetLock(C55_BLOCK_HIGH, 0x00);
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    ret = FLASH_DRV_SetLock(C55_BLOCK_256K_FIRST, 0x00);
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    ret = FLASH_DRV_SetLock(C55_BLOCK_256K_SECOND, 0x00);
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    // 选择要擦除的块 
    // Low address space 是分区 0 和 1 ,共 4 块
    blockSelect.lowBlockSelect = 0xFU; 
    // Mid address space 是分区 2 和 3 ,共 2 块
    blockSelect.midBlockSelect = 0x2U; 
    // High address space 是分区 4 和 5 ,共 6 块
    blockSelect.highBlockSelect = 0x3FU;
    // 256KB address space 是分区 6 和 7 ,共 8 块
    blockSelect.first256KBlockSelect = 0xFFU;
    blockSelect.second256KBlockSelect = 0x0U;
    //g_usrCnt = 0U;
    // 进行擦除操作 
    ret = FLASH_DRV_Erase(ERS_OPT_MAIN_SPACE, &blockSelect);
    // 擦除指令操作成功 ,等待擦除完成
    if (STATUS_SUCCESS == ret)
    {
        // 直到退出擦除正在进行才可以退出此循环
        do
        {
            // 检查此时 falsh 的擦除状态
            ret = FLASH_DRV_CheckEraseStatus(&opResult);
        }while(ret == STATUS_FLASH_INPROGRESS);
    }
    if (STATUS_SUCCESS != ret)
    {
        return ret;
    }
    
    上面有三行注释代码, 从MPC5744 烧录一直停留在 98% 的解决方法拷贝出来是报错的, 直接注释掉发现也能用
  • led闪烁说明完成了, 这时下别的工程到flash就没问题了
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到