TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS570LS1227: 急求 TMS570LS1227的FEE 偶尔会擦除失败

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 函数以完成操作。

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LS1227: 急求 TMS570LS1227的FEE 偶尔会擦除失败
分享到: 更多 (0)