sst29sf040当作数据存储器,数据会丢失吗?

[复制链接]
4584|17
 楼主| ccjchen 发表于 2007-9-26 21:13 | 显示全部楼层 |阅读模式
请问各位大虾我把时为什么在单片机掉电或复位后数据又恢复原来初始化的值啊?sst29sf040是flash阿,数据怎么会丢失呢?&nbsp;<br />
aibxyz 发表于 2007-9-27 09:34 | 显示全部楼层

估计你根本就没写进去

这个我用过,还不错的
john_light 发表于 2007-9-27 09:50 | 显示全部楼层

写后读回验证

  
 楼主| ccjchen 发表于 2007-9-27 14:20 | 显示全部楼层

楼上两位大哥怎么用的,能否把代码贴出来让我看看阿?

那我读了以后怎么能把读到的数据显示出来呢?
john_light 发表于 2007-9-27 14:57 | 显示全部楼层

可以在程序中校验

比如要写入的数据保存在数组DataToWrite[]中,写入后将数据读回数组DataReadBack[]中,然后比较这两个数组。相同的话就点灯或什么……
 楼主| ccjchen 发表于 2007-9-28 13:43 | 显示全部楼层

我按你说的这样做了

我声明了两个数组,要写入的数据保存在数组DataToWrite[]中,写入后将数据读回数组DataReadBack[]中,在软件中发现XDATA数据一样,但是我用示波器却在sst29sf040的RD端一直看到高电平,而没有波形,而在WR端却能看到波形,这是为什么?难道硬件根本没通,上面那些只是软件仿真吗?
john_light 发表于 2007-9-28 14:25 | 显示全部楼层

为了确定你已经对该芯片正确编址

你最好先实现Product&nbsp;Identification过程,看能否读回正确的芯片ID:0xBF13。<br /><br />具体实现仔细阅读datasheet。
 楼主| ccjchen 发表于 2007-9-29 14:11 | 显示全部楼层

谢谢john_light大哥的指点阿,我现在能正确读回ID

这说明编址应该正确吧,读写也应该正确吧,但是为什么断电后数据恢复为初始化时的数值呢?我是将uchar&nbsp;idata&nbsp;syn[8]={&quot;24.5&nbsp;6&nbsp;0&quot;}调在LCD中显示出来,然后通过增减按键改变syn[8]={&quot;24.5&nbsp;6&nbsp;0&quot;}的数值,保存在sst29sf040中,但是为什么一断电后从新接好电源或单片机复位后,在LCD中显示的值又恢复为syn[8]={&quot;24.5&nbsp;6&nbsp;0&quot;},这是怎么回事呢?
john_light 发表于 2007-9-29 14:46 | 显示全部楼层

有点象挤牙膏,但愿ccjchen用得上

能正确读回ID表示硬件连接大概没问题了(至少低十二条地址线,八条数据线还有读、写、片选等正常)。<br /><br />The&nbsp;first&nbsp;step&nbsp;is&nbsp;the&nbsp;three-byte&nbsp;load&nbsp;sequence&nbsp;for&nbsp;Software&nbsp;Data&nbsp;Protection.&nbsp;The&nbsp;second&nbsp;step&nbsp;is&nbsp;to&nbsp;load&nbsp;byte&nbsp;address&nbsp;and&nbsp;byte&nbsp;data.<br /><br />你在进行字节写的时候先按顺序写那三个字节了吗?<br />写后进行Data#&nbsp;Polling了吗?
 楼主| ccjchen 发表于 2007-9-29 21:22 | 显示全部楼层

确实是挤牙膏阿,你说的我都写了

能否把你的程序发上来我看一下阿?唉,搞了好长时间了,都没进展!
john_light 发表于 2007-9-30 08:17 | 显示全部楼层

回去翻看了我的程序

2004年写的,针对AT29C040A,简直惨不忍睹,不敢拿出来丢丑。<br /><br />把你的贴上来吧,我看看。
john_light 发表于 2007-9-30 08:56 | 显示全部楼层

