主题中讨论的其他器件: UNIFLASH
您好!
我在为 TMS320F280037器件对 DCSM OTP 位置进行编程时遇到了一个非常奇怪的问题。 我正在使用我自己加载的代码并从 GSRAM 运行、同时使用 FlashAPI 进行编程。 我对较早的 TMS320器件有经验、认为安全位置上的编程值在复位后开始有效。 对于 TMS320F28003x、对 ZxOTP_CSMSWDx 位置( 由 ZxLINKPOINTERS 选择) 进行编程似乎会立即保护器件。 这实际上、在使用闪存 API 之后、
oReturnCheck = Fapi_issueProgrammingCommand (0x78020、Buffer、8、0、0、Fapi_Auto EccGeneration); //此操作的结果是 Fapi_Status_Success
我无法通过运行
oReturnCheck = Fapi_doVerify (0x78020、8/2、Buffer32、&oFlashStatusWord);
oReturnCheck 的返回值 始终为 Fapi_Error_Fail。 此外、在 Fapi_issueProgrammingCommand 之后、CCS 中的存储器浏览器也全部为零。 器件似乎在没有任何复位的情况下被锁定。
我已经 通过运行以下代码来检查 Fapi_issueProgrammingCommand 之后的 DCSM 状态:
oSecureCheck = DCSM_getZone1CSMSecurityStatus();
oSecureCheck 成为值 DCSM_STATUS_SECURE。
现在、我尝试通过运行以下代码来解锁 DCSM:
//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();
但是 oSecureCheck 的 值也是 DCSM_STATUS_SECURE、而不是 DCSM_STATUS_UNSECURE (我期望是这个值)。 我确信 csmKey 具有正确的值。
当我使用 UniFlash 工具检查 DCSM 中的编程数据时、编程的 DCSM 存储器具有正确的 CSMPSWD 值。
问题是:如何验证 CSMPSWD 位置上的编程值?
感谢您的任何帮助。
此致、
托马斯

