msp430的flash要怎么操作才好?
现在用msp430的flash保存数据有两个地方不明白:
1、主频调高了对它有什么影响,因为在操作设置里面没看到设置频率的寄存器;
2、flash可以不擦除直接写吧 是info,这个和flash有什么区别啊 flash肯定要先擦后写的 dadongleilei 发表于 2014-3-3 16:47
flash肯定要先擦后写的
不知你有没有用过msp430的,我现在用的,有一个地方的flash总是无法写进去,
看芯片资料,有四个infomation 的flash模块,我现在能写到三个,还有一个看不出来,不知道为什么写不进去的 430我用过,里面的info也用过,但我用的只有2个,注意下 你操作的时钟 看看手册 是不是满足时序上的要求,另外 都有示例代码的,弄起来 不麻烦 看你用哪一系列,5系列的没有调FLASH频率的寄存器,低系列的好像都有,最好按照数据手册上的频率区间调,太高太低都不好,我咨询过TI的技术支持,调太高能写,但不保证数据的完整性,问题是他还说就算频率正确也不保证数据的完整性,我当场就无语了...
吃过一次亏,写进去的数据发现偶尔会不正确。最好写完后立即读一遍校验下和写入是否一致。
现在基本上不用430的info段了,就算用也只存一些几乎不怎么改动的数据,写的时候还反复读取校验以确认写入正确。 再回答第二个问题:需要擦除再写,一次只能整段擦,不能只擦一个字节。 dalarang 发表于 2014-3-4 15:19
看你用哪一系列,5系列的没有调FLASH频率的寄存器,低系列的好像都有,最好按照数据手册上的频率区间调,太 ...
我现在用的就是5系的,没调频率,主频是16M的,不清楚数据稳定性怎么样
我的那个不能写的问题现在搞定了,是 SEG A有点特殊,单独加了一个锁在寄存器位
不知道你说的数据稳定性要怎么弄,我现在没加检查,存储的数据还是比较重要的,而且数据有点大,目前就有160byte,到时候可能达到300多 byte,
这个写的话好像很花时间啊,我现在都可以看到数码管在闪烁了,如果再加上校验时间就更长了 dalarang 发表于 2014-3-4 15:21
再回答第二个问题:需要擦除再写,一次只能整段擦,不能只擦一个字节。
现在还发现,info A很特殊啊,我重新烧录程序,那里面的数据不会被擦出。。 info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是灰色的不让擦。
5系列的数据完整性没试过,还是加上校验比较保险。300多字节校验时间也是很短的啦。 dalarang 发表于 2014-3-4 16:45
info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是 ...
测试了一下,写一个两个info ,总共160个字节,花费时间64ms。。 dalarang 发表于 2014-3-4 16:45
info A出厂时存储了一些DCO校正的数据,或者还有其它一些东西,所以一般不让动。在编程器的擦除选项中也是 ...
发现时间主要花在配置寄存器了,不理解
总共配置寄存器6,7行,确花了最少20ms的时间,不可思议,真正写120个字节不到10ms,
时间会不会是是是花在擦出的操作上了?
*Flash_ptrD = 0; // Dummy write to erase Flash seg
这一句是把所有的数据都擦出的意思?flash可以这样擦出的? lz应该仔细看看430的手册,还有430专门针对flash操作的例程 orzorzorzorz 发表于 2014-3-5 20:36
lz应该仔细看看430的手册,还有430专门针对flash操作的例程
看了例程的,很简单啊 isakura 发表于 2014-3-5 15:28
发现时间主要花在配置寄存器了,不理解
总共配置寄存器6,7行,确花了最少20ms的时间,不可思议,真正写1 ...
是这样擦除的,先配置寄存器擦除,然后对擦除的段写一个任意字节,就擦除该段。
FLASH的擦除是需要时间的,我记得擦除时是不能对FLASH进行读写操作的,20ms的时间大致上差不多。
时间应该不是关键,主要是存储的频度,如果是几秒至几分钟存储一次的,建议不要保存在INFO段,FLASH擦写是有寿命的。
保存不频繁的数据可以用INFO段,否则用EEPROM,如果对成本不敏感且读写速度要求较高的就用铁电。
isakura 发表于 2014-3-4 15:39
现在还发现,info A很特殊啊,我重新烧录程序,那里面的数据不会被擦出。。 ...
有个寄存器有个LOCK_A位,你查下手册,这个是单独控制info A的擦鞋的 34071417 发表于 2014-3-6 19:27
有个寄存器有个LOCK_A位,你查下手册,这个是单独控制info A的擦鞋的
谢谢,现在看到了 信息区跟代码区是分开的,,编译器有选项可以设置编程时是否擦除信息区,,另外信息区从地址 0x1000开始 共256byte 我的 有时读出来 正确 有时不正确郁闷
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() ;
} wind2100 发表于 2014-6-4 14:38
我的 有时读出来 正确 有时不正确郁闷
void Read_value_to_flash(void)
{
你的Flash开头是0x1000?还有flash读取不需要关中断啊 isakura 发表于 2014-6-4 16:16
你的Flash开头是0x1000?还有flash读取不需要关中断啊
嗯后面找到问题了 读和写的顺序 弄反了
这IC看门狗 没有单独的时钟 是个问题
8M 系统时钟,我在写FLASH的时候 占用20MS 结果看门狗 就没有用了. 乱叫... wind2100 发表于 2014-6-4 17:28
嗯后面找到问题了 读和写的顺序 弄反了
这IC看门狗 没有单独的时钟 是个问题
请问你用过这个串口功能呢吗?我现在进入低功耗模式串口好像没关闭。。
http://www.amobbs.com/forum.php?mod=viewthread&tid=5583381&page=1#pid7588945 isakura 发表于 2014-6-4 17:45
请问你用过这个串口功能呢吗?我现在进入低功耗模式串口好像没关闭。。
http://www.amobbs.com/forum.ph ...
串口 我还没用
但我知道低功耗时,中断就可以唤醒
你开了低功耗你不唤醒 怎么可能退出来的!
页:
[1]