Other Parts Discussed in Thread: C2000WARE
首先请看下面的 code-1:全局变量声明
#pragma DATA_SECTION(Buffer,"BufferDataSection"); uint16 Buffer[WORDS_IN_FLASH_BUFFER + 1]; uint32 *Buffer32 = (uint32 *)Buffer;
code-2:cmd中的段定义
BufferDataSection : > RAMD1, PAGE = 1, ALIGN(8)
code-3:烧写模块的代码
EALLOW;
for(i=0,j=0;i<BLOCK_WORD;i++)
{
Buffer[i] = (flsInfo.flashData[(i*2)+1]<<8)+(flsInfo.flashData[i*2]);//deal 1024bit DATA,pack 512bit into Buffer
j++;
if(j >= 8)
{
j = 0;
oReturnCheck = Fapi_issueProgrammingCommand((unsigned long *)(flsInfo.flashaddress+i-7),
(unsigned int *)(Buffer+i-7),8, 0, 0, Fapi_AutoEccGeneration);
while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);
if(oReturnCheck != Fapi_Status_Success)
{
// Check Flash API documentation for possible errors
#if 1
ESTOP0;
#endif
break;
}
oFlashStatus = Fapi_getFsmStatus();
if(oFlashStatus != 0)
{
ErrFlag = 1;
#if 1
debugarr[5]++;
//debugarr[6] = oFlashStatus;
ESTOP0;
#endif
break;
}
oReturnCheck = Fapi_doVerify((uint32 *)(flsInfo.flashaddress+i-7),4, (Buffer32+i-7)+((i-7)/2),&oFlashStatusWord);
if(oReturnCheck != Fapi_Status_Success)
{
debugarr[6] = oReturnCheck;
debugarr[7] = 1;
ESTOP0;
break;
}
//SysCtl_serviceWatchdog_28075();
} // if-end
SysCtl_serviceWatchdog_28075();
} // for
EDIS;
遇到的问题:
执行了Fapi_issueProgrammingCommand之后,api没有返回错误,但是在校验的时候提示错误。
错误的位置是0x84000,期望的烧写数据跟实际读到的数据不一致。
实际flash中的数据:

buffer中的数据:

不知道为什么写不进flash中。