打印
[51单片机]

C8051F350 flash擦除的问题求助

[复制链接]
3382|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zx2240|  楼主 | 2015-2-6 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我用的flash擦除程序,用软件仿真的时候可以擦除掉给定地址的扇区,但在线调试的时候发现程序一运行到*pwrite = 1;  语句时就会自动复位,没有实现擦除,不知道是怎么回事,求大神们帮忙啊!
void ClrFlash(uint addr)
{
          char xdata * data pwrite;
          EA = 0;                             //Disable interrupts
     //change clock speed to slow, then restore later
          VDM0CN = 0x80;                     // Enable VDD monitor
          RSTSRC = 0x02;                     // enable VDD monitor as a reset source
          pwrite = (char xdata *)addr;               
          FLKEY  = 0xA5;                      // Key Sequence 1
          FLKEY  = 0xF1;                      // Key Sequence 2
          PSCTL  = 0x03;                      // PSWE = 1; PSEE = 1
          VDM0CN = 0x80;                     // Enable VDD monitor
          RSTSRC = 0x02;                     // Enable VDD monitor as a reset source
          *pwrite = 1;                       // Initiate page erase
          PSCTL &= ~0x03;                    // PSWE = 0; PSEE = 0
          EA = 1;                       //Restore interrupts
}

相关帖子

沙发
ningling_21| | 2015-2-6 11:08 | 只看该作者
访问flash 指针应该是在code区吧

使用特权

评论回复
板凳
zx2240|  楼主 | 2015-2-6 13:13 | 只看该作者
ningling_21 发表于 2015-2-6 11:08
访问flash 指针应该是在code区吧

网上的例程都是这样写的,说是写Flash要用movx指令,必须把指针指向xdata类型,而且软件仿真的时候这样是正确的,确实擦除了...但是在线仿真的时候就不行...

使用特权

评论回复
地板
ningling_21| | 2015-2-6 14:27 | 只看该作者
本帖最后由 ningling_21 于 2015-2-6 14:37 编辑
zx2240 发表于 2015-2-6 13:13
网上的例程都是这样写的,说是写Flash要用movx指令,必须把指针指向xdata类型,而且软件仿真的时候这样是 ...

不用指针试试  ,用XBYTE[0x0100]=xxxx
或试试官方或应用笔记里的例程

使用特权

评论回复
5
zx2240|  楼主 | 2015-2-6 17:25 | 只看该作者
还是不可以,求助啊啊

使用特权

评论回复
6
xfcjava2| | 2015-2-6 19:38 | 只看该作者
这是原来我一直用过的,请放心使用:

void Flash_erase(unsigned int dest)
{
  bit EA_SAVE = EA;               // Preserve interrupt state

        unsigned int temp_dest;               // Temporary ULong

        unsigned char xdata * idata pwrite;     // FLASH write/erase pointer

        temp_dest= dest;               // copy <dest> to a byte
                                               // addressable unsigned long

        pwrite = (unsigned char xdata *) temp_dest;

        EA = 0;            // Disable interrupts
                                                               
        PSCTL |= 0x03;

        FLKEY =0xA5;
        FLKEY =0xF1;                       
                                                       
        *pwrite = 0x00;

        PSCTL = 0x00;

        EA = EA_SAVE;             // Restore interrupt state
}

使用特权

评论回复
7
zx2240|  楼主 | 2015-2-6 20:34 | 只看该作者
xfcjava2 发表于 2015-2-6 19:38
这是原来我一直用过的,请放心使用:

void Flash_erase(unsigned int dest)

我新建了个项目,拿这个程序单独试了下,能运行通过不复位了,但是flash上的对应地址没有被擦除掉...不知道为什么...感觉不是程序的上问题啊啊啊啊...手册上flash擦除部分的手册我都看过了,程序应该都没有问题...真心不知道为什么会这样子...

使用特权

评论回复
8
zx2240|  楼主 | 2015-2-6 21:16 | 只看该作者
xfcjava2 发表于 2015-2-6 19:38
这是原来我一直用过的,请放心使用:

void Flash_erase(unsigned int dest)

额,我发现在在线调试的时候只要在擦除之前先用memory窗口观察过flash的值就擦除不成功,否则就擦除成功了...这这这...终于找到问题了...谢谢!

使用特权

评论回复
9
linqing171| | 2015-2-7 10:26 | 只看该作者
PSCTL  = 0x03; 后 所有的movx都是访问到flash控制器,而不是xdata
如果keil中有watch/xdata的临时变量等等, 将会导致错误,甚至异常flash写

使用特权

评论回复
10
linqing171| | 2015-2-7 10:27 | 只看该作者
       PSCTL |= 0x03;
        PSCTL = 0x00;
这两句之间不可进入中断 也不可单步执行

使用特权

评论回复
11
受不了了| | 2015-2-7 12:09 | 只看该作者
这个擦除好像不能被打搅,操作又复杂,费劲,所以不敢用

使用特权

评论回复
12
csboo2006| | 2015-2-7 15:50 | 只看该作者
电源功率足够否?

使用特权

评论回复
13
cdf1214| | 2015-3-28 16:39 | 只看该作者
                 北京长实拓展电子有限公司
本公司主营TI. NXP. IR. ON. SiLicon                                                                                                       等著名世界品牌产品。
MSP430F一系列TI储存芯片 微控处理器
MSP430F149IPMR MSP430F5438AIPZR MSP430F5438IPZR等。
C8051F 一系列SILICON 单片机 微控处理器
C8051F020 C8051F120 C8051F340 C8051F040等
LPC一系列NXP单片机  
LPC2132FBD64 LPC2134FBD64 LPC2214FBD144  
LPC2378FBD144 LPC2292FBD144等一系列供应
专营:低压差 基准源 三 五 七端稳压 二三极管 场效应 快恢复 肖特基二极管 可控硅 达林顿 整流桥 TVS管 光藕 MAX AD 集成电路 
                   北京长实拓展电子销售:陈冬锋
                                     QQ:2850327057
                      电话:15711002528,13641144498

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