isakura 发表于 2014-3-3 10:27:02

msp430的flash要怎么操作才好?

现在用msp430的flash保存数据

有两个地方不明白:

1、主频调高了对它有什么影响,因为在操作设置里面没看到设置频率的寄存器;

2、flash可以不擦除直接写吧

isakura 发表于 2014-3-3 10:33:40

是info,这个和flash有什么区别啊

dadongleilei 发表于 2014-3-3 16:47:38

flash肯定要先擦后写的

isakura 发表于 2014-3-4 10:50:52

dadongleilei 发表于 2014-3-3 16:47
flash肯定要先擦后写的

不知你有没有用过msp430的,我现在用的,有一个地方的flash总是无法写进去,

看芯片资料,有四个infomation 的flash模块,我现在能写到三个,还有一个看不出来,不知道为什么写不进去的

dadongleilei 发表于 2014-3-4 11:27:52

430我用过,里面的info也用过,但我用的只有2个,注意下 你操作的时钟 看看手册 是不是满足时序上的要求,另外 都有示例代码的,弄起来 不麻烦

dalarang 发表于 2014-3-3 10:27:03

看你用哪一系列,5系列的没有调FLASH频率的寄存器,低系列的好像都有,最好按照数据手册上的频率区间调,太高太低都不好,我咨询过TI的技术支持,调太高能写,但不保证数据的完整性,问题是他还说就算频率正确也不保证数据的完整性,我当场就无语了...
吃过一次亏,写进去的数据发现偶尔会不正确。最好写完后立即读一遍校验下和写入是否一致。
现在基本上不用430的info段了,就算用也只存一些几乎不怎么改动的数据,写的时候还反复读取校验以确认写入正确。

dalarang 发表于 2014-3-4 15:21:12

再回答第二个问题:需要擦除再写,一次只能整段擦,不能只擦一个字节。

isakura 发表于 2014-3-4 15:37:08

dalarang 发表于 2014-3-4 15:19
看你用哪一系列,5系列的没有调FLASH频率的寄存器,低系列的好像都有,最好按照数据手册上的频率区间调,太 ...

我现在用的就是5系的,没调频率,主频是16M的,不清楚数据稳定性怎么样

我的那个不能写的问题现在搞定了,是 SEG A有点特殊,单独加了一个锁在寄存器位

不知道你说的数据稳定性要怎么弄,我现在没加检查,存储的数据还是比较重要的,而且数据有点大,目前就有160byte,到时候可能达到300多 byte,
这个写的话好像很花时间啊,我现在都可以看到数码管在闪烁了,如果再加上校验时间就更长了

isakura 发表于 2014-3-4 15:39:11

dalarang 发表于 2014-3-4 15:21
再回答第二个问题:需要擦除再写,一次只能整段擦,不能只擦一个字节。

现在还发现,info A很特殊啊,我重新烧录程序,那里面的数据不会被擦出。。

dalarang 发表于 2014-3-4 16:45:45

info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是灰色的不让擦。
5系列的数据完整性没试过,还是加上校验比较保险。300多字节校验时间也是很短的啦。

isakura 发表于 2014-3-5 11:57:50

dalarang 发表于 2014-3-4 16:45
info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是 ...

测试了一下,写一个两个info ,总共160个字节,花费时间64ms。。

isakura 发表于 2014-3-5 15:28:10

dalarang 发表于 2014-3-4 16:45
info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是 ...

发现时间主要花在配置寄存器了,不理解

总共配置寄存器6,7行,确花了最少20ms的时间,不可思议,真正写120个字节不到10ms,

时间会不会是是是花在擦出的操作上了?

*Flash_ptrD = 0;                        // Dummy write to erase Flash seg

这一句是把所有的数据都擦出的意思?flash可以这样擦出的?

orzorzorzorz 发表于 2014-3-5 20:36:50

lz应该仔细看看430的手册,还有430专门针对flash操作的例程

isakura 发表于 2014-3-6 09:11:42

