调试DM642外部FLASH奇怪的问题

[复制链接]
3690|4
 楼主| catiya 发表于 2007-1-16 17:02 | 显示全部楼层 |阅读模式
能耐心看完的大侠,请多多指点,问题是这样的:<br /><br />DM642外括FLASH,型号是S29AL008D,大小是1M,采用8位模式,用来做Boot,现在Boot调通了,FLASH也能顺利写入和读出,但在擦除的过程中遇到一个奇怪的问题:<br /><br />假设我的主程序中仅包含如下语句:<br /><br />main()<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;data_source1&nbsp;=&nbsp;0x90000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVMDM642_FLASH_chiperase();&nbsp;&nbsp;//整片擦除<br />●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;&nbsp;j&lt0x100;&nbsp;j++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在前0xFF空间写入数据0x00到0xFF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_writeadata(data_source1+j,j);&nbsp;//写入一个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ReadDeviceID();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;现在如果我在for语句前面设个断点,在写入数据成功后,希望对整片FLASH进行擦除,则将程序运行到断点处(擦除完毕但没运行for语句),在CCS的0x90000000空间看到FLASH空间在一段时间后确实变成了0xFF,但系统掉电重启后,直接打开0x90000000,发现上次写如的数据依然存在,说明擦除实际上没有成功。<br />&nbsp;&nbsp;&nbsp;&nbsp;但是,如果我在写入数据后,将for语句中包含的函数换成ReadDeviceID()或是其他函数,同样执行到断点处(擦除完毕但也没运行for语句),或者干脆将擦除函数后面的语句全部注释掉,这样在CCS里也能看到擦除成功,而且掉电重启后,访问0x90000000空间,数据全是0xFF,实际擦除成功。<br />&nbsp;&nbsp;&nbsp;&nbsp;请问这个现象是什么原因?换了函数,没有执行,是不是编译的时候堆栈溢出什么的?请哪位帮我做一下问题定位,谢谢!<br />&nbsp;&nbsp;&nbsp;&nbsp;另外,EVMDM642_FLASH_chiperase()函数很简单,如下:<br />void&nbsp;EVMDM642_FLASH_chiperase(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Start&nbsp;chip&nbsp;erase&nbsp;sequence&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//BYTE&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTLAAA)&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTL555)&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTLAAA)&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTLAAA)&nbsp;=&nbsp;0xaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTL555)&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((Uint8&nbsp;*)EVMDM642_FLASH_CTLAAA)&nbsp;=&nbsp;0x10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10000000;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVMDM642_FLASH_CTLAAA是在另一个头文件里定义的外部常量:<br /><br />#define&nbsp;EVMDM642_FLASH_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x90000000<br />#define&nbsp;EVMDM642_FLASH_CTLAAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(EVMDM642_FLASH_BASE&nbsp;+&nbsp;0xaaa)<br />
aspl 发表于 2007-1-16 17:41 | 显示全部楼层

是不是程序优化导致的哦

  
 楼主| catiya 发表于 2007-1-17 12:28 | 显示全部楼层

to 2楼

没有优化啊。能具体点吗?
 楼主| catiya 发表于 2007-1-23 12:29 | 显示全部楼层

自己顶一下

哪位帮我分析一下,估计是哪方面的原因?
lida1204 发表于 2007-5-24 10:16 | 显示全部楼层

hi,我用S29AL008D,也遇到问题

flash&nbsp;操作时状态反馈,以及读chip&nbsp;ID都和datasheet不一样,能否给一下,你读写、boot的程序,谢谢先!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

235

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部