另外,你可以选择阅读别人的源码

如U-boot就有一些flash.c可供参考。
john_light 发表于 2007-9-30 09:52 | 显示全部楼层

SST29SF040共19根地址线

你的CPU是89C52?<br />A16~A18你怎么连接的?
john_light 发表于 2007-9-30 10:13 | 显示全部楼层

看了一下,风格不太好

#define&nbsp;_SST_C_<br />#include&nbsp;&quot;reg51.h&quot;<br />#include&nbsp;&quot;sst.h&quot;<br />#include&nbsp;&ltintrins.h&gt<br />#include&nbsp;&ltabsacc.h&gt<br /><br />#define&nbsp;SECTOR_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Must&nbsp;be&nbsp;128&nbsp;bytes&nbsp;for&nbsp;29EE020*/<br /><br />#define&nbsp;SST_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xBF<br />#define&nbsp;SST_29SF040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X13<br />#define&nbsp;uchar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int<br />uchar&nbsp;idata&nbsp;syn[8]={&quot;24.5&nbsp;6&nbsp;0&quot;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这个字符串8个字节装不完<br /><br />void&nbsp;&nbsp;wait(uchar&nbsp;p,uchar&nbsp;q);<br />int&nbsp;&nbsp;&nbsp;Check_SST_29SF040();<br />void&nbsp;&nbsp;Check_Toggle_Ready(uint&nbsp;Dst);<br />void&nbsp;&nbsp;ByteProgram(uchar&nbsp;SrcByte,uint&nbsp;Dst);<br />int&nbsp;&nbsp;&nbsp;Erase_One_Sector(uint&nbsp;Dst);<br />uchar&nbsp;ByteRead(uint&nbsp;addr);<br /><br /><br />void&nbsp;main(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;initlcm();//初始化lcd<br />&nbsp;&nbsp;&nbsp;&nbsp;initmcu();//初始化89C52<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ByteRead(0x0080+7)==3)//这里用来证明数据是否写进<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检查最后一个数据是否是3,如果是从Flash中读取数据更新syn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sst_read();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sst_write();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//死循环后面还有东西?<br />&nbsp;&nbsp;&nbsp;&nbsp;syn_add();//syn增<br />&nbsp;&nbsp;&nbsp;&nbsp;syn_dec();//syn减这两个<br />&nbsp;&nbsp;&nbsp;&nbsp;sst_write();//改变syn后写进sst29sf040内<br />}<br /><br /><br />void&nbsp;&nbsp;ByteProgram(uchar&nbsp;data&nbsp;SrcByte,uint&nbsp;Dst){<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x02AA]&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0xA0;<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[Dst]&nbsp;&nbsp;&nbsp;=&nbsp;SrcByte;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Check_Toggle_Ready(Dst);<br />&nbsp;&nbsp;&nbsp;&nbsp;//wait(1,9);//等待25us<br />&nbsp;&nbsp;&nbsp;&nbsp;while(XBYTE[Dst]&nbsp;!=&nbsp;SrcByte){//Data#&nbsp;Polling的变通实现/不建议采用固定的延时(不同的芯片不同的速度可能会有不同结果)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//考虑超时处理<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />int&nbsp;Check_SST_29SF040(){<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;SST_id1;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;SST_id2;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;ReturnStatus;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Issue&nbsp;the&nbsp;Software&nbsp;ID&nbsp;code&nbsp;to&nbsp;29sf040*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]=&nbsp;0xAA;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0xAA&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x02AA]=&nbsp;0x55;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;2AAh&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x55&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]=&nbsp;0x90;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(61,74);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*delay&nbsp;10ms*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*read&nbsp;the&nbsp;product&nbsp;ID&nbsp;from29sf040*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;0000h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SST_id1&nbsp;&nbsp;=&nbsp;XBYTE[0x0000]&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;get&nbsp;first&nbsp;ID&nbsp;byte???????????????*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SST_id2&nbsp;&nbsp;=&nbsp;XBYTE[0x0001];/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;0001h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((SST_id1&nbsp;==SST_ID)&&(SST_id2&nbsp;==&nbsp;SST_29SF040)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnStatus&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnStatus&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Issue&nbsp;the&nbsp;Soffware&nbsp;Product&nbsp;ID&nbsp;Exit&nbsp;code&nbsp;thus&nbsp;returning&nbsp;the&nbsp;29EE020&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;to&nbsp;the&nbsp;read&nbsp;operating&nbsp;mode&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0xAA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0xAA&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;2AAh&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x02AA]&nbsp;=&nbsp;0x55;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x55&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=0xF0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0xF0&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(61,74);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*delay&nbsp;10ms*/<br />&nbsp;&nbsp;&nbsp;&nbsp;return(ReturnStatus);<br /><br />}<br /><br />int&nbsp;Erase_One_Sector(uint&nbsp;Dst){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;Issue&nbsp;the&nbsp;Sector&nbsp;Erase&nbsp;command&nbsp;to&nbsp;39SF040&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0xAA;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0xAA&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x02AA]&nbsp;=&nbsp;0x55;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;2AAh&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x55&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0x80;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x80&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x0555]&nbsp;=&nbsp;0xAA;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;555h&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0xAA&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[0x02AA]&nbsp;=&nbsp;0x55;&nbsp;/*&nbsp;set&nbsp;up&nbsp;address&nbsp;to&nbsp;be&nbsp;2AAh&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x55&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;XBYTE[Dst]&nbsp;&nbsp;&nbsp;=&nbsp;0x20;&nbsp;/*&nbsp;set&nbsp;up&nbsp;starting&nbsp;address&nbsp;to&nbsp;be&nbsp;erased&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;write&nbsp;data&nbsp;0x30&nbsp;to&nbsp;the&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(85,134);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;check&nbsp;DATABOOK&nbsp;for&nbsp;the&nbsp;most&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;accurate&nbsp;value&nbsp;--&nbsp;Tse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//不建议采用固定的延时(参考字节编程部分)<br />}<br /><br /><br />uchar&nbsp;ByteRead(uint&nbsp;addr){<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;GetData;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetData&nbsp;=&nbsp;XBYTE[addr];<br />&nbsp;&nbsp;&nbsp;&nbsp;return(GetData);<br />}<br /><br />void&nbsp;&nbsp;wait(uchar&nbsp;p,uchar&nbsp;q){<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;i,j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(2*j+3)*i+4<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=p;i&gt0;i--){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j=q;j&gt0;j--){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;sst_read(){<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syn[2*i+1]=ByteRead(0x0080+i);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=4;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteRead(0x0080+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;sst_write()//用于保存易丢失数据<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;Erase_One_Sector(128);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteProgram(syn[2*i+1],0x0080+i);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=4;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteProgram(3,0x0080+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
john_light 发表于 2007-9-30 10:28 | 显示全部楼层

多灌两瓢水吧

我觉得你的问题不是数据丢失,而是<b>数据根本没存进去</b>。<br /><br />2004年,我初次使用ATMEL的AT29C040A,由于是DIP封装,非常方便调试。<br /><br />我先确定硬件的正确连接:<br />1、读FlashID;<br />2、用通用编程器往芯片不同特定地址写入特定数据,然后在程序中读回验证。<br /><br />然后尝试片擦除:<br />  用通用编程器读回验证。<br /><br />再然后字节编程:<br />  (AT29C040A要求一次要写入256字节的一个扇区)。<br />  用通用编程器读回验证。<br /><br />得益于DIP封装和通用编程器,我很快就掌握了这种Flash的编程方法。
 楼主| ccjchen 发表于 2007-9-30 13:15 | 显示全部楼层

通用编程器没用过,我这里只有仿真器

  
wangkj 发表于 2007-9-30 21:33 | 显示全部楼层

sst flash网站有例子代码,你可以参考一下.

  
a305566 发表于 2011-3-24 15:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

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