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.

[参考译文] TMS320F28379D:如何正确实施 DCSM

Guru**** 2606375 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm

器件型号:TMS320F28379D
主题中讨论的其他器件:LAUNCHXL-F28379DSysConfig

您好!

我目前正在尝试在 LAUNCHXL-F28379D 上实现 DCSM。 我已经学习了文档和示例项目 blinky_us_dcsm_cpu01。  

由于示例工程除了默认段结构(DCSM_Z1_ZoneSelectBlock.asm)和链接器命令文件(2837xD_DCSM_lnk_CPU1.cmd)之外、不能清晰地实现 DCSM 功能、我有点困惑。  

我在项目中添加了 dcsm.c 和 dcsm.h 来使用解锁功能。 唯一让我感到困惑 的是 DCSM_Z1_ZoneSelectBlock.asm。 我不确定哪些值是必需的、需要我配置、以及我需要在其中放置哪些值。

我知道   密码使用 Z1-CSMPSWD0 - Z1-CSMPSWD3与  CSMKEY 进行比较

 Z1-PSWDLOCK 用于保护  OTP 中的区域。

但我不确定 Z1-LINKPOINTER1 - Z1-LINKPOINTER3用于 Z1-BOOTCTRL、 Z1-EXEONLYRAM、Z1-EXEONLYSECT、 Z1-GRABRAM、Z1-GRABSECT。  

它们是 DCSM 工作所必需的还是只是可选的?  

锁定闪存所需的最低配置是什么?

非常感谢!

