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.
工具/软件:Code Composer Studio
您好专家、
我通过 BootROM SCI 使用闪存 API 函数对 TMS320F28377D 闪存和 DCSM OTP 进行编程。 现在 、我 可以成功地对 CPU1闪存和 CPU2闪存进行编程。
但是 、当我测试 DCSM OTP 编程时、 只有 CPU1 zone1 成功。
详细信息:
(1) CPU1 DCSM OTP 区域1
Z1-LINKPOINTER 3 值为0xFFFFFFF1 ( 在测试期间误打电源)
Z1-PSWDLOCK 值为0xFFFFFFF1
Z1-BOOTCTRL 值为0x0B5A
ZoneSelectBlock1 (地址0x78020)
Zx-GRABRAM 的值为0xFFFFFF5555
Zx-GRABSECT 值为0xF55555
Zx-CSMPSWD[0、1、2、3]值是128位密码
其他字为0xFFFF
对这些 DCSM OTP 进行编程是正确的、 回读正常。
(2) CPU1 DCSM OTP zone2 、 CPU2 DCSM OTP zone1、 CPU2 DCSM OTP zone2
在这三个区域中 、我尝试更改 PSWDLOCK 和 GRABRAM 值、 但回读的值都是0xFFFFFFFF。
我使用了标准 API 函数、 Fapi_Status 为返回成功
fapi_issueProgrammingCommand (DstAddr、SrcAddr、8、0、0、Fapi_AutoEccGeneration);
while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy);
oReturnCheck = Fapi_Status_Success
您好!
您已编程 LINKPOINTER3值0xFFFFFFF1 、该值无效。 LINKPOINTER1和 LINKPOINTER2怎么样? 这些值是否正确并保持为默认值0xFFFFF_FFFF?
对于 ZONE2和 CPU2设置、您是否已检查映射文件以确认这些部分是否用于映射文件?
此致、
Vivek Singh
您好、Vivek、
LINKPOINTER1和 LINKPOINTER2保持为默认值0xFFF_FFFF。
我没有使用映射文件来定义闪存和 DCSM OTP。 我 通过 SCI 引导加载程序将程序 API 算法下载到 RAM。 然后将数据发送到 RAM, 并 在 RAM 中运行程序 API 算法。
代码:
u32Index = 0x78000; 对于(k = 0;k < 0x80;k++) { for (i=0;i < 8;i++) { wordData = 0x0000; 字节数据= 0x0000; while (SciaRegs.SCIRXST.bit.RXRDY!= 1){} wordData = SciaRegs.SCIRXBUF.bit.SAR; while (SciaRegs.SCIRXST.bit.RXRDY!= 1){} 字节数据= SciaRegs.SCIRXBUF.bit.SAR; //从 MSB:LSB 中形成 wordcata wordData |=(byteData <<8); Buffer[i]= wordData; } // 如果(k=0x40) //{ // DcsmCommonRegs.FLSEM.ALL = 0xA502; //} if ((k=0x3)||(k=0x43)) { u32Index+= 4; Buffer[0]=缓冲区[4]; Buffer[1]=缓冲区[5]; Buffer[2]=缓冲区[6]; Buffer[3]=缓冲区[7]; oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) u32Index、Buffer、4、0、0、0、 Fapi_AutoEccGeneration); u32Index+= 4; } 其他 { oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) u32Index、Buffer、8、0、0、0、 Fapi_AutoEccGeneration); u32Index+= 8; } // oReturnCheck = fapi_issueProgrammingCommand (((uint32 *) u32Index、Buffer、8、0、0、0、 Fapi_AutoEccGeneration); // oReturnCheck = fapi_issueProgrammingCommand (((uint32 *) u32Index、Buffer、16、0、0、 Fapi_DataOnly); //等待闪存程序操作完成 while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy); if (oReturnCheck!= Fapi_Status_Success) { //检查闪存 API 文档以了解可能的错误 // Example_Error (oReturnCheck); while (!SciaRegs.SCICTL2.bit.TXEMPTY){} SciaRegs.SCITXBUF.bit.TXDT = 0x62; // SciaRegs.SCITXBUF.bit.TXDT = oReturnCheck; } 其他 { while (!SciaRegs.SCICTL2.bit.TXEMPTY){} SciaRegs.SCITXBUF.bit.TXDT = 0x58; } // u32Index+= 8; }
当 u32Index = 0x80000; 连接到闪存时 、没有问题。
您好!
是否有其他建议说明为什么无法在 zone2上成功对 OTP 进行编程?
你好,方
您能否共享 要编程的 CPU1 Zone2安全设置? 此外、如果您可以连接到 CCS 并为 Zone2安全设置(0x78200)提供 CCS 存储器观察视图的快照、这将很有帮助。
此致、
Vivek Singh
你好,方
您是否可以按照上次开机自检中的要求共享安全设置? 如果您已解决问题、请标记为"已解决"。
此致、
Vivek Singh