C8051F350 flash擦除的问题求助

2019-03-24 18:06发布

下面是我用的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
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
zx2240
1楼-- · 2019-03-25 03:53
找到问题了,我擦除的地址是flash保留地址空间之前的最后一个扇区,擦除是整个扇区擦除,不知道擦掉了什么不该擦的东西,如果把擦除地址设在其他的扇区就不会出现复位了....另外...我发现在在线调试的时候只要在擦除之前先用memory窗口观察过flash的值就擦除不成功,否则就擦除成功了...这这这...
dcexpert
2楼-- · 2019-03-25 07:36
 精彩回答 2  元偷偷看……
zca123
3楼-- · 2019-03-25 09:44
//***********************************************************************************************
//
//flashò3Çå3y
//2Îêy£oÄ¿±êμØÖ·
//·μ»Ø£o0£o꧰ü£¬1£o3é1|
//Time£o2013.12.16
//
//***********************************************************************************************
unsigned char Flash_PageErase (FLASHADDR addr)
{
   bit EA_SAVE = EA;                   // Preserve EA
   unsigned char xdata * data pwrite;             // FLASH write pointer
   unsigned char i;

   EA = 0;                           
   RSTSRC = 0x00;                     
   VDM0CN = 0xA0;                     
   for (i = 0; i < 255; i++);
   if (!(VDM0CN & 0x40))               
      return 1;                        
   RSTSRC = 0x02;                                                           
   pwrite = (unsigned char xdata *) addr;
                                   
   FLKEY  = 0xA5;                      // Key Sequence 1
   FLKEY  = 0xF1;                      // Key Sequence 2
   PSCTL |= 0x03;                      // PSWE = 1; PSEE = 1

   VDM0CN = 0xA0;                     
   RSTSRC = 0x02;                     
   *pwrite = 1;                       

   RSTSRC = 0x00;                                                         
   VDM0CN = 0x80;                     
   RSTSRC = 0x02;                                                            
   PSCTL &= ~0x03;                    

   EA = EA_SAVE;                     
   return 0;
}
zx2240
4楼-- · 2019-03-25 14:48
本帖最后由 zx2240 于 2015-2-6 10:47 编辑
dcexpert 发表于 2015-2-6 10:27
是不是电源的问题。写flash时开了电源监视,这样电压不稳时就自动复位了。应该不是吧,我把电源监视都注释掉仍然是这样子...不过仍然很感谢



zx2240
5楼-- · 2019-03-25 19:34
 精彩回答 2  元偷偷看……
zca123
6楼-- · 2019-03-25 22:23
这段程序是我的程序里使用的。没有出现问题

一周热门 更多>