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

MSP430F2132的flash上的数据改变

TI专家

    你们好,我们产品由于PCB空间有限,所以在数据存储时用到了430 本身的flash空间,当数据有改变时我会擦除掉原有的数据,再写入新的数据。

    现在的问题是有的430的flash在经过多次改写后某些字节的数据会发生改变,并不是每次改写flash都会出错,大概会有千分之一的概率出现这种错误

    我查找了一下原因,发现原因可能如下:

    产品前期使用的时钟为1M,在对flash进行初始化时有使用了这个语句:FCTL2 = FWKEY + FSSEL_2 + FN1;闪存控制器时钟为0.33MHz

    产品后期使用的时钟改为8M,忘记更改flash闪存控制器时钟分频器,依旧是FCTL2 = FWKEY + FSSEL_2 + FN1;,这导致闪存控制器时钟为2.67MHz

    这个是不是导致flash数据有些字节会改变的原因?

    如果是这个原因导致的,前期的产品已经交付,不可能再修改已烧录的程序,不过已交付的产品不会对flash进行修改,只会从flash上读取数据,如果闪存控制器时钟为2.67MHz,从flash上读取数据错误的可能性有多大?

    谢谢!

灰小子:

flash的操作频率必须是257K到476K之间

工作电压不能小于2.7V

不符合这两个要求,结果不可预测

zhenglong zhu1:

回复 灰小子:

    在datasheet看到“During flash memory programming”的电压范围是2.2V-3.6V,产品是3.3V供电,符合要求,我刚才又检查了一下代码,flash的操作频率确实是2.67MHz,这两天我试着重现错误,但都没有成功,说明在这个频率下向flash写入数据出现的错误的几率很低。有可能不是这个原因造成flash数据出错?我很疑惑

    同时MCU还进行AD采集,对AD的配置如下ADC10CTL0 |= SREF_0 + ADC10SHT_2 + MSC + REF2_5V + REFON;ADC10CTL1 |= ADC10SSEL_3 + INCH_4 + CONSEQ_2;    根据datasheet上的说明“The first rising edge of the SHI signal triggers the sampling timer, but further sample-andconversions are performed automatically as soon as the prior conversion is completed”,AD在上次转换完成之后紧接着进行下一次转换。AD采集会不会对flash数据写入造成影响?

灰小子:

回复 zhenglong zhu1:

擦除和写flash的时候中断关了吗?

zhenglong zhu1:

回复 灰小子:

在擦除和写的flash时候把中断关上了,完成后又打开的,下面这个函数是写flash的

void flashWriteData(uint8 *source, uint8 *dest, uint16 length){    FCTL1 = FWKEY + WRT; /* Set WRT bit for write operation */    FCTL3 = FWKEY; /* Clear Lock bit */    DINT;    for (uint16 i = 0; i < length; i++)    {        dest[i] = source[i];    }    waitForEnable(); /* Busy */    EINT;    FCTL1 = FWKEY; /* Clear WRT bit */    FCTL3 = FWKEY + LOCK; /* Set LOCK bit */}

擦除flash函数和写flash思路相同。

我现在觉得有可能一下两个原因导致的flash数据有变化:

1、flash控制器频率误改为2.67M(但我在高温、低温和常温下做了很多次试验,都没有出现flash数据改变情况出现)

2、AD运行导致往flash写数据时受到干扰(这个可能是我的臆测)

你怎么看

灰小子:

回复 zhenglong zhu1:

1、该问题前面已经回复,不再重复

2、ad运行有没有操作flash?如果没有,理论上不会影响flash写数据的。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F2132的flash上的数据改变
分享到: 更多 (0)