Other Parts Discussed in Thread: C2000WARE
你好,CPU1使用CANFD传输升级程序,对CPU1和CUP2都进行远程升级,请问有什么样思路可以实现?
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.
你好,CPU1使用CANFD传输升级程序,对CPU1和CUP2都进行远程升级,请问有什么样思路可以实现?
只有CPU1的一次boot支持can。CPU1和CPU2之间通过IPC传输数据。
请看一下TRM的Chapter 5 ROM Code and Peripheral Booting
另外请教一个问题,在cup1使用中FlashApi可以对flash进行擦写操作,但是cpu2使用该方式就没法擦写flash,同样的代码,内部函数中有关CPU1和CPU2选择的部分已经处理了,请问这CUP1和CPU2在擦写FLASH有什么不同吗?
这是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的代码 无法进行擦写FLASH
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;你好,还有个问题,28388D的FLASH_API只提供了Verify的函数,没有读取FLASH的函数,28377D的库函数有这个读取的功能,在388D读取FLASH需要什么样的操作呢?
377D的库函数,这里面有Fapi_doMarginRead 这个读取FLASH的函数
/* Read commands */
extern Fapi_StatusType Fapi_doBlankCheck(
uint32 *pu32StartAddress,
uint32 u32Length,
Fapi_FlashStatusWordType *poFlashStatusWord
);
extern Fapi_StatusType Fapi_doMarginRead(
uint32 *pu32StartAddress,
uint32 *pu32ReadBuffer,
uint32 u32Length,
Fapi_FlashReadMarginModeType oReadMode
);
extern Fapi_StatusType Fapi_doVerify(
uint32 *pu32StartAddress,
uint32 u32Length,
uint32 *pu32CheckValueBuffer,
Fapi_FlashStatusWordType *poFlashStatusWord
);
388D的库函数 ,正好缺少了这个读取的函数
/* Read commands */
extern Fapi_StatusType Fapi_doBlankCheck(
uint32 *pu32StartAddress,
uint32 u32Length,
Fapi_FlashStatusWordType *poFlashStatusWord
);
extern Fapi_StatusType Fapi_doVerify(
uint32 *pu32StartAddress,
uint32 u32Length,
uint32 *pu32CheckValueBuffer,
Fapi_FlashStatusWordType *poFlashStatusWord
);
extern Fapi_StatusType Fapi_doVerifyBy16bits(
uint16 *pu16StartAddress,
uint32 u16Length,
uint16 *pu16CheckValueBuffer,
Fapi_FlashStatusWordType *poFlashStatusWord
);
有没有尝试过C2000ware中的例程?C2000Ware_5_00_00_00\driverlib\f2838x\examples\c28x\flash\flashapi_ex1_programming.c
对于CPU2,需要在Predefined Symbols中将CPU1相关的部分替换为CPU2的。
请看一下TMS320F2838x Flash API Version 1.60.00.00 Reference Guide 3.3 Read Functions