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
就会闪烁, 我们就知道擦除完成了
上面有三行注释代码, 从MPC5744 烧录一直停留在 98% 的解决方法拷贝出来是报错的, 直接注释掉发现也能用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; }
- led闪烁说明完成了, 这时下别的工程到flash就没问题了
本文含有隐藏内容,请 开通VIP 后查看