世纪电源网社区logo
社区
Datasheet
标题
返回顶部
未解决

MSP430 写用户FLASH时 复位/死机 的解决办法?

[复制链接]
查看: 224 |回复: 4
1
904091S
  • 积分:655
  • |
  • 主题:20
  • |
  • 帖子:120
积分:655
LV6
高级工程师
  • 2023-3-20 15:57:29
10问答币
源代码如下:
void FlashWrite(unsigned short dest,unsigned char * local,unsigned char count){
FCTL1=FWKEY+WRT;
FCTL3=FWKEY;

for(unsigned char i=0;i<count;i++){
while(FlashBusy()==1);
*((unsigned char *)(dest + i))=local;
while(FlashBusy()==1);
}

FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
}
不规律的出现,平均概率大概为1/7左右。

收藏收藏
第九区
  • 积分:552
  • |
  • 主题:35
  • |
  • 帖子:60
积分:552
LV6
高级工程师
  • 2023-3-20 16:22:22
  • 倒数4
 
在写flash之前需要对相应的扇区进行擦除,否则数据就会出错。因为430的flash是“与”结构,只能通过向某一位写0将该位拉低,比如复位值是0xFF,先写入0x0F将高4位变成0,如果不擦除(即将该位重新置为0xFF)再向该地址写入0xF0,该地址的值就会变成0x00,而不是想要的0xF0。
你所出现的死机可能是你擦除或者写入的时候将原来的程序块改变了,比如原来程序是在0x2000地址开始的地方,你写入的数据和它在一个地址就会导致程序错误,程序跑飞,使单片机死机。
qlnveder164
  • 积分:572
  • |
  • 主题:19
  • |
  • 帖子:67
积分:572
LV6
高级工程师
  • 2023-3-20 16:25:18
  • 倒数3
 
是不是写等待时间长了,导致看门狗复位了
还有,你这应是写MSP430内部flash,整个函数要禁止中断的。




904091S
  • 积分:655
  • |
  • 主题:20
  • |
  • 帖子:120
积分:655
LV6
高级工程师
  • 2023-3-21 10:05:52
  • 倒数2
 
看门狗复位的情况基本可以排除掉了,自带的看门狗已经停掉了,我也加上屏蔽中断的语句了,试过也不见好,就是_DINT();  和 _EINT();这两条语句么?
qlnveder164
  • 积分:572
  • |
  • 主题:19
  • |
  • 帖子:67
积分:572
LV6
高级工程师
最新回复
  • 2023-3-21 13:17:59
  • 倒数1
 
函数前面加__monitor也成。写flash要保证别写到code段了,需要设置.xcl文件。写flash是要分页写的。网上有写信息段和内部flash的程序,你可以参考一下。
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦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号