This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28388D:使用 FLASH_API 时 CPU1和 CPU2之间的差异

Guru**** 2522770 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1292519/tms320f28388d-difference-between-cpu1-and-cpu2-when-using-flash_api

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

大家好、

使用 FLASH_API 时 CPU1和 CPU2之间的区别是什么?

CPU1的代码(可以执行擦除操作):

SeizeFlashPump();
EALLOW;
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, 200);

if(oReturnCheck != Fapi_Status_Success)
{
//Example_Error(oReturnCheck);
return false;
}
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
if(oReturnCheck != Fapi_Status_Success)
{
return false;
}
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,
(uint32 *)Bzero_SectorD_start);

while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}


oReturnCheck = Fapi_doBlankCheck((uint32 *)Bzero_SectorD_start,
Bzero_16KSector_u32length,
&oFlashStatusWord);

if(oReturnCheck != Fapi_Status_Success)
{

// Example_Error(oReturnCheck);
return false;
}

for(i=0;i<4;i++)
{
Buffer[i*2] = mflagWord;
Buffer[i*2 + 1] = cpu_selected;
}



for(i=0, u32Index = Bzero_SectorD_start;
(u32Index < (Bzero_SectorD_start + 8)) &&
(oReturnCheck == Fapi_Status_Success); i+= 8, u32Index+= 8)
{
oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer,
8,
0,
0,
Fapi_AutoEccGeneration);

while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);

if(oReturnCheck != Fapi_Status_Success)
{
// Example_Error(oReturnCheck);
return false;
}

oFlashStatus = Fapi_getFsmStatus();
// oReturnCheck = Fapi_doMarginRead((uint32 *)u32Index,debug32buf+(i/2),4, Fapi_NormalRead);

if(oReturnCheck != Fapi_Status_Success)
{
// Example_Error(oReturnCheck);
return false;
}

}
EDIS;
ReleaseFlashPump();
return true;

CPU2的代码(It 无法 执行擦除操作):

CPU2SeizeFlashPump();
EALLOW;
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, 200);

if(oReturnCheck != Fapi_Status_Success)
{
//Example_Error(oReturnCheck);
return false;
}
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
if(oReturnCheck != Fapi_Status_Success)
{
return false;
}
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,
(uint32 *)Bzero_SectorD_start);

while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}


oReturnCheck = Fapi_doBlankCheck((uint32 *)Bzero_SectorD_start,
Bzero_16KSector_u32length,
&oFlashStatusWord);

if(oReturnCheck != Fapi_Status_Success)
{

// Example_Error(oReturnCheck);
return false;
}

for(i=0;i<4;i++)
{
Buffer[i*2] = mflagWord;
Buffer[i*2 + 1] = cpu_selected;
}



for(i=0, u32Index = Bzero_SectorD_start;
(u32Index < (Bzero_SectorD_start + 8)) &&
(oReturnCheck == Fapi_Status_Success); i+= 8, u32Index+= 8)
{
oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer,
8,
0,
0,
Fapi_AutoEccGeneration);

while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);

if(oReturnCheck != Fapi_Status_Success)
{
// Example_Error(oReturnCheck);
return false;
}

oFlashStatus = Fapi_getFsmStatus();
// oReturnCheck = Fapi_doMarginRead((uint32 *)u32Index,debug32buf+(i/2),4, Fapi_NormalRead);

if(oReturnCheck != Fapi_Status_Success)
{
// Example_Error(oReturnCheck);
return false;
}

}
EDIS;
CPU2ReleaseFlashPump();
return true;

--

谢谢、此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,耶鲁,

    您是否尝试过 C2000Ware (C2000Ware_5_00_00_00\driverlib\f2838x\examples\c28x\flash\flashapi_ex1_programming.c)中提供的示例?

    对于 CPU2、用户需要添加用 CPU2替换"Predefined Symbols"中的 CPU1。

    请尝试一下、让我们知道情况如何。

    谢谢。此致、
    瓦姆西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,耶鲁,

    您是否需要有关此方面的任何进一步支持?  或者我可以关闭该帖子吗?

    谢谢。此致、
    瓦姆西