您好专家、
我正在使用提供的 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 ;;######################################################################################################## ;;文件结束 ;####################################################
谢谢
谢尔登