用MSP430G2553做产品,开发的时候用FET430UIF仿真器来写程序到目标板,最近发现一个奇怪的现象。
FLASH信息段1000-103F我用来存放一些如仪表编号之类的信息。单片机上电运行时首先检查地址0x1000是否为01,不为01的话清除该段,并将默认初始化数据写入。
但我发现有个别板子在仿真运行的时候,写入的默认数据是错误的,例如地址0x1001写入默认的是00H,但仿真运行后却发现该地址被写入了01H,我检查过程序是没有问题的,写FLASH前也有关闭中断,写的数据也是没错的,但运行后检查该地址,发现数据和写入的不一致。更诡异的是,如果在一些会写入错误值的地方加断点,仿真运行到此后,IAR自动暂停,再点go运行,再检查写入的数据就是正确的。如果用仿真器将程序写入单片机,但不仿真运行,而是在IAR中断开仿真器,然后复位单片机让它自动运行,然后再检查写入的数据也是正确的。
目前这种情况只是偶尔出现在几块板子上,多数板子都是能正确写入数据的。只有几块会出现仿真的时候写入数据错误,不进行仿真而让单片机自己运行的时候就不会导致写入错误。
这种情况比较可能是哪里的问题?
芯片MSP430G2553,软件环境IAR for msp430 5.50,仿真器用LSD-FET430UIF,采用JTAG8根线连接