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:BOOTCTLR 为每个 CPU01/CPU02更正地址和值

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1192602/tms320f28379d-bootctlr-correct-addresses-and-values-for-each-cpu01-cpu02

器件型号:TMS320F28379D
Thread 中讨论的其他器件:SysConfigC2000WARE

C2000朋友和家人、

我们的客户对用于在 F28379D 双核项目中引导刷写 CPU01/CPU02的 BOOTCRL 寄存器有一些疑问。

第一个问题与每个 CPU 的 BOOTCTLR 正确地址和值有关。  由于 CPU01的 SPRUHM8I (技术参考手册、第4章)中未编程器件将引导闪存、但对于 CPU02、情况看起来不同、用户可能需要对 Z1-BOOTCTRL 或 Z2-BOOTCTRL 区域进行编程以进行闪存引导。  该客户已使用我们的示例测试了其 CPU02文件中的代码、其能力如下:

 2837x_flash_lnk_cpu2.cmd

 0页:/* 程序内存*/

         /*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/

         /* begin 用于"引导至闪存"引导加载程序模式  */

   /*双代码安全模式*/

   DCSM_OTP_Z1_LINKPOINTER :origin = 0x78000,length = 0x00000C // Z1 OTP。  LinkPointers */

   DCSM_OTP_Z1_PSWDLOCK    :origin = 0x78010,length = 0x000004 // Z1 OTP。  PSWDLOCK/保留*/

   DCSM_OTP_Z1_CRCLOCK     :origin = 0x78014,length = 0x000004 // Z1 OTP。  CRCLOCK/保留*/

   DCSM_OTP_Z1_BOOTCTRL    :origin = 0x7801C,length = 0x000004 // Z1 OTP。  被保留/ BOOTCTRL */

   DCSM_ZSEL_Z1_P0         :origin = 0x78020,length = 0x000010 // Z1 OTP。  Z1密码位置/闪存和 RAM 分区- DCSM Z1区域选择内容(!可移动!!)*/

   DCSM_OTP_Z2_LINKPOINTER :origin = 0x78200,length = 0x00000C // Z2 OTP。  LinkPointers */

   DCSM_OTP_Z2_GPREG       :origin = 0x7820C,length = 0x000004 // Z2 OTP。  GPREG1/GPREG2 *

   DCSM_OTP_Z2_PSWDLOCK    :origin = 0x78210,length = 0x000004 // Z2 OTP。  PSWDLOCK/保留*/

   DCSM_OTP_Z2_CRCLOCK     :origin = 0x78214,length = 0x000004 // Z2 OTP。  CRCLOCK/保留*/

   DCSM_OTP_Z2_BOOTCTRL    :origin = 0x7821C,length = 0x000004 // Z2 OTP。  GPREG3/BOOTCTRL *

   DCSM_ZSEL_Z2_P0         :origin = 0x78220,length = 0x000010 // Z2 OTP。  Z2密码位置/闪存和 RAM 分区- DCSM Z1区域选择内容(!可移动!!) *

 

1页:/*数据存储器*/

        /*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/

   /*双代码安全模式*/

   DCSM_Z1          :origin = 0x05F000、length = 0x000030 //区域1双代码安全模块寄存器*/

   DCSM_Z2          :origin = 0x05F040,length = 0x000030 //区域2双代码安全模块寄存器*/

   DCSM_COMMON      :origin = 0x05F070,length = 0x000010 //通用双代码安全模块寄存器*/

   DCSM_Z1_OTP      :origin = 0x078000,length = 0x000020 // Z1 OTP 的一部分。  LinkPointer/JTAG 锁定/引导模式*/

   DCSM_Z2_OTP      :origin = 0x078200,length = 0x000020 // Z2 OTP 的一部分。  LinkPointer/JTAG 锁定*/

 

部分

   /*双代码安全模式分配*/

   DCSM_OTP_Z1_linkpointer  :>DCSM_OTP_Z1_LINKPOINTER     PAGE = 0

   DCSM_OTP_Z1_pswdlock     :>DCSM_OTP_Z1_PSWDLOCK        PAGE = 0

   DCSM_OTP_Z1_CLOCK      :>DCSM_OTP_Z1_CRCLOCK         PAGE = 0

   DCSM_OTP_Z1_BOOTctrl     :>DCSM_OTP_Z1_BOOTCTRL        PAGE = 0

   dcsm_zsel_z1             :>dcsm_ZSEL_Z1_P0             page = 0

 

   /*双代码安全模式分配*/

   DCSM_OTP_Z2_linkpointer  :>DCSM_OTP_Z2_LINKPOINTER     PAGE = 0

   DCSM_OTP_Z2_pswdlock     :>DCSM_OTP_Z2_PSWDLOCK        PAGE = 0

   DCSM_OTP_Z2_crclock      :>DCSM_OTP_Z2_CRCLOCK         PAGE = 0

   DCSM_OTP_Z2_bootctrl     :>DCSM_OTP_Z2_BOOTCTRL        PAGE = 0

   dcsm_zsel_z2             :>dcsm_ZSEL_Z2_P0             page = 0

 