MAKS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    MAKS、

      您可以在 TRM 本身中找到答案:

    [引用 userid="495160" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm "]我不确定 Z1-LINKPOINTER1 - Z1-LINKPOINTER3用于[/QUERP]

    根据在 两个 CPU 子系统的每个区域的 OTP 中编程的三个29位链路指针(Zx-LINKPOINTERx)的值来确定 OTP 中区域选择区域的位置。 由于 OTP 无法擦除/重新编程、因此每次您需要更新密码或更改安全资源分配时、我们都需要使用不同的区域选择块。 LinkPointers 有助于跟踪新区域选择块的位置。 在 OTP 中、您只能使1变为0、而不能使另一个舍入。 如果对密码或安全资源的分配进行了更改、用户必须更新区域选择块以及链接指针。

     SPRUHM8I 的第414页介绍了 Z1-BOOTCTRL。 您提到的所有其他寄存器在同一节(3.5.15)中进行了说明

    [引用 userid="495160" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm ]DCSM 是否必须使用它们,还是它们只是可选的?  [/报价]

    如果您未在 OTP 中配置这些值、则将使用默认值。 对于 GRABRAM 和 GRABSECT、这会导致资源不安全。 同样、将为闪存扇区和 RAM 块禁用只执行保护。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Hareesh、

    我 配置了 DCSM_Z1_ZoneSelectBlock.asm、如下所示:

          .sect "dcsm_otp_z1_linkpointer"
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER1
        .long 0xFFFFFFFF     ;Reserved
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER2
        .long 0xFFFFFFFF     ;Reserved
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER3
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_pswdlock"
        .long 0xFFFF1111     ;Z1-PSWDLOCK
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_crclock"
        .long 0xFFFFFFFF     ;Z1-CRCLOCK
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_bootctrl"
        .long 0xFFFFFFFF     ;Reserved
        .long 0xFFFFFFFF     ;Z1-BOOTCTRL
    
          .sect "dcsm_zsel_z1"
    
        .long 0xFFFFFFFF      ;Z1-EXEONLYRAM
        .long 0xFFFFFFFF      ;Z1-EXEONLYSECT
        .long 0xFFFFFFFA      ;Z1-GRABRAM 		secure LS0 RAM and LS1 RAM
        .long 0xFFFFFFFA      ;Z1-GRABSECT 		secure Flash A and Flash B
    
        .long 0x11111111      ;Z1-CSMPSWD0 (LSW of 128-bit password)
        .long 0x22222222      ;Z1-CSMPSWD1
        .long 0x33333333      ;Z1-CSMPSWD2
        .long 0x44444444      ;Z1-CSMPSWD3 (MSW of 128-bit password)
    

    我还删除 了链接器命令文件中的 type = DSECT。

    我对这条警告仍然有点困惑:

    ; ******************************WARNING***************************************
    ; It is recommended not to program 0xFFFFFFFF to user OTP locations, if users
    ; intend to comeback and re-program any of the bits to '0' in future. If user
    ; programs 0xFFFFFFFF to any of the OTP locations then the ECC locations would
    ; get programmed to a non erased state and users won't be able to comeback
    ; and re-program the OTP location to another value. Please refer to DCSM
    ; chapter of device TRM for more details on ECC for the locations in DCSM.


    我为我的目的进行了最小配置、这意味着我在0xFFFFFFFF 上保留了一些值。 是否最好不要对它们进行配置并将它们保留在复位值上?

    这是否也意味着我在刷写一次后无法配置它们?

    在 TRM 的 DCSM 一章中、我没有找到任何有关 ECC 的信息

    非常感谢!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我来了解一下您的价值观、然后进行评估。

    [引用 userid="495160" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm/3893970 #3893970"]这是否意味着我在刷写一次后无法配置它们?

    不可以、您将能够在写入后进行更改。 这样您就不会对同一位置进行更改。 请记住、您无法擦除/重新编程 OTP。

    [引用 userid="495160" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm/3893970 #3893970"]我在 TRM

    在闪存章节中对此进行了说明。 请参阅 SPRUHM8I 中的第113、137、140-150页

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh、  

    很抱歉、我需要再次打扰您。  

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm/3894528 #3894528">不可以,您将能够在编写后进行更改。 这样您就不会对同一位置进行更改。 请记住、您无法擦除/重新编程 OTP。

    我知道它不可重编程、但我不理解关于不应将0xFFFFFFFF 值编程到 OTP 任何位置的警告。 如果我不想配置它们并保留默认值、该怎么办? 我是否只是将它们保留为注释、以便它们不会被编程?  

    我还在做了一些研究后更新了我的代码、并实现了等待引导模式、因为我希望使用调试探针访问 MCU。

          .sect "dcsm_otp_z1_linkpointer"
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER1
        .long 0xFFFFFFFF     ;Reserved
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER2
        .long 0xFFFFFFFF     ;Reserved
        .long 0x1FFFFFFF     ;Z1-LINKPOINTER3
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_pswdlock"
        .long 0xFFFF1111     ;Z1-PSWDLOCK
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_crclock"
        .long 0xFFFFFFFF     ;Z1-CRCLOCK
        .long 0xFFFFFFFF     ;Reserved
    
          .sect "dcsm_otp_z1_bootctrl"
        .long 0xFFFFFFFF     ;Reserved
        .long 0xFFFF025A     ;Z1-BOOTCTRL 		wait boot mode
    
          .sect "dcsm_zsel_z1"
    
        .long 0xFFFFFFFF      ;Z1-EXEONLYRAM
        .long 0xFFFFFFFF      ;Z1-EXEONLYSECT
        .long 0xFFFFFFFA      ;Z1-GRABRAM 		secure LS0 RAM and LS1 RAM
        .long 0xFFFFFFFA      ;Z1-GRABSECT 		secure Flash A and Flash B
    
        .long 0x11111111      ;Z1-CSMPSWD0 (LSW of 128-bit password)
        .long 0x22222222      ;Z1-CSMPSWD1
        .long 0x33333333      ;Z1-CSMPSWD2
        .long 0x44444444      ;Z1-CSMPSWD3 (MSW of 128-bit password)
     

    下面介绍我要实现的目标:

    • 使用链接指针选择的第一个区域选择块
    • 锁定 OTP 中的密码位置
    • CRCLOCK 为默认值
    • 引导模式为等待引导模式、因此我可以使用调试探针连接到 MCU
    • “只执行”功能为默认值
    • LS0和 LS1 RAM 受保护  
    • 闪存 A 和闪存 B 是安全的
    • 如图所示、128位密码已设置

    谢谢!

    MAKS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="495160" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052114/tms320f28379d-how-to-properly-implement-dcsm/3895526 #3895526")如果我不想配置它们并保留默认值,该怎么办? 我是否只是将它们保留为注释、以便它们不会被编程?  [/报价]

    是的、将其注释掉。

    您是否使用过 SysConfig 中的安全工具? 这将使您的任务变得非常简单。