请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F280025C 您好!
我已经通过 CAN 实现了一个 DFU、其中引导加载程序会检查应用报头是否正确(密钥)。 要启动 DFU、应用应将标头修改为0x0000、这样
引导加载程序注意到、固件需要更新。 我实现了一个小程序来测试是否可以使用 Fapi_issueProgrammingCommand()覆盖某些闪存数据,但覆盖过程总是失败,并显示0x48错误:
/////////////////////////////////////////////////////////////////////////////////////////////////////Reset Flash header
//Init flash first:
initFlashSectors();
EALLOW;
uint16_t miniBuffer1[4] = {0x0000};
uint16_t miniBuffer2[4] = {0x0000};
miniBuffer1[0] = 0x46ab;
miniBuffer1[1] = 0x17c4;
miniBuffer1[2] = 0x1289;
miniBuffer1[3] = 0x3ffe;
//////////////////////////////////////////////////////////////////////////////////////////////////////Write first to flash header
Fapi_issueProgrammingCommand((uint32_t *) 0x0008F000, miniBuffer1,
sizeof(miniBuffer1), 0, 0, Fapi_AutoEccGeneration);
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){};
Fapi_FlashStatusType oFlashStatus = Fapi_getFsmStatus();
//////////////////////////////////////////////////////////////////////////////////////////////////////Write to zero now
Fapi_issueProgrammingCommand((uint32_t *) 0x0008F000, miniBuffer2,
sizeof(miniBuffer2), 0, 0, Fapi_AutoEccGeneration);
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){};
oFlashStatus = Fapi_getFsmStatus();
EDIS;
/////////////////////////////////////////////////////////////////////////////////////////////////////Reset Flash header
if(oFlashStatus) //Error occured
{
while(1)
{
//
// Delay
//
GPIO_togglePin(34);
DEVICE_DELAY_US(1e5);
// GPIO_togglePin(31);
}
}
else
{
while(1) //No error occured
{
//
// Delay
//
GPIO_togglePin(31);
DEVICE_DELAY_US(1e6);
// GPIO_togglePin(31);
}
}
如何在不擦除扇区的情况下修改特定闪存区域的数据(当然是0x0000、否则它将不起作用)?