Part Number: TMS320F280037
Other Parts Discussed in Thread: UNIFLASH
Hi,
I am facing a very strange problem with programming the DCSM OTP locations for TMS320F280037 device. I am using my own code loaded and running from GSRAM and use the FlashAPI for programming. I have experience with earlier TMS320 devices, that programmed value on security locations began active after reset. For TMS320F28003x it seems that programming the ZxOTP_CSMSWDx locations(selected by ZxLINKPOINTERS) cause immediately secured device. That result in fact that after using the FlashAPI
oReturnCheck = Fapi_issueProgrammingCommand(0x78020,Buffer,8,0,0,Fapi_AutoEccGeneration); //the result of this operation is Fapi_Status_Success
I am not able to verify the programmed values by running the
oReturnCheck = Fapi_doVerify(0x78020, 8/2, Buffer32, &oFlashStatusWord);
The returned value of oReturnCheck is always Fapi_Error_Fail. Also the memory browser in CCS after Fapi_issueProgrammingCommand becomes all zeros. It seems that device becomes locked without any reset.
I have checked the status of DCSM after Fapi_issueProgrammingCommand by running code:
oSecureCheck = DCSM_getZone1CSMSecurityStatus();
The oSecureCheck become the value DCSM_STATUS_SECURE.
So now I try to unlock the DCSM by running the code:
//dummy read
DCSM_readZone1CSMPwd();
// driverlib struct for csmKey.
DCSM_CSMPasswordKey psCMDKey;
psCMDKey.csmKey0 = (uint32_t)data[0] | ((uint32_t)data[1] << 16);
psCMDKey.csmKey1 = (uint32_t)data[2] | ((uint32_t)data[3] << 16);
psCMDKey.csmKey2 = (uint32_t)data[4] | ((uint32_t)data[5] << 16);
psCMDKey.csmKey3 = (uint32_t)data[6] | ((uint32_t)data[7] << 16);
// Unlock the zone 1, driverlib.
DCSM_unlockZone1CSM(&psCMDKey);
oSecureCheck = DCSM_getZone1CSMSecurityStatus();
but the oSecureCheck has also the value DCSM_STATUS_SECURE and not the DCSM_STATUS_UNSECURE(i expect this value). I am sure that the csmKey have the correct values.
When I check the programmed data in DCSM using the UniFlash tool, the programmed DCSM memory have correct CSMPSWD values.
The question is: How can I verify the programmed values on CSMPSWD locations?
Thank you for any help.
Best regards,
Tomas

