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.

[参考译文] TMS320F280049:DCSM OTP 编程到错误的地址

Guru**** 2529560 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/851657/tms320f280049-dcsm-otp-programmed-to-the-wrong-address

器件型号:TMS320F280049

您好专家、

我正在使用提供的 asm 文件和 cmd 文件来锁定 F280049、但它似乎转至错误的位置。 这是我修改的 asm 文件和内存内容。

它似乎不在正确的位置、这里会发生什么情况?

已在此处附上 cmd 和 asm。

命令:

/*如果用户希望在
器件上使用 DCSM *功能、则将包含此链接器命令文件 DCSM 表示双区域代码安全模块。 此
*链接器命令文件用作
项目现有闪存/RAM *链接器命令文件的附录。
*根据
文件注释中给出的*命令链接*_ZoneSelectBlock.asm 源文件中的段-请注意 fill=0xFFFF,如果
*用户将此文件错误地包含在项目中,并且未提供
*所需的正确*_ZoneSelectBlock.asm 源文件,这将很有帮助。
*请参阅 Blinky DCSM 示例以正确使用该示例。
*
*一旦用户确信要`在 OTP 中对密码进行编程、
* DSECT 段类型就可以删除。
*
*/

MEMORY
{
PAGE 0://*程序存储器*/

/* BANK0 */
/* B0 Z1 OTP。 LinkPointers */
B0_DCSM_OTP_Z1_LINKPOINTER:origin = 0x78000,length = 0x00000C
// B0 Z1 OTP。 GPREG1/GPREG2 */
B0_DCSM_OTP_Z1_GPREG :origin = 0x7800C,length = 0x000004
// B0 Z1 OTP。 PSWDLOCK/保留*/
B0_DCSM_OTP_Z1_PSWDLOCK:origin = 0x78010,length = 0x000004
// B0 Z1 OTP。 CRCLOCK/保留*/
B0_DCSM_OTP_Z1_CRCLOCK:origin = 0x78014,length = 0x000004
// B0 Z1 OTP。 GPREG3/BOOTCTRL */
B0_DCSM_OTP_Z1_BOOTCTRL:origin = 0x7801C,length = 0x000004

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

// B0 Z2 OTP。 LinkPointers */
B0_DCSM_OTP_Z2_LINKPOINTER:origin = 0x78200,length = 0x00000C
// B0 Z2 OTP。 GPREG1/GPREG2 */
B0_DCSM_OTP_Z2_GPREG:origin = 0x7820C,length = 0x000004
// B0 Z2 OTP。 PSWDLOCK/保留*/
B0_DCSM_OTP_Z2_PSWDLOCK:origin = 0x78210,length = 0x000004
// B0 Z2 OTP。 CRCLOCK/保留*/
B0_DCSM_OTP_Z2_CRCLOCK:origin = 0x78214、length = 0x000004
// B0 Z2 OTP。 GPREG3/BOOTCTRL */
B0_DCSM_OTP_Z2_BOOTCTRL:origin = 0x7821C,length = 0x000004

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


//* Bank1 *//
* B1 Z1 OTP。 LinkPointers */
B1_DCSM_OTP_Z1_LINKPOINTER:origin = 0x78400,length = 0x00000C

// DCSM B1 Z1区域选择内容(!!可移动!!!) */
/* B1 Z1 OTP。 闪存分区*/
B1_DCSM_ZSEL_Z1_P0:origin = 0x78420,length = 0x000010

// B1 Z2 OTP。 LinkPointers */
B1_DCSM_OTP_Z2_LINKPOINTER:origin = 0x78600,length = 0x00000C

// DCSM B1 Z1区域选择内容(!可移动!!!) */
/* B1 Z2 OTP。 闪存分区*/
B1_DCSM_ZSEL_Z2_P0:origin = 0x78620,length = 0x000010
}

