大家好、
问题:擦除和烧录闪存 BANK0 BANK1 BANK7 失败、原因是 HAL 代码和 F021库 F021_API_CortexR4_BE_L2FMC_V3D16.lib 生成的驱动程序代码。 但是、根据官方文档中编写的例程、该程序显示擦除和烧毁成功、客户想知道原因是什么? (注:芯片 OSC16M、HCLK:180m)

代码如下:
/*@简要擦除块
*@param[in] oNewFlashBank:块编号
*
*返回:
*
enum e_flash_status Flash_EraseBanks (Fapi_FlashBankType oNewFlashBank)
{
int num = 0;
Fapi_StatusType oReturnCheck = Fapi_Status_Success;
num = find_sector (oNewFlashBank、0);
oReturnCheck = Fapi_initializeFlashBanks (180);//初始化用于 API 操作的闪存组
if ((oReturnCheck = Fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.Busy!= Fapi_Status_FsmBusy))
{
oReturnCheck = Fapi_setActiveFlashBank (oNewFlashBank);//设置活动闪存组
if ((oNewFlashBank == Fapi_FlashBank0)||(oNewFlashBank == Fapi_FlashBank1))
oReturnCheck = fapi_enableMainBankSecitors ( 0xffffffff );//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
否则 if (oNewFlashBank == Fapi_FlashBank7)
oReturnCheck = fapi_enableEpromBankSectors (0xffffffff、0xffffffff);//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
Fapi_issue19 CommandWithAddress (Fapi_EraseBank、gSector_List[num].low_addr);//向闪存状态机发出命令
/*在此处放置特定的示例代码*/
/*等待 FSM 完成*/
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
/*检查 FSM 状态以查看是否没有错误*/
if (flash_control_register->fmstat.u32Register!= 0)
{
/*在此输入错误处理代码*/
返回 FLASH_FAILURE;
}
}
返回 FLASH_RETURN;
}
/*@简要写入扇区数据
*@param[in] oNewFlashBank:块编号
*@param[in] sector:sector number
*@param[in] offset:扇区偏移地址
*@param[in] buff:Data
*@param[in] len:数据长度
*
*返回:
*
enum e_flash_status Flash_WriteData (Fapi_FlashBankType oNewFlashBank、uint32_t 扇区、uint32_t offset、uint8_t * buff、uint32_t len)
{
int num = 0;
Fapi_StatusType oReturnCheck = Fapi_Status_Success;
num = find_sector (oNewFlashBank、sector);
//如果大小写大于扇区大小
if ((offset+len)> gSector _List[num].size)
{
返回 FLASH_FAILURE;
}
oReturnCheck = Fapi_initializeFlashBanks (180);//初始化用于 API 操作的闪存组
if ((oReturnCheck = Fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.Busy!= Fapi_Status_FsmBusy))
{
oReturnCheck = Fapi_setActiveFlashBank (oNewFlashBank);//设置活动闪存组
if ((oNewFlashBank == Fapi_FlashBank0)||(oNewFlashBank == Fapi_FlashBank1))
oReturnCheck = fapi_enableMainBankSecitors ( 0xffffffff );//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
否则 if (oNewFlashBank == Fapi_FlashBank7)
oReturnCheck = fapi_enableEpromBankSectors (0xffffffff、0xffffffff);//设置 EEPROM 存储器中的可用扇区以进行擦除和编程
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
fapi_issueProgrammingCommand (gSecter_List[num].low_addr+offset、buff、len、0、0、0、 Fapi_DataOnly);//设置数据并将程序命令发送到有效的闪存地址
/*在此处放置特定的示例代码*/
/*等待 FSM 完成*/
while (flash_control_register->fmstat.fmstat_bits.busy = fapi_Status_FsmBusy);
/*检查 FSM 状态以查看是否没有错误*/
if (flash_control_register->fmstat.u32Register!= 0)
{
/*在此输入错误处理代码*/
返回 FLASH_FAILURE;
}
}
返回 FLASH_RETURN;
}
您可以帮助检查此案例吗? 谢谢。
此致、
樱桃