登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

调试DM642外部FLASH奇怪的问题

作者:catiya 栏目:DSP技术
调试DM642外部FLASH奇怪的问题
能耐心看完的大侠,请多多指点,问题是这样的:

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)


2楼: >>参与讨论
aspl
是不是程序优化导致的哦
 
3楼: >>参与讨论
catiya
to 2楼
没有优化啊。能具体点吗?

4楼: >>参与讨论
catiya
自己顶一下
哪位帮我分析一下,估计是哪方面的原因?

参与讨论
昵称:
讨论内容:
 
 
相关帖子
关于5509A中实时时钟RTC的使用问题?
关于合众达公司的c5502测试程序的问题
请教一个AD采样的问题!!!很是疑惑
2407的中断
购买G729在C54XX上移植的代码
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号