打印

调试DM642外部FLASH奇怪的问题

[复制链接]
2777|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
catiya|  楼主 | 2007-1-16 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
能耐心看完的大侠,请多多指点,问题是这样的:

DM642外括FLASH,型号是S29AL008D,大小是1M,采用8位模式,用来做Boot,现在Boot调通了,FLASH也能顺利写入和读出,但在擦除的过程中遇到一个奇怪的问题:

假设我的主程序中仅包含如下语句:

main()
{      
       Uint32 j;
       Uint32 data_source1 = 0x90000000;
       EVMDM642_FLASH_chiperase();  //整片擦除
●     for(j=0; j<0x100; j++)       //在前0xFF空间写入数据0x00到0xFF
          {    
             FLASH_writeadata(data_source1+j,j); //写入一个字节
              //ReadDeviceID();
           }
       while(1)
       ;    
}

    现在如果我在for语句前面设个断点,在写入数据成功后,希望对整片FLASH进行擦除,则将程序运行到断点处(擦除完毕但没运行for语句),在CCS的0x90000000空间看到FLASH空间在一段时间后确实变成了0xFF,但系统掉电重启后,直接打开0x90000000,发现上次写如的数据依然存在,说明擦除实际上没有成功。
    但是,如果我在写入数据后,将for语句中包含的函数换成ReadDeviceID()或是其他函数,同样执行到断点处(擦除完毕但也没运行for语句),或者干脆将擦除函数后面的语句全部注释掉,这样在CCS里也能看到擦除成功,而且掉电重启后,访问0x90000000空间,数据全是0xFF,实际擦除成功。
    请问这个现象是什么原因?换了函数,没有执行,是不是编译的时候堆栈溢出什么的?请哪位帮我做一下问题定位,谢谢!
    另外,EVMDM642_FLASH_chiperase()函数很简单,如下:
void EVMDM642_FLASH_chiperase(void)
{
            Uint32 i;
        
            /* Start chip erase sequence */
                                    
            //BYTE mode
            *((Uint8 *)EVMDM642_FLASH_CTLAAA) = 0xaa;
            *((Uint8 *)EVMDM642_FLASH_CTL555) = 0x55;
            *((Uint8 *)EVMDM642_FLASH_CTLAAA) = 0x80;
            *((Uint8 *)EVMDM642_FLASH_CTLAAA) = 0xaa;
            *((Uint8 *)EVMDM642_FLASH_CTL555) = 0x55;
            *((Uint8 *)EVMDM642_FLASH_CTLAAA) = 0x10;
            
            for(i=0; i<10000000; i++)
            ;         
      
}
         EVMDM642_FLASH_CTLAAA是在另一个头文件里定义的外部常量:

#define EVMDM642_FLASH_BASE          0x90000000
#define EVMDM642_FLASH_CTLAAA        (EVMDM642_FLASH_BASE + 0xaaa)

相关帖子

沙发
aspl| | 2007-1-16 17:41 | 只看该作者

是不是程序优化导致的哦

使用特权

评论回复
板凳
catiya|  楼主 | 2007-1-17 12:28 | 只看该作者

to 2楼

没有优化啊。能具体点吗?

使用特权

评论回复
地板
catiya|  楼主 | 2007-1-23 12:29 | 只看该作者

自己顶一下

哪位帮我分析一下,估计是哪方面的原因?

使用特权

评论回复
5
lida1204| | 2007-5-24 10:16 | 只看该作者

hi,我用S29AL008D,也遇到问题

flash 操作时状态反馈,以及读chip ID都和datasheet不一样,能否给一下,你读写、boot的程序,谢谢先!

使用特权

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

本版积分规则

45

主题

228

帖子

2

粉丝