This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
void main(void)
{
_mpuDisable_();
_mpuInit_();
_mpuEnable_();
gioInit();
hetInit();
emif_ASYNC1Init();
emif_ASYNC2Init();
emif_ASYNC3Init();
SYS_S_InitRti();/*初始化实时中断*/
/*先清一次狗,下次清就要约1秒了*/
gioSetBit(gioPORTB, 7, 0);
SYS_Delay(100);
gioSetBit(gioPORTB, 7, 1);
LIB_SCI_Init();
UINT8 s_unWriteData = 6; // 初始写入数据
UINT8 iflash_write_data[32] = {0}; //写入的数值
UINT8 s_unReadData[32] = {0}; // 读取数据缓冲区
Fapi_StatusType oReturnCheck = Fapi_Status_Success;
enum e_flash_status state;
while(1)
{
//内部flash读写测试
/*擦除扇区*/
if(s_unWriteData==6)
{
memset(s_unReadData, 0, sizeof(s_unReadData)); // 清空读取数据缓冲区
oReturnCheck = Fapi_initializeFlashBanks(80); //初始化Flash Bank以进行API操作
if ((oReturnCheck == Fapi_Status_Success) && (FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY != Fapi_Status_FsmBusy))
{
Fapi_setActiveFlashBank(Fapi_FlashBank1); //设置活动的Flash Bank
Fapi_enableMainBankSectors(1<<5); //设置EEPROM存储区中可用的扇区以进行擦除和编程
while (FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY == Fapi_Status_FsmBusy){}
Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32_t*)0x002A0000); //向Flash状态机发出命令
while(FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY == Fapi_Status_FsmBusy);
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
// Fapi_flushPipeline(); // **刷新Flash流水线**
memset(iflash_write_data, s_unWriteData, sizeof(iflash_write_data)); // 填充写入数据
oReturnCheck = Fapi_issueProgrammingCommand((uint32_t*)0x002A0000,iflash_write_data,32,0,0,Fapi_AutoEccGeneration); /*Programming data to 8th sector*/
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
// Fapi_flushPipeline(); // **刷新Flash流水线**
Fapi_doMarginRead((UINT8*)(0x002A0000),s_unReadData,32,Fapi_NormalRead);
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
// memcpy(s_unReadData, (UINT8*)(0x002A0000), 32);
s_unWriteData =7;
}
}
if(s_unWriteData ==7)
{
memset(s_unReadData, 0, sizeof(s_unReadData)); // 清空读取数据缓冲区
oReturnCheck = Fapi_initializeFlashBanks(80); //初始化Flash Bank以进行API操作
if ((oReturnCheck == Fapi_Status_Success) && (FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY != Fapi_Status_FsmBusy))
{
Fapi_setActiveFlashBank(Fapi_FlashBank1); //设置活动的Flash Bank
Fapi_enableMainBankSectors(1<<5); //设置EEPROM存储区中可用的扇区以进行擦除和编程
while (FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY == Fapi_Status_FsmBusy){}
Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32_t*)0x002A0000); //向Flash状态机发出命令
// Fapi_flushPipeline(); // **刷新Flash流水线**
while(FLASH_CONTROL_REGISTER->FmStat.FMSTAT_BITS.BUSY == Fapi_Status_FsmBusy);
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
memset(iflash_write_data, s_unWriteData, sizeof(iflash_write_data)); // 填充写入数据
oReturnCheck = Fapi_issueProgrammingCommand((uint32_t*)0x002A0000,iflash_write_data,32,0,0,Fapi_AutoEccGeneration); /*Programming data to 8th sector*/
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
// Fapi_flushPipeline(); // **刷新Flash流水线**
// memcpy(s_unReadData, (UINT8*)(0x002A0000), 32);
Fapi_doMarginRead((UINT8*)(0x002A0000), s_unReadData, 32, Fapi_NormalRead);
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
}
}
while(1){}
}
}
上述代码中,执行第二轮的擦除时,在DEBUG查看时,写入的扇区数据,只擦除了第一轮的没有被读过的地址数据;而被第一轮读过的地址数据,debug复位后,写入的扇区地址,才会显示擦除为FF!
从上述现象判断,实际的硬件已经擦除成功,但是不复位的话,第二轮读出的数据依旧是第一轮写入的数据
4452.测试记录.docx