2177|2

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430G2452 Flash修改信息段InfoFlash指定地址处的值,一直实现不了,求教 [复制链接]

本帖最后由 tuyafei 于 2014-5-28 18:56 编辑

FlashModifyChar(...)进行测试时,实现不了对应段地址处修改其存储的数据,请高人指点,谢谢。。。思路是将该数据段中的值先保存到数组TempArry[SegSize],然后修改指定的TempArry[Addrnum]里的值,再将临时保存在
数组中的值全部回写到该数据段。调试过程中,发现一直有问题,实现不了预期效果,请高人指点一二,不甚感激。
  1. /********************Flash 修改字节********************/
  2. void FlashModifyChar(uint SegX,char AddrNum,char wdata)
  3. {
  4.   char i,TempArry[SegSize];
  5.   for(i=0;i<SegSize;i++)
  6.   {
  7.     TempArry[i]=*(uint*)(SegX+i);
  8.   }
  9.   TempArry[AddrNum]= wdata; //在数组中的某一位置 AddrNum 写入 wdata
  10.   FlashErase(SegX);//段擦除
  11.   _DINT();
  12.   FCTL1=FWKEY+WRT+BLKWRT;//批量写模式
  13.   FCTL3=FWKEY;//开锁
  14.   for(i=0;i<SegSize;i++)
  15.   {
  16.     *(uint*)(SegX+i)=TempArry[i];
  17.     while((FCTL3&WAIT)==0);//等待字节写完成
  18.   }
  19.   FCTL1=FWKEY; //写关闭
  20.   while(FCTL3&BUSY);//等待块写操作完成
  21.   FCTL3=FWKEY+LOCK; //上锁
  22.   _EINT();
  23. }
复制代码


测试代码:
  1. #include "msp430g2452.h"
  2. #include "Flash.h"
  3. #include "BascClock.h"
  4. /****************************************************
  5. g2553 有 4 个数据段,每个数据段有 64bytes,共 256bytes
  6. D:0x1000 -- 0x103F
  7. C:0x1040 -- 0x107F
  8. B:0x1080 -- 0x10BF
  9. A:0x10C0 -- 0x10FF
  10. ****************************************************/
  11. void main()
  12. {
  13.   char ReadChar;
  14.   uint ReadWord;
  15.   int p[]={'a','b','c','d'};
  16.   WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  17.   BascClockInit();//时钟初始化,MCLK为8MHz DCO时钟,SMCLK为LF,ACLK为XT1 32768Hz
  18.   FlashInit();
  19.   FlashErase(SegA);
  20.   FlashErase(SegB);
  21.   FlashErase(SegC);
  22.   FlashErase(SegD);
  23.   FlashWriteChar(0x01007,0x12); //向地址 01007h 写入 12h
  24.   ReadChar=FlashReadChar(0x01007); //读取地址 01007h 的值
  25.   FlashWriteWord(0x01008,0x3456); //向地址 01008h 和 01009h 依次写入 56h 和 34h
  26.   ReadWord=FlashReadWord(0x01008); //读取从地址 01008h 起的一个字
  27.   FlashWriteChar(0x01017,ReadChar); //向地址 01017h 写入 12h
  28.   FlashWriteWord(0x01018,ReadWord); //向地址 01018h 和 0109h 依次写入 56h 和34h
  29.   FlashBurstWrite(SegC,p); //向 SegC 段从地址 1040h 依次写入 a、 b、 c、d
  30.   FlashModifyChar(SegD,10,0x57); //将地址 0112h 和 0113h 内容改为 e 和 f
  31.   _BIS_SR(CPUOFF);   //关闭 CPU
  32. }
复制代码

430Flash.rar

146.32 KB, 下载次数: 7

IAR文件

最新回复

mark 首先infoA不能随便擦除呀,里面有出厂校准数据的  详情 回复 发表于 2014-5-28 22:17
 
点赞 关注

回复
举报

5276

帖子

5

TA的资源

裸片初长成(中级)

沙发
 
mark

首先infoA不能随便擦除呀,里面有出厂校准数据的

点评

恩恩 ,是的呢,难怪有些段数据一致擦不了,估计有保护机制。放到主Flash段内 程序代码外的空间测试应该可以的,回头试看看,谢啦。  详情 回复 发表于 2014-5-29 16:56
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
wangfuchong 发表于 2014-5-28 22:17
mark

首先infoA不能随便擦除呀,里面有出厂校准数据的

恩恩 ,是的呢,难怪有些段数据一致擦不了,估计有保护机制。放到主Flash段内 程序代码外的空间测试应该可以的,回头试看看,谢啦。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表