orzorzorzorz 发表于 2014-3-5 20:36
lz应该仔细看看430的手册,还有430专门针对flash操作的例程

看了例程的,很简单啊

dalarang 发表于 2014-3-6 09:23:50

isakura 发表于 2014-3-5 15:28
发现时间主要花在配置寄存器了,不理解

总共配置寄存器6,7行,确花了最少20ms的时间,不可思议,真正写1 ...

是这样擦除的,先配置寄存器擦除,然后对擦除的段写一个任意字节,就擦除该段。
FLASH的擦除是需要时间的,我记得擦除时是不能对FLASH进行读写操作的,20ms的时间大致上差不多。

时间应该不是关键,主要是存储的频度,如果是几秒至几分钟存储一次的,建议不要保存在INFO段,FLASH擦写是有寿命的。
保存不频繁的数据可以用INFO段,否则用EEPROM,如果对成本不敏感且读写速度要求较高的就用铁电。

34071417 发表于 2014-3-6 19:27:54

isakura 发表于 2014-3-4 15:39
现在还发现,info A很特殊啊,我重新烧录程序,那里面的数据不会被擦出。。 ...

有个寄存器有个LOCK_A位,你查下手册,这个是单独控制info A的擦鞋的

isakura 发表于 2014-3-7 09:09:39

34071417 发表于 2014-3-6 19:27
有个寄存器有个LOCK_A位,你查下手册,这个是单独控制info A的擦鞋的

谢谢,现在看到了

J.H.Chen 发表于 2014-3-13 12:00:51

信息区跟代码区是分开的,,编译器有选项可以设置编程时是否擦除信息区,,另外信息区从地址 0x1000开始 共256byte

wind2100 发表于 2014-6-4 14:38:45

我的 有时读出来 正确 有时不正确郁闷
void Read_value_to_flash(void)
{
    u8 *Flash_ptr;                        // Flash pointer

    _DINT();

    _NOP();
    _NOP();
    Flash_ptr = (u8 *) 0x1000;            //赋初始地址

         PWM1_duty_cycle         = UcharToWord(*Flash_ptr++,*Flash_ptr++);
        X         = *Flash_ptr++;
        Y               = UcharToLONG(*Flash_ptr++,*Flash_ptr++,*Flash_ptr++,*Flash_ptr++);
        Z         = UcharToWord(*Flash_ptr++,*Flash_ptr++);

    _EINT() ;
}

isakura 发表于 2014-6-4 16:16:03

wind2100 发表于 2014-6-4 14:38
我的 有时读出来 正确 有时不正确郁闷
void Read_value_to_flash(void)
{


你的Flash开头是0x1000?还有flash读取不需要关中断啊

wind2100 发表于 2014-6-4 17:28:44

isakura 发表于 2014-6-4 16:16
你的Flash开头是0x1000?还有flash读取不需要关中断啊

嗯后面找到问题了 读和写的顺序 弄反了

这IC看门狗 没有单独的时钟 是个问题

8M 系统时钟,我在写FLASH的时候 占用20MS 结果看门狗 就没有用了. 乱叫...

isakura 发表于 2014-6-4 17:45:46

wind2100 发表于 2014-6-4 17:28
嗯后面找到问题了 读和写的顺序 弄反了

这IC看门狗 没有单独的时钟 是个问题


请问你用过这个串口功能呢吗?我现在进入低功耗模式串口好像没关闭。。

http://www.amobbs.com/forum.php?mod=viewthread&tid=5583381&page=1#pid7588945

wind2100 发表于 2014-6-4 19:56:08

isakura 发表于 2014-6-4 17:45
请问你用过这个串口功能呢吗?我现在进入低功耗模式串口好像没关闭。。

http://www.amobbs.com/forum.ph ...

串口 我还没用
但我知道低功耗时,中断就可以唤醒

你开了低功耗你不唤醒 怎么可能退出来的!
页: [1]
查看完整版本: msp430的flash要怎么操作才好?