首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

对FLAHS操作引起的“事故”!

对FLAHS操作引起的“事故”!

使用的是9S12XDT512,BANKED模式。

简单描述一下“事故”发生的经过:在成功对FLASH进行擦除和写操作后,我想测试一下FLASH擦写全过程的消耗时间,结果发现擦除操作花了22个ms(总线频率40M,使用的是sector erase指令—0x40),而写入操作是us级的,由于感觉擦除操作的时间太长,于是我想换一条擦写指令,就用了mass erase指令—0x41(事后才想起来这个是全擦除!)。结果烧录之后,发现程序跑不起来,于是我赶紧又将程序改回去,再编译之后,启动BDM的时候,就发现一直在报错,无法连上!

是不是我把MCU中驻留的与BDM相关的代码也擦除掉了!有什么办法恢复吗?

另外,9S12XDT512的FLASH操作是否没有字擦除的指令?FLASH擦除的时间真的要那么长吗?

找到原因了! 因为在64K的FLASH地址的0xFFFE地址存放的是启动程序的入口地址,如果使用全擦除指令,就可能将这部分也擦除,导致程序无法正常启动,所以在BDM中仿真运行时,出于某种保护机制,将FLASH区锁住了。如果要恢复,在修改了程序之后,并启动BDM,在仿真界面,在MultilinkCyclonePro选项下,选择Unsecure... 即可。
返回列表