主题中讨论的其他器件: MSP430FR5967
工具/软件:Code Composer Studio
大家好、我在 MSP430FR5969 Launchpad 上进行编程。 launchpad 以前工作良好、但突然、它加载文件时出现问题。 我已经使用简单的示例代码"闪烁 LED"进行测试、但是我一直遇到如下错误:MSP430:文件加载程序:验证失败:地址0x04400处的值不匹配请验证目标存储器和存储器映射。
MSP430:GEL:文件:C:\Users\aeg\Desktop\TRV 部件工程图\Debug\Blblink _ccs.out:发生数据验证错误、文件加载失败。
我尝试在网上找到相关信息、也许链接器命令文件需要修改存储器映射、但我不知道如何操作。
我使用"快速访问"打开"存储器映射"、但它是一个空白窗口。 我下载了 SYS/BIOS、但在 TI Resource Explorer 中看不到它。
默认情况下、这是我的 lnk_msp430fr5969.cmd 文件、我使用的 IDE 是 CCS v7:
非常感谢您的帮助!
存储器
{
SFR :origin = 0x0000、length = 0x0010
外设_8位 :origin = 0x0010、length = 0x00F0
peripherals_16BIT :origin = 0x0100、length = 0x0100
RAM :origin = 0x1C00,length = 0x0800
INFOA :origin = 0x1980,length = 0x0080
INFOB :origin = 0x1900,length = 0x0080
INFOC :origin = 0x1880,length = 0x0080
INFOD :origin = 0x1800,length = 0x0080
FRAM :origin = 0x4400,length = 0xBB80
FRAM2 :origin = 0x10000、length = 0x4000
JTAGSIGNATURE :origin = 0xFF80,length = 0x0004,fill = 0xFFFF
BSLSIGNATURE :origin = 0xFF84,length = 0x0004,fill = 0xFFFF
IPESIGNATURE :origin = 0xFF88,length = 0x0008,fill = 0xFFFF
INT00 :origin = 0xFF90,length = 0x0002
INT01 :origin = 0xFF92,length = 0x0002
INT02 :origin = 0xFF94,length = 0x0002
INT03 :origin = 0xFF96,length = 0x0002
INT04 :origin = 0xFF98,length = 0x0002
INT05 :origin = 0xFF9A,length = 0x0002
INT06 :origin = 0xFF9C,length = 0x0002
INT07 :origin = 0xFF9E,length = 0x0002
INT08 :origin = 0xFFA0、length = 0x0002
INT09 :origin = 0xFFA2、length = 0x0002
INT10 :origin = 0xFFA4、length = 0x0002
INT11 :origin = 0xFFA6、length = 0x0002
INT12 :origin = 0xFFFA8、length = 0x0002
INT13 :origin = 0xFFAA、length = 0x0002
INT14 :origin = 0xFFAC,length = 0x0002
INT15 :origin = 0xFFAE、length = 0x0002
Int16 :origin = 0xFFB0,length = 0x0002
INT17 :origin = 0xFFB2、length = 0x0002
INT18 :origin = 0xFFB4,length = 0x0002
INT19 :origin = 0xFFB6、length = 0x0002
INT20 :origin = 0xFFB8、length = 0x0002
INT21 :origin = 0xFFBA,length = 0x0002
INT22 :origin = 0xFFBC,length = 0x0002
INT23 :origin = 0xFFBE,length = 0x0002
INT24 :origin = 0xFFC0,length = 0x0002
INT25 :origin = 0xFFC2,length = 0x0002
INT26 :origin = 0xFFC4,length = 0x0002
INT27 :origin = 0xFFC6,length = 0x0002
INT28 :origin = 0xFFC8,length = 0x0002
INT29 :origin = 0xFFCA,length = 0x0002
INT30 :origin = 0xFFCC,length = 0x0002
INT31 :origin = 0xFFCE、length = 0x0002
int32 :origin = 0xFFD0,length = 0x0002
INT33 :origin = 0xFFD2,length = 0x0002
INT34 :origin = 0xFFD4,length = 0x0002
INT35 :origin = 0xFFD6、length = 0x0002
INT36 :origin = 0xFFD8,length = 0x0002
INT37 :origin = 0xFFDA,length = 0x0002
INT38 :origin = 0xFFDC,length = 0x0002
INT39 :origin = 0xFFDE,length = 0x0002
INT40 :origin = 0xFFE0,length = 0x0002
INT41 :origin = 0xFFE2,length = 0x0002
INT42 :origin = 0xFFE4,length = 0x0002
INT43 :origin = 0xFFE6,length = 0x0002
INT44 :origin = 0xFFE8、length = 0x0002
INT45 :origin = 0xFFEA,length = 0x0002
INT46 :origin = 0xFFEC,length = 0x0002
INT47 :origin = 0xFFEE,length = 0x0002
INT48 :origin = 0xFFF0,length = 0x0002
INT49 :origin = 0xFFF2,length = 0x0002
INT50 :origin = 0xFFF4,length = 0x0002
INT51 :origin = 0xFFF6、length = 0x0002
INT52 :origin = 0xFFF8,length = 0x0002
INT53 :origin = 0xFFFA,length = 0x0002
INT54 :origin = 0xFFFC,length = 0x0002
复位 :origin = 0xFFFE,length = 0x0002
}
/ /
/*指定段分配到内存 中*/
/ /
部分
{
组(RW_IPE)
{
组(READ_WRITE_MEMORY)
{
.TI.persistent:{}/* for #pragma PERSISTENT */
.cio :{}//* C I/O 缓冲器 */
.sysmem :{}/* 动态内存分配区域 */
} PALIGN (0x0400)、RUN_START (fram_rw_start)
组(IPENCAPSULATED_MEMORY)
{
.ipestruct :{} /* IPE 数据结构 */
.ipe :{}//* IPE */
.ipe_const :{} /* IPE 受保护常量 */
.ipe:_isr :{} /* ipe isr */
.ipe_vars :type = NOINIT{}/* IPE 变量 */
} PALIGN (0x0400)、RUN_START (fram_IPE_START) RUN_END (fram_IPE_END) RUN_END (fram_Rx_START)
}> 0x4400
.cinit :{} > FRAM /*初始化表 */
.pinit :{}> FRAM /* C++构造函数表 */
binit :{}> FRAM /*启动时初始化表 */
init_array :{} > FRAM /* C++构造函数表 */
.mspabi.exidx :{} > FRAM /* C++构造函数表 */
.mspabi.extab :{} > FRAM /* C++构造函数表 */
#ifndef __large_data_model__
.const :{}> FRAM /*常量数据 */
其他
.const :{}>> FRAM | FRAM2/* 常量数据 */
#endif
.text:_ISR :{} > FRAM //代码 ISR */
#ifndef __large_code_model__
.text :{}> FRAM /*代码 */
其他
.text :{}>> FRAM2 | FRAM /*代码 */
#endif
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
#ifndef __large_code_model__
.TI.ramfunc:{} load=FRAM、run=RAM、table (BINIT)
其他
.TI.ramfunc:{} load=FRAM | FRAM2、run=RAM、table (BINIT)
#endif
#endif
#endif
.jtagsignature:{}> JTAGSIGNATURE/* JTAG Signature */
bslsignature :{}> BSLSIGNATURE /* BSL Signature */
组(signature_SHAREDMEMORY)
{
ipesignature :{}/* IPE Signature *//
.jtagpassword :{} /* JTAG 密码 */
}> IPESIGNATURE
.bss :{}> RAM /*全局和静态变量 */
.data :{}>RAM /*全局和静态变量 */
.TI.noinit :{}>RAM /* for #pragma noinit */
.stack :{}> RAM (高) /*软件系统堆栈 */
infoA (空载):{}>INFOA /* MSP430 INFO FRAM 内存段*/
infoB (空载):{}>infoB
.infoC (空载):{}> INFOC
infoD (空载):{}> infod
/* MSP430中断矢量 */
.int00 :{}>int00
.int01 :{}>INT01
.int02 :{}>INT02
.int03 :{}>INT03
.int04 :{}>INT04
.int05 :{}>INT05
.int06 :{}>INT06
.int07 :{}>INT07
.int08 :{}>INT08
.int09 :{}>INT09
.int10 :{}>int10
.int11 :{}>int11
.int12 :{}>int12
.int13 :{}>int13
.int14 :{}>int14
.int15 :{}>INT15
.int16 :{}>int16
.int17 :{}>INT17
.int18 :{}>INT18
.int19 :{}>INT19
.int20 :{}>INT20
.int21 :{}>INT21
.int22 :{}>INT22
.int23 :{}>INT23
.int24 :{}>INT24
.int25 :{}>INT25
.int26 :{}>INT26
.int27 :{}>INT27
.int28 :{}>INT28
.int29 :{}>INT29
AES256 :{*(.int30)}> INT30类型= VECT_INIT
RTC :{*(.int31 )}> INT31类型= VECT_INIT
Port4 :{*(.int32 )}> int32 type = VECT_init
PORT3 :{*(.int33 )}> INT33 TYPE = VECT_INIT
TIMER3_A1 :{*(.int34 )}> INT34 TYPE = VECT_INIT
TIMER3_A0 :{*(.int35 )}> INT35 TYPE = VECT_INIT
端口2 :{*(.int36 )}> INT36类型= VECT_INIT
TIMER2_A1 :{*(.int37 )}> INT37 TYPE = VECT_INIT
TIMER2_A0 :{*(.int38 )}> INT38 TYPE = VECT_INIT
Port1 :{*(.int39 )}> INT39 TYPE = VECT_INIT
Timer1_A1 :{*(.int40)}> INT40 type = VECT_init
Timer1_A0 :{*(.int41)}> INT41 type = VECT_init
DMA :{*(.int42 )}> INT42 type = VECT_init
USCI_A1 :{*(.int43)}> INT43类型= VECT_INIT
TIMER0_A1 :{*(.int44 )}> INT44 TYPE = VECT_INIT
TIMER0_A0 :{*(.int45)}> INT45 type = VECT_INIT
ADC12 :{*(.int46)}> INT46 TYPE = VECT_INIT
USCI_B0 :{*(.int47 )}> INT47 TYPE = VECT_INIT
USCI_A0 :{*(.int48)}> INT48 type = VECT_init
WDT :{*(.int49 )}> INT49类型= VECT_INIT
TIMER0_B1 :{*(.int50 )}> INT50 TYPE = VECT_INIT
TIMER0_B0 :{*(.int51 )}> INT51 TYPE = VECT_INIT
Comp_E :{*(.int52)}> INT52类型= VECT_INIT
UNMI :{*(.int53 )}> INT53 TYPE = VECT_INIT
SYSNMI :{*(.int54 )}> INT54 TYPE = VECT_INIT
.reset :{} > reset /* MSP430 Reset vector */
}
/ /
/* MPU/IPE 特定内存段定义 */
/ /
#ifdef _IPE_ENABLE
#define IPE_MPUIPLOCK 0x0080
#define IPE_MPUIPENA 0x0040
#define IPE_MPUIPPUC 0x0020
//评估 IP 封装控制设置的设置
#if defined (_IPE_ASSERTPUC1)
#if defined (_IPE_LOCK)&&(_IPE_ASSERTPUC1 == 0x08)
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC |IPE_MPUIPLOCK);
#elif defined (_IPE_LOCK)
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
#Elif (_IPE_ASSERTPUC1 = 0x08)
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC);
其他
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
#endif
其他
#if defined (_IPE_LOCK)
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
其他
FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
#endif
#endif
//段定义
#ifdef _ipe_manual //用于在 GUI 中选择的自定义大小
FRAM_IPE_Border1 =(_IPE_SEGB1>>4);
FRAM_IPE_Border2 =(_IPE_SEGB2>>4);
#else //链接器生成的自动大小
FRAM_IPE_Border2 = fRAM_IPE_END >> 4;
FRAM_IPE_Border1 = fRAM_IPE_START >> 4;
#endif
FRAM_IPE_SETTINGS_STRUCT_ADDRESS = IPE_设置 结构>> 4;
FRAM_IPE_CHECKSUM =~((fRAM_IPE_ENABLE_VALUE & fRAM_IPE_Border2 & fRAM_IPE_Border1)|(fRAM_IPE_ENABLE_VALUE &~fRAM_IPE_Border2 &~fRAM_IPE_ENABBorder1)|(~frAM_IPE_ENABLE_ENABLE_IPE_1和~FRAM_IPE_IPE_IPE_IPAM_Border1)|(~~FRAM_IPE_IPE_IPE_IPE_IPE_IPAM_IPE_IPE_IPAM_FRAM_IPE_IPE_IPE_IPE_1和 IPAM_IPAM_IPAM_Border1)
#endif
#ifdef _MPU_enable
#define MPUPW (0xA500) /* MPU 访问密码*/
#define MPUENA (0x0001) /* MPU 使能*
#define MPULOCK (0x0002) /* MPU 锁定*/
#define MPUSEGIE (0x0010)/* MPU 在段违反时启用 NMI */
_MPU_ENABLE = 1;
//段定义
#ifdef _MPU_manual //用于在 GUI 中选择的自定义大小
MPU_SEARD_Border1 =_MPU_SEGB1 >> 4;
MPU_SEARD_Border2 =_MPU_SEGB2 >> 4;
MPU_SAM_VALUE =(_MPU_SAM0 << 12)|(_MPU_SAM3 << 8)|(_MPU_SAM2 << 4)|_MPU_SAM1;
#else //链接器生成的自动大小
#ifdef _ipe_enable //如果项目中也使用 IPE
//seg1 =任何读取+写入持久性变量
//seg2 = IPE =读取+写入+执行访问
//seg3 =代码、只读+只执行
MPU_SEGM_Border1 = fRAM_IPE_START >> 4;
MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
MPU_SAM_VALUE = 0x1573;// Info R、Seg3 RX、Seg2 rwx、Seg1 RW
其他
MPU_SEGM_Border1 = fRAM_Rx_START >> 4;
MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
MPU_SAM_VALUE = 0x1513;// Info R、Seg3 RX、Seg2 R、Seg1 RW
#endif
#endif
#ifdef _MPU_LOCK
#ifdef _MPU_ENABLE_NMI
MPU_ctl0_value = MPUPW | MPUENA | MPULOCK | MPUSEGIE;
其他
MPU_ctl0_value = MPUPW | MPUENA | MPULOCK;
#endif
其他
#ifdef _MPU_ENABLE_NMI
MPU_ctl0_value = MPUPW | MPUENA | MPUSEGIE;
其他
MPU_ctl0_value = MPUPW | MPUENA;
#endif
#endif
#endif
/ /
/*包括外设内存映射 */
/ /
l msp430fr5969.cmd