此外、在 Out DCSM_Z1_ZoneSelectBlock.asm 中的 DCSM 分配设置了以下值:

 

     .sect "Dcsm_otp_z1_linkpointer"

   0x1FFFFFFF    ;Z1-LINKPOINTER1

   整型0xFFFFFFFF    ;保留

   0x1FFFFFFF    ;Z1-LINKPOINTER2

   整型0xFFFFFFFF    ;保留

   0x1FFFFFFF    ;Z1-LINKPOINTER3

   整型0xFFFFFFFF    ;保留

 

     .sect "Dcsm_otp_z1_pswdlock "

   整型0xFFFFFFFE    ;Z1-PSWDLOCK

   整型0xFFFFFFFF    ;保留

 

     .sect "Dcsm_otp_Z1_crclock"

   整型0xFFFFFFFF    ;Z1-CRCLOCK

   整型0xFFFFFFFF    ;保留

 

     .sect "Dcsm_otp_z1_bootctrl"

   整型0xFFFFFFFF    ;Z1-GPREG3

   整型0xFFFFFF0B5A    ;Z1-BOOTCTRL:BMODE = 0x0B (闪存启动)、KEY = 0x5A

 

一个问题是、用户是否必须为 CPU02设置 Z1-BOOTCTRL 或 Z2BOOTCTRL、或者我们是否有另一条路由来避免在 CPU02中写入 Z1或 Z2 DCSM 区域以从闪存引导它。 因为一旦编程、DSCM 将无法恢复、他们希望在开发和生产阶段通过固件更新避免这种情况。 第二个问题是,他们是否可以使用二进制1对 DSCM 进行编程,并且一旦在 DSCM 区域中设置二进制0,就会被锁定,这是否正确?

他们 尝试使用 CCS 7中的片上闪存工具对 Z1-BOOTCTRL/Z2-BOOTCTRL 进行编程、 但地址看起来与它们的链接器文件和片上闪存不同、例如在片上闪存中、OTPBOOTCTRL 地址为0x7821E (32位)、在链接器文件中、我们将为 Z2-BOOTCTRL 寄存器设置地址0x7821C。

 我们认为 Z2-BOOTCTRL 寄存器的地址可能必须为0x7821E、删除了长寄存器 Z2-GPREG3、但让我们知道更可取的地方。

 感谢您的帮助!

Ty、

是的

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

    嘿、CY、

    我目前正在研究这个问题、我将在今天结束前再次与您讨论。

    谢谢、

    Luke

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

    谢谢 Luke!  感谢您的帮助!

    Chris

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

    尊敬的 Chris:

    我相信片上闪存工具在本例中使用的是适用于 Z1/Z2 BOOTCTRL 的正确地址。 我将与我们的其他 DCSM 专家确认这一点。 此.cmd 文件是否来自 C2000Ware 示例? SysConfig DCSM 工具似乎也对 Z2-BOOTCTRL 使用地址0X7821C、一旦我确认正确的地址、我们也会在工具中修复此问题。

    "我们认为 Z2-BOOTCTRL 寄存器的地址可能必须为0x7821E、删除了长寄存器 Z2-GPREG3、但让我们知道更可取的地方。"

    我不确定我是否理解您在这里提出的问题、您是否在不对区域2标头中的其他值进行永久编程的情况下询问对 Z2-BOOTCTRL 进行编程的最佳方法? 如果是、则在这种情况下、片上闪存工具是首选方法、因为您可以一次对各个存储器地址进行编程。

    此外、您是否已经使用您提供的.cmd 文件或通过片上闪存工具对任何安全设置进行了编程? 如果是、您是否能够从闪存成功引导 CPU2?

    谢谢、

    Luke

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

    感谢 Luke、客户也可以访问此处、因此我们可以查看他们可以在此主题上或通过直接与我发送电子邮件离线提供的输入内容。

    此致、

    Chris

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

    谢谢 Chris、如果您的客户有任何其他问题、请告诉我。

    -Luke

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

    尊敬的 Luke、我们的客户"感谢您的关注! 我们在 CPU02固件中实施了注释、使用具有两个内核的闪存引导功能、一切看起来都很好!"

    很有义务!

    Chris