TI中文支持网
TI专业的中文技术问题搜集分享网站

请教:为什么TMS320F28335烧写FLASH后芯片被锁

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Young Hu:

是不是cmd文件中对密码区有覆盖?

电源也需要查

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Caspar Zhang:

回复 Young Hu:

您好,谢谢您的回复

电源用示波器监控了,烧写的时候没有问题,很稳定

CMD中好像也没对密码区有覆盖吧,能否帮忙看一下,谢谢。

附件将后缀.cmd改成了.c

/*// TI File $Revision: /main/9 $// Checkin $Date: August 28, 2007 11:23:38 $//###########################################################################//// FILE: F28335.cmd//// TITLE: Linker Command File For F28335 Device////###########################################################################// $TI Release: DSP2833x Header Files V1.01 $// $Release Date: September 26, 2007 $//###########################################################################*/

/* ======================================================// For Code Composer Studio V2.2 and later// —————————————// In addition to this memory linker command file, // add the header linker command file directly to the project. // The header linker command file is required to link the// peripheral structures to the proper locations within // the memory map.//// The header linker files are found in <base>\DSP2833x_Headers\cmd// // For BIOS applications add: DSP2833x_Headers_BIOS.cmd// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd ========================================================= */

/* ======================================================// For Code Composer Studio prior to V2.2// ————————————–// 1) Use one of the following -l statements to include the // header linker command file in the project. The header linker// file is required to link the peripheral structures to the proper // locations within the memory map */

/* Uncomment this line to include file only for non-BIOS applications *//* -l DSP2833x_Headers_nonBIOS.cmd */

/* Uncomment this line to include file only for BIOS applications *//* -l DSP2833x_Headers_BIOS.cmd */

/* 2) In your project add the path to <base>\DSP2833x_headers\cmd to the library search path under project->build options, linker tab, library search path (-i)./*========================================================= */

/* Define the memory block start/length for the F28335 PAGE 0 will be used to organize program sections PAGE 1 will be used to organize data sections

Notes: Memory blocks on F28335 are uniform (ie same physical memory) in both PAGE 0 and PAGE 1. That is the same memory region should not be defined for both PAGE 0 and PAGE 1. Doing so will result in corruption of program and/or data. L0/L1/L2 and L3 memory blocks are mirrored – that is they can be accessed in high memory or low memory. For simplicity only one instance is used in this linker file. Contiguous SARAM memory blocks can be combined if required to create a larger memory block. */

MEMORY{PAGE 0: /* Program Memory */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */ //RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */ //RAML2 : origin = 0x00A000, length = 0x001000 /* on-chip RAM block L2 */ //RAML3 : origin = 0x00B000, length = 0x001000 /* on-chip RAM block L3 */ //ZONE6A : origin = 0x110000, length = 0x030000 /* XINTF zone 6 – XRAM space*/ FLASHH : origin = 0x300000, length = 0x008000 FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */ FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */ FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */ FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */ FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */ FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */ CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */ IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */ IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */

PAGE 1 : /* Data Memory */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */ /* Registers remain on PAGE1 */ BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */ RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ RAML4 : origin = 0x009000, length = 0x005000 /* on-chip RAM block L1 */ ZONE6B : origin = 0x100000, length = 0x010000 /* XINTF zone 6 – U30 space */ FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */}

/* Allocate sections to memory blocks. Note: codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code execution when booting to flash ramfuncs user defined section to store functions that will be copied from Flash into RAM*/ SECTIONS{ /* Allocate program areas: */ .cinit : > FLASHC PAGE = 0 .pinit : > FLASHA, PAGE = 0 .text : > FLASHG PAGE = 0 codestart : > BEGIN PAGE = 0 /*xintffuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_XintffuncsLoadStart), LOAD_END(_XintffuncsLoadEnd), RUN_START(_XintffuncsRunStart), PAGE = 0*/ csmpasswds : > CSM_PWL PAGE = 0 csm_rsvd : > CSM_RSVD PAGE = 0 /* Allocate uninitalized data sections: */ .stack : > FLASHE PAGE = 0 .ebss : > FLASHE PAGE = 0 .esysmem : > FLASHE PAGE = 0

/* Initalized sections go in Flash */ /* For SDFlash to program these, they must be allocated to page 0 */ .econst : > FLASHC PAGE = 0 .switch : > FLASHA PAGE = 0

/* Allocate IQ math areas: */ IQmath : > FLASHC PAGE = 0 /* Math Code */ IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD /* Allocate DMA-accessible RAM sections: */ /* Allocate 0x400 of XINTF Zone 6 to storing data */ ZONE6DATA : > ZONE6B, PAGE = 1

/* .reset is a standard section used by the compiler. It contains the */ /* the address of the start of _c_int00 for C Code. /* /* When using the boot ROM this section and the CPU vector */ /* table is not needed. Thus the default type is set here to */ /* DSECT */ .reset : > RESET, PAGE = 0, TYPE = DSECT vectors : > VECTORS PAGE = 0, TYPE = DSECT /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */ .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD

}

