世纪电源网社区logo
社区
Datasheet
标题
返回顶部
讨论

需要用msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后保存数据

[复制链接]
查看: 231 |回复: 3
1
沧浪一生
  • 积分:413
  • |
  • 主题:14
  • |
  • 帖子:63
积分:413
LV6
高级工程师
  • 2023-3-24 11:15:28
需要用MSP430G2553的flash掉电后保存一些数据,这些数据能写入flash的息区地址D段,在不掉电的情况下,也能读取。一旦掉电后,再读就是0xff。
我的读写函数如下 通过按键将数据写入flash,上电后在main函数中先读取flash数据,但是都为0xff 读写程序参考自大神:
//FLASH段擦除void flash_erase(unsigned int *pc_word)
{

while(FCTL3 & BUSY); //如果处于忙状态,则等待 FCTL3 = FWKEY ; //清出LOCK标志,解锁
FCTL1 = FWKEY + ERASE ; //允许段擦除
*pc_word = 0; //擦除..擦除..
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK ; //加锁!!

}

//******************************************************************************//向FLASH信息区读出指定数量的字节数据
//unsigned int*pc_word :信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void read_array(unsigned char *pc_byte, unsigned char *array,unsigned char amount)
{

unsigned char i; if(amount<=127)
{
for(i=0;i< amount;i++)
{
*array = *pc_byte; //读数据,读数据时,flash地址自动加 1 ??
array++; //接收缓冲区地址加 1
pc_byte++;
}
}

}

//******************************************************************************//向FLASH信息区写入指定数量的字节数据
//unsigned char *pc_byte 信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void write_array(unsigned char *pc_byte,unsigned char *array, unsigned char amount)
{

unsigned char i;
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL3 = FWKEY ; //清出LOCK标志
FCTL1 = FWKEY + WRT ; //写操作,块编程,+ BLKWRT;

if(amount<=127)
{
for(i=0;i < amount;i++)
{
*pc_byte = *array;
//*pc_byte = num;
// num +=1;
array++; //发送缓冲区地址加 1
pc_byte++; //写flash时,地址人为加 1
while(!(FCTL3 & WAIT)); //如果处于忙状态,则等待 ,若用软件仿真,去掉                 //这语句
}

}
FCTL1 = FWKEY; //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK; //加锁!!

}
Free
  • Free
  • 离线
  • LV3
  • 助理工程师
  • 积分:267
  • |
  • 主题:1
  • |
  • 帖子:26
积分:267
LV3
助理工程师
  • 2023-3-29 14:52:22
  • 倒数3
 
  • 设置IAR , options-> FET Debugger->Download:
    在Flash erase 栏目中,有三个选项,分别是
    1. 只擦除主存储区
    2. 擦除主存储区和信息区
    3. 保留未改变的存储区。
    选择第一项

  • 然后只烧写写入Flash程序,单步调试,调出FLASH窗口,可以看到写入后的数据;

  • 如果写入数据不对,请试试在写入之前配置好FNx(分频,257K~476K)或关其它中断



飞起来的猪
  • 积分:300
  • |
  • 主题:6
  • |
  • 帖子:24
积分:300
LV4
初级工程师
  • 2023-3-31 14:09:35
  • 倒数2
 
Flash本来就不能掉电保存数据吧?
z443233785
  • 积分:5343
  • |
  • 主题:117
  • |
  • 帖子:1003
积分:5343
LV8
副总工程师
最新回复
  • 2023-4-2 19:41:51
  • 倒数1
 
不会丢失的。但是你在初始化的时候可能有一个擦写flash的语句。这个你要设置一个标志,第一次上电的时候擦写flash,以后重启的时候就不再擦写。你可以自己将flash规划一个地址用来存放这个flag,每次上电的时候判断这个flag,就不会丢失了
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号