主题:controlSUITE中讨论的其他部件
我正在尝试使用闪存API功能擦除M3闪存(扇区L)的其中一个扇区。 我已遵循闪存API应用程序说明中建议的所有必要步骤,并使用了控制套件示例中使用的相同F021库和函数集。
当软件执行通过 Fapi_issue3cCommandWithAddress(Fapi_EraseSector,(UINT32 *)Bzero_SectorL_start)并在这之后通过While条件时,我尤其会遇到挑战。 当我观察扇区L的内存浏览器时,我没有看到它被刷新,但它仍然保留相同的代码。
下面是我在尝试擦除扇区时观察到的一些屏幕截图。
这里是我调用来执行一些闪存操作的功能。
#pragma code_section (CallFlashAPI,"ramfuncs");
布尔CallFlashAPI (无效)
{
UINT32 u32索引= 0;
UINT16 I = 0;
FAPI_StatusType oReturnCheck;
Volatile Fapi_LibraryInfoType oLibInfo;
Volatile Fapi_FlashStatusType oFlashStatus;
FAPI_FlashBankSectorsType oFlashBankSecors;
FAPI_FlashStatusWordType oFlashStatusWord;
//此函数是初始化基于系统的Flash API所必需的
//执行任何其他Flash API操作之前的频率
#IF CPU_FRQ_125MHz
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BACK_ADDRESS,125);
#endif
#IF CPU_FRQ_100MHz
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BACK_ADDRESS,100);
#endif
#IF CPU_FRQ_75MHz
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BACK_ADDRESS,75);
#endif
#IF CPU_FRQ_60MHz
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BACK_ADDRESS,60);
#endif
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
错误(oReturnCheck);
}
// Fapi_getLibraryInfo函数可用于获取信息
//特定于API库的编译版本
oLibInfo = Fapi_getLibraryInfo();
// Fapi_setActiveFlashBank函数设置闪存库和FMC
//用于在银行上执行进一步的闪存操作
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
错误(oReturnCheck);
}
// Fapi_getBankSecors函数返回银行的起始地址,
//部门数量,部门规模和银行技术类型
//以上信息以类型为的结构oFlashBankSecors返回
// Fapi_FlashBankSectorsType
oReturnCheck = Fapi_getBankSecors(Fapi_FlashBank0,&oFlashSecBankectors);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
错误(oReturnCheck);
}
//擦除扇区L
//扇区N具有示例代码,因此请保持编程状态
oReturnCheck = Fapi_issue3cCommandWithAddress(Fapi_EraseSector,
(UINT32 *) Bzero_SectorL_start);
//等待FSM完成擦除扇区操作
while (Fapi_checkFsmForReady()!= Fapi_Status_FsmReady){}
//验证扇区L是否被擦除。 “擦除”步骤本身执行验证
//。 此验证是可以执行的第二次验证。
oReturnCheck = Fapi_doBlankCheck((UINT32 *) Bzero_SectorL_start,
/*Bzero_32KSector_u32length*/420,
&oFlashStatusWord);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
//如果Erase命令失败,请使用Fapi_getFsmStatus()函数获取
// fmstat寄存器内容
//查看是否有任何EV位,ESUSP位,Cstat位或VOLTSTAT
//位已设置(有关详细信息,请参阅API文档)
错误(oReturnCheck);
}
//擦除扇区K
//扇区N具有示例代码,因此请保持编程状态
oReturnCheck = Fapi_issue3cCommandWithAddress(Fapi_EraseSector,
(UINT32 *) Bzero_SectorK_start);
//等待FSM完成擦除扇区操作
while (Fapi_checkFsmForReady()!= Fapi_Status_FsmReady){}
//验证SectorK是否已擦除。 “擦除”步骤本身执行身份验证
//开始了。 此验证是可以执行的第二次验证。
oReturnCheck = Fapi_doBlankCheck((UINT32 *) Bzero_SectorK_start,
Bzero_16KSector_u32length,
&oFlashStatusWord);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
//如果Erase命令失败,请使用Fapi_getFsmStatus()函数获取
// fmstat寄存器内容
//查看是否有任何EV位,ESUSP位,Cstat位或VOLTSTAT位
//设置(有关详细信息,请参阅API文档)
错误(oReturnCheck);
}
//示例:将闪存扇区K中的0xFF字节与自动生成的ECC一起编程
//在这种情况下,只需用数据填充缓冲区,即可编程到闪存中。
对于(i=0;i<=bytes_in_flash_buffer;i++)
{
缓冲区[i]= i;
}
//示例:在闪存扇区K中对0xFF字节进行编程,不带ECC
//禁用ECC,以便在读取闪存时不生成错误
//不带ECC的内容
HWREG (FLASH_ERROR_BASE + FLASHERR_O_ECC_ENABLE)= 0x0;
对于(i=0,u32Index = Bzero_SectorK_start;
(u32Index <(Bzero_SectorK_start + bytes_in_flash_buffer))
&&(oReturnCheck == Fapi_Status_Success);i+=16,u32Index+=16)
{
oReturnCheck = Fapi_issueProgrammingCommand(UINT32 *)u32Index,
Buffer +I,
16岁
0,
0,
FAPI_DataOnly);
while (Fapi_checkFsmForReady()== Fapi_Status_FsmBusy);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
错误(oReturnCheck);
}
//读取fmstat寄存器内容以了解FSM的状态
// program命令进行任何调试
oFlashStatus = Fapi_getFsmStatus();
//验证编程的值。 程序步骤本身进行验证
//。 此验证是可以执行的第二次验证。
oReturnCheck = Fapi_doVerifyByByByByByByByByByte(((uint8 *)u32Index,
16岁
Buffer +I,
&oFlashStatusWord);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
错误(oReturnCheck);
}
}
//擦除扇区K
//扇区N具有示例代码,因此请保持编程状态
oReturnCheck = Fapi_issue3cCommandWithAddress(Fapi_EraseSector,
(UINT32 *) Bzero_SectorK_start);
//等待FSM完成擦除扇区操作
while (Fapi_checkFsmForReady()!= Fapi_Status_FsmReady){}
//验证SectorK是否已擦除。 “擦除”步骤本身执行身份验证
//开始了。 此验证是可以执行的第二次验证。
oReturnCheck = Fapi_doBlankCheck((UINT32 *) Bzero_SectorK_start,
Bzero_16KSector_u32length,
&oFlashStatusWord);
IF (oReturnCheck!= Fapi_Status_Success)
{
//查看Flash API文档以了解可能的错误
//如果Erase命令失败,请使用Fapi_getFsmStatus()函数获取
// fmstat寄存器内容
//查看是否有EV位,ESUSP位,Cstat位或VOLTSTAT位
//已设置(有关详细信息,请参阅API文档)
错误(oReturnCheck);
}
//启用ECC
HWREG (FLASH_ERROR_BASE + FLASHERR_O_ECC_ENABLE)= 0xA;
//保持对泵的控制
FlashLeavePumpe();
返回gTRUE;
}
我还 将M3配置为75MHz频率。
有什么暗示我可能做错了??
谢谢