/*//===========================================================================// End of file.//===========================================================================*/

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Young Hu:

这个28335是全新的片子?

其他的板子有没有类似的问题?

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

xc119 zhu:

你好,最近在对完成的项目的软件加密,对于此问题,你要是在"On-chip flash programme"中没有对其加密的话,估计你可能在软件中对其加密了。

首先,你看看你的程序中是否有类似如下部分的代码:

 .sect "csmpasswds"

 .int 0xFFFF  ;PWL0 (LSW of 128-bit password)  

.int 0xFFFF  ;PWL1

 .int 0xFFFF  ;PWL2  

.int 0xFFFF  ;PWL3  

.int 0xFFFF  ;PWL4

 .int 0xFFFF  ;PWL5

 .int 0xFFFF  ;PWL6

 .int 0xFFFF  ;PWL7 (MSW of 128-bit password)

 .sect "csm_rsvd"

 .loop (33FFF5h – 33FF80h + 1)  

 .int 0x0000  

.endloop

如果有的话,建议那些PWL1-PW7中的设定值是否不为FFFF。

不为FFFF的话,说明你加密了,在解密时对应其值输入就可以了。

祝你好运

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Jones Chen:

您的工程中是否有password.asm这个文件? 这个文件中的密码都是F么?

 

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Caspar Zhang:

回复 Jones Chen:

工程中没有DSP2833x_CSMPassword.asm这个文件,

工程是用的CCS3.3

今天将工程用CCS5.2导入后,用CCS5.2烧写了几次Flash,没出现问题了。

但不知道为什么会出现这种情况?

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Yongliang Yang:

回复 Caspar Zhang:

我也遇到了同样的问题,请问老兄问题解决了么?

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Martin Yu:

回复 Yongliang Yang:

楼主可以将Map文件打开检查下Password区域是否有被用了。

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

da wang:

回复 Martin Yu:

有一个疑问:

       工程中的两个cmd文件DSP2833x_Headers_nonBIOS.cmd和F2833x_nonBIOS_flash.cmd都是官方例程中的文件(可能不是同一个工程)。关于密码区,

              第二个cmd中有:csmpasswds            :>    CSM_PWL          PAGE = 0一句      //表示程序空间

              第一个cmd中有:CsmPwlFile             :>   CSM_PWL           PAGE = 1              //表示数据空间

   但实际上它们处于相同位置。对同一地址重复定义不同的段,链接器为何不报错?

 假如工程未加入csmpasswds.asm,那么它就属于代码中的未初始化段,编译生成out文件后。查看map文件,发现csmpasswds和CsmPwlFile两个段长度均为0,均为未初始化段类型。那么烧写时,对应地址处所烧入的值是全零、全1还是不变?

是不是可以这么理解,只要是未初始化的段,链接器仅为其保留空间,但不回对其初始化,即使是分配在page 0中的段?烧写时,对于分配在flash中的未初始化段,不会改变其原来的值?

 

向大家请教一下,

将.out文件烧写到TMS320F28335的flash后,再次烧写的时候,会弹出“unlock flash”的窗口,

但是并没有对FLASH做过加密,全部输入FF也不行,结果导致芯片就被锁死了,

请问这种问题应该从哪些方面去分析呢?

可以确定,代码没有超过TMS320F28335的flash容量,且在烧写的过程中电源也是稳定的。

期待大家的指点,谢谢。

Chen Jones:

回复 da wang:

这2个CMD的作用是不同的,1. 关于Non BIOS的CMD,见下面的代码。

是用来将已经固化在RAM中的有关CSM的寄存器名称与实际物理地址对应。

而Flash CMD是真正要往CSM寄存器里面写具体的密码数值。

你跟踪一下代码就发现了。

//—————————————-#ifdef __cplusplus#pragma DATA_SECTION("CsmPwlFile")#else#pragma DATA_SECTION(CsmPwl,"CsmPwlFile");#endifvolatile struct CSM_PWL CsmPwl;

 

/* Password locations */struct  CSM_PWL {   Uint16   PSWD0;  // PSWD bits 15-0   Uint16   PSWD1;  // PSWD bits 31-16   Uint16   PSWD2;  // PSWD bits 47-32   Uint16   PSWD3;  // PSWD bits 63-48   Uint16   PSWD4;  // PSWD bits 79-64   Uint16   PSWD5;  // PSWD bits 95-80   Uint16   PSWD6;  // PSWD bits 111-96   Uint16   PSWD7;  // PSWD bits 127-112};

赞(0)
未经允许不得转载:TI中文支持网 » 请教:为什么TMS320F28335烧写FLASH后芯片被锁
分享到: 更多 (0)