SECTIONS
{
b0_DCSM_OTP_Z1_linkpointer:>B0_DCSM_OTP_Z1_LINKPOINTERPAGE = 0,type = DSECT Z1b0_DCSM_OTP_Z1_gLINK
:>B0_DCSM_OTP_Z1_GPREGPAGE = 0,DCSM_DCSM_DCSM_DSW1
= 0_DCSM_OTP_CLK_clock = 0_DCSM_DCSM_D_D_DSCK_OTP_Z1_OTP_D0
> b0_dcsm_otp_z1_CRCLKPAGE = 0,type = DSECT
b0_dcsm_otp_z1_bootctrl:> b0_dcsm_otp_z1_BOOTCTRLpage = 0,type = DSECT
b0_dcsm_z1_otp:> b0_dcsm_zsel_zsb_tp

= dcsm_z2 = dcsm_z2 tpsm_z2 p_totp 0 = dcs_tp 0 = dcs_z2 p_tp 0 = dz2 tp_tp 0 = dcs_sw1

> b0_dcsm_otp_z2_PSWDLOCKpage = 0,type = DSECT
b0_dcsm_otp_z2_crclock:> b0_dcsm_otp_z2_crclockppage = 0,type = DSECT b0_dcsm_z2_totp_z1_dcsm_z1_tpsm_z1_dcsm_z1_tpsm_z1_page




= dcsm_z1_dcsm_z1_tpsm_z2_tpsm_z1_tpsm_z1_page = dcsm_z1_dcsm_z1_tpsm_z1_tpsm_z1_tpsm_z2 ========================================================================================================================================================================================================================================================Dcsm_ZSEL_P0page = 0,type = DSECT

B1_DCSM_OTP_Z2_LINK 指针:>B1_DCSM_OTP_Z2_LINK页= 0,type = DSECT B1_Dcsm_ZSEL_Z2_LINKPOINTER 页= 0





//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*

ASM:

;##################################
;
;;;文件: f28004x_dcsm_z1otp.asm
;
;;;;;;标题:双代码安全模块区域1 OTP
;;
;;;;;说明:
;
;;;;;; 此文件用于指定 Z1 DCSM OTP 和区域选择块
; 要编程的值。
;;;;;
此外,区域选择块之后的60个保留值
; 也都编程为0x0000。
;;;;;!
重要! 以下存储器部分通过
*dcsm_lnk.cmd 链接器命令文件映射到 OTP (一次性;可编程)存储器。 要对
以下存储器段进行编程,用户应取消注释
每个段的.long 字;;并将值更改为所需值。 此外,
*dcsm_lnk.cmd 的;;相应段不应再标记为
;;虚拟段。 从正在
编程的存储器部分中删除段中的"、type = DSECT"。
;;;;;;!

重要! "bx_dcsm_otp_z1_linkpointer"部分包含
;;Z1 LINKPOINTER、它决定 Z1区域选择块的位置。
;;如果 LINKPOINTER 已更改、则"bx_dcsm_zsel_z1_linkpointer"
;;;* dcsm_lnk.cmd 命令链接器文件中的段也必须更改为
;;从 Z1-LINKPOINTER 位置中指定的值解码的地址。
;;;;;;;"bx_dcsm_zsel_z1"

段包含实际的 Z1区域选择块
;;将链接并编程到 DCSM Z1 OTP 区域
的值;; OTP 中的选择块。
;这些值必须已知才能解锁 CSM 模块。
;;;;;
建议在代码开发期间将所有值保留为0xFFFFFFFF
。 0xFFFFFFFF 的值不会激活代码安全和虚拟
;;读取 Z1 DCSM PWL 寄存
器就是解锁;; CSM 所需的全部。 代码开发完成后,修改值以激活
;;代码安全模块。
;;;;;********
警告“*******”
;;如果用户是
,建议不要将0xFFFFFFFF 编程到用户 OTP 位置;;;将来打算将任何位重新返回并重新编程到“0”。 如果用户
;将0xFFFFFFFF 编程到任何 OTP 位置,则 ECC 位置将
;;编程到未擦除状态,用户将无法返回
;以及将 OTP 位置重新编程到另一个值。 有关
DCSM 中 ECC 位置的更多详细信息,请参阅器件 TRM 的章节;。
;;;;;Hence
TI 发布了此示例,对
以下所有;;位置的初始化进行注释。
;##################################
;;$TI 发行版:F28004x 支持库 v1.07.00.00 $
;$Release Date:Sun Sep 2907:29:19 CDT 2019 $
;$Copyright:
;//版权所有(C) 2019 Texas Instruments Incorporated - http://www.ti.com/
;//
;//如果

满足以下条件,允许以源代码和二进制形式重新分发和使用,无论是否修改;//
//
;//源代码的重新分发必须保留上述版权
;//注意,此条件列表和以下免责声明。

//;//二进制形式的再发行必须复制上述版权
;//

声明、本条件列表和以下免责声明;//文档和/或随;//发行提供的其他材料。
//
;//如果

没有事先的书面许可,不能使用德州仪器公司的名称或;//其贡献者的名称来认可或推广源自此软件的产品;//
;//
;//本软件由版权所有者和贡献者提供
;//“按原样”,任何明示或暗示的保证,包括但不
限于对适销性和适用性的暗示保证
;//特定用途不承担任何责任。 在任何情况下,版权
不得对任何直接、间接、偶然或
特殊、模范、 或间接损害赔偿(包括但不
限于采购替代产品或服务;丧失使用、
数据或利润; 或业务中断)的
任何原因;//责任理论,无论是合同、严格责任还是侵权
行为;//(包括疏忽或其他)因使用
本软件而产生;//本软件,即使被告知可能会发生此类损坏。
//$
;####################################################################################################

.sect "b0_DCSM_OTP_Z1_linkpointer"
;;;.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER1
;;.long 0xFFFFFFFF ;保留
;;.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER2
;;.long 0xFFFFFFFF ;保留
;;.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER3
;;.long 0xFFFFFFFF ;保留

.sect "b0_DCSM_OTP_Z1_gpreg"
;
;;;;;;;;有关更多详细信息、请参阅 TRM 的 ROM 代码和外设启动一章。
下面
是
引导 ROM 使用的 Z1OTP_BOOTPIN_CONFIG;的位字段说明。
;
;;;;|键(31-24)| BMSP2 (23-16)| BMSP1 (15-8)| BMSP0 (7-0)|
;;
;;;;;下面是
对;Boot ROM 使用的 Z1OTP_GPREG2位字段的说明。
;
;;;;|键(31-24)| RSVD (23-8)| RSVD (7-6)| ESP (5-4)| RSVD (3-0)|
;
;;;;.long 0xFFFFFFFF ;Z1OTP_BOOTPIN_CONFIG
;.long 0xFFFFFFFF ;Z1OTP_GPREG2

.sect "b0_DCSM_OTP_Z1_pswdlock
;;.long 0xFFFFFFFF ;Z1OTP_PSWDLOCK
;.long 0xFFFFFFFF ;保留

.sect "b0_DCSM_OTP_Z1_crclock"
;;;.long 0xFFFFFFFF ;Z1OTP_CRCLOCK
;;.long 0xFFFFFFFF ;保留

.sect "b0_DCSM_OTP_Z1_bootctrl"
;
;;;;;;;;有关更多详细信息、请参阅 TRM 的 ROM 代码和外设启动一章。
;;;;;
下面是
;Boot ROM 使用的 Z1OTP_BOOTDEV_LOW 位字段的说明。
;
;;;;| BOOT_DEF3 (31-24)| BOOT_DEF2 (23-16)| BOOT_DEF1 (15-8)| BOOT_DEF0 (7-0)|
;;
;;;;;以下是对 Z1OTP_BOOTDEV_HIGH 的位字段的说明
;由引导 ROM 使用。
;
;;;;| BOOT_DEF7 (31-24)| BOOT_DEF6 (23-16)| BOOT_DEF5 (15-8)| BOOT_DEF4 (7-0)|
;;
;;;.long 0xFFFFFFFF ;Z1OTP_BOOTDEV_LOW
;.long 0xFFFFFFFF ;Z1OTP_BOOTDEV_HIGH

.sect "b0_dcsm_zsel_z1"

长整型0xFFFFFFFF ;B0_Z1OTP_EXEONLYRAM
长整型0xFFFFFFFF ;B0_Z1OTP_EXEONLYSECT
长整型0xFFFFFFFF ;B0_Z1OTP_GRABRAM
长整型0x55555555 ;B0_Z1OTP_GRABSECT 选择区域1中的所有扇区

长整型0x11223344 ;B0_Z1OTP_CSMPSWD0 (128位密码的 LSW)
长整型0x11223344 ;B0_Z1OTP_CSMPSWD1
长整型0x11223344 ;B0_Z1OTP_CSMPSWD2
长整型0x11223344 ;B0_Z1OTP_CSMPSWD3 (128位密码的 MSW)

.sect "B1_DCSM_OTP_Z1_linkpointer"
;;;.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER1
;;.long 0xFFFFFFFF ;保留
;;.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER2
;;.long 0xFFFFFFFF ;保留
;;.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER3
;;.long 0xFFFFFFFF ;保留

.sect "B1_DCSM_zsel_Z1"
;;.long 0xFFFFFFFF ;保留
;;.long 0xFFFFFFFF ;B1_Z1OTP_EXEONLYSECT
;;.long 0xFFFFFFFF ;保留
;;.long 0xFFFFFFFF ;B1_Z1OTP_GRABSECT

;;.long 0xFFFFFFFF ;保留
;;.long 0xFFFFFFFF ;保留
;;.long 0xFFFFFFFF ;保留
;;.long 0xFFFFFFFF ;保留

;;;--------------------------------------------------------------------------

;;对于代码安全操作,在开发完成后,在
;;;生产之前,所有其它区域选择块位置应该被设定
;;至0x0000以获得最大的安全性。
;;如果使用偏移量0x10处的第一个区域选择块,则可以使用部分
;;"dcsm_rsvd_z1"将这些位置编程为0x0000。
;此代码为开发注释掉。

; .sect "Dcsm_rsvd_Z1"
; .loop (1e0h);
.int 0x0000
;; .endloop


;;########################################################################################################
;;文件结束
;####################################################

谢谢

谢尔登

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

    我的目标是锁定区域1中的所有闪存扇区。

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

    您好、Sheldon、

    在代码编译期间、您是否收到任何警告? 您是否检查了映射文件以确保映射位于正确的地址?

    此致

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

    您好、Vivek、

    我已经检查过、构建过程不会给出错误和警告。  

    今天、我进行了如下所示的另一项试验(在 asm 文件中注释掉一些行)、并遇到了与昨天类似的问题。

    这是我在加载程序之前看到的、只是通过连接调试器。 请注意、我在这里注释掉了一些行。

    加载代码后、控制台中出现错误、并读取以下 memroy conten。

    3.我尝试退出当前的调试过程并重新连接目标,如下所示。

    4.尝试重新加载程序,但出现此错误。

    下面是我的映射文件:

    B0_DCSM_OTP_Z1_LINKPO 00078000 0000000c 00000000 0000000c RWIX
    B0_DCSM_OTP_Z1_GPREG 0007800c 00000004 00000000 00000004 RWIX
    B0_DZ1_OTP_Z1_PSWDLO 00078010 00000004 00000004 WCSM 00000004
    
    00000004 00000004 WDCSM_DR_800_800000004
    
    
    
    00000004 00000000 00000004 RWIX
    B0_DCSM_OTP_Z2_CRCLOC 00078214 00000004 00000000 00000004 RWIX
    B0_DCSM_OTP_Z2_BOOTCT 0007821c 00000004 00000000 00000004 00000000
    00000000 00000004 00000000 DCSM_ZSEL_Z0 00000009
    000000010 RUSC_00000009
    
    
    00000009 0000000CL_80000CL_00000009 

    我还会在此处附加项目文件以供您参考。 希望您能在这里教我如何操作!

    e2e.ti.com/.../launchxl_5F00_ex1_5F00_f280049c_5F00_demo.zip

    谢谢

    谢尔登

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

    您好、Sheldon、

    我对仪器'.long 0x55555555  ;B0_Z1OTP_GRABSECT'有疑问。 我想知道为什么要将0x55555555设置到该寄存器。

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

    Sheldon、

    您使用的是哪个 CCS 版本?

    此致、

    Vivek Singh

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

    您好、Vivek、

    我正在尝试 CCS 9.2.0。 我的客户复制了我在这里遇到的内容。

    谢谢

    谢尔登

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

    问题已离线解决。