概述:
在TMS320F28379D开发板上调试,软件分为固件和应用,固件部分负责下载和引导应用程序,
Flash分配为:固件计划可以使用区域A~D存储,应用计划可以使用区域E~J存储
情况:固件实际使用了区域A。开始的时候,应用程序仅使用区域E,可以正常擦除,写入。最近,应用程序增加,使用区域E和F后,E擦除失败。
问题:为什么应用只使用区域E时,可以擦除成功,而使用区域EF时,擦除区域E会失败?
代码:
if(SectorPositionFind(nAddress, &nSectorLen,&nSectorPos) == 1)
{
return Fapi_Error_Fail;
}
if(((tFwVar.unSectorBit.all >> nSectorPos)&0x0001) == 0) {
nRetVal = FlashSectorErase(nAddress,nSectorLen); //此处会返回失败
if(nRetVal == Fapi_Status_Success)
{
tFwVar.unSectorBit.all |= (1u<<nSectorPos);
printf("Sector Pos:%d \r\n", nSectorPos);
}
else
{
printf("Failed Sector Pos:%d \r\n", nSectorPos);
return nRetVal;
}
}
Eric Ma:“情况:固件实际使用了区域A。开始的时候,应用程序仅使用区域E,可以正常擦除,写入。最近,应用程序增加,使用区域E和F后,E擦除失败。
问题:为什么应用只使用区域E时,可以擦除成功,而使用区域EF时,擦除区域E会失败?”
Eric:
其实你可以先在TI的例程先测试一下,用例程都是可以擦出EF的,你按照例程的擦除函数去做。
另外有一点要注意的是,注意关掉中断。还有所有的FLASH 操作都要运行在RAM中。
Flash API library directory path:
~\controlSUITE\device_support\F2837xD\<latest_version>\F2837xD_common\lib
Flash API headers directory path:
~\controlSUITE\device_support\F2837xD\<latest_version>\F2837xD_common\include\FlashAPI