Part Number:TMS570LS1227
请教大神指导,我采用TI官方提供的FEE驱动代码对片内的bank7进行操作,再芯片配置时,将bank7划分了24个block出来,每个block是64个字,在每次写block之前,先调用函数TI_Fee_EraseImmediateBlock擦除block,然后在对block进行写操作,但是最近我发现,偶尔会出现擦除操作失败的情况,不知道怎么回事!请高手指点一下,下面是我的写操作代码:
void SysParamWriteBlock(uint16_t uIBlockNumMax)
{
Std_ReturnType Rtn;
if(u32FeeWriteBlockNum < 24U)
{
Rtn = TI_Fee_EraseImmediateBlock(uIFeeWriteBlockNum+1U);
if(E_OK == Rtn)
{
u32EepEreasseFlg = 0U;
}
else
{
u32EepEreasseFlg |= bTrue;
}
wdg_feed(); /*片内看门狗喂狗,看门狗溢出时间为100ms*/
if(eepBlockInforStu[uIFeeWriteBlockNum%24U].blockData != NULL)
{
u32EepromWriteFlg |= eeprom_write_block(uIFeeWriteBlockNum+1U,(uint8_t*)eepBlockInforStu[u32FeeWriteBlockNum%24U].blockData);
}
u32FeeWriteBlockNum++;
}
}
static uint32_t eeprom_write_block(uint16_t blockNum,uint8 *pData)
{
Std_ReturnType oResult=E_NOT_OK;
uint32_t uIResultBit=bFalse;
uint16 Status;
uint32 delay_cnt=0U;
do{
TI_Fee_MainFunction();
eep_delay();
Status=TI_Fee_GetStatus(0U);
delay_cnt++;
}
while((Status!=IDLE) && (delay_cnt < 1000U));
if(Status==IDLE)
{
/* Write the block into EEP aSynchronously. */
oResult = TI_Fee_WriteAsync(blockNum, pData);
}
delay_cnt = 0U;
do{
TI_Fee_MainFunction();
eep_delay();
Status=TI_Fee_GetStatus(0U);
delay_cnt++;
}
while((Status!=IDLE) && (delay_cnt < 1000U));
oResult = TI_Fee_WriteSync(blockNum, pData);
delay_cnt = 0U;
do{
TI_Fee_MainFunction();
eep_delay();
Status=TI_Fee_GetStatus(0U);
delay_cnt++;
}
while((Status!=IDLE) && (delay_cnt < 1000U));
if(oResult==E_OK)
{
uIResultBit = bFalse;
}
else
{
uIResultBit = bTrue;
}
return uIResultBit;
}
急求!谢谢!
user1658391:
跟踪到TI_FeeInternal_CheckModuleState函数返回TI_Fee_GlobalVariables[0].Fee_ModuleState == BUSY_INTERNAL,这是操作太频繁造成的吗?
,
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,TI_Fee_EraseImmediateBlock() 会将Data Block header中的block标记为无效。 不会将该block位置擦除为 0xFFFFFFFF。
此 API 的作用与 TI_Fee_InvalidateBlock() 相同。 此外请注意,应定期调用 TI_Fee_MainFunction 函数以完成操作。