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.

[参考译文] CCS/TMS320F28377D:仅在 CPU1 zone1上成功进行 DCSM OTP 编程

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/911740/ccs-tms320f28377d-dcsm-otp-programming-only-successfully-on-cpu1-zone1

器件型号:TMS320F28377D

工具/软件: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