|
| sst29sf040作数据存储器,数据会丢失吗? |
| 新闻出处:21ic
发布时间: 2007-10-01 |
ccjchen 发布于 2007-9-26 21:12:00 请问各位大虾我把sst29sf040当作数据存储器时为什么在单片机掉电或复位后数据又恢复原来初始化的值啊?sst29sf040是flash阿,数据怎么会丢失呢?
wwh 发布于 2007-9-27 21:46:00 是不是没有关锁阿?
zzh4641726 发布于 2007-9-28 8:28:00 在每次写完之后加锁,写之前解锁可以很好的避免这个问题。
lypd96 发布于 2007-9-28 18:48:00 先仔细的看看sst29sf040的资料
ccjchen 发布于 2007-9-29 14:15:00 这说明编址应该正确吧,读写也应该正确吧,但是为什么断电后数据恢复为初始化时的数值呢?我是将uchar idata syn[8]={"24.5 6 0"}调在LCD中显示出来,然后通过增减按键改变syn[8]={"24.5 6 0"}的数值,保存在sst29sf040中,但是为什么一断电后从新接好电源或单片机复位后,在LCD中显示的值又恢复为syn[8]={"24.5 6 0"},这是怎么回事呢?
xplore 发布于 2007-9-30 20:15:00 是读正确,写错误, 就是你没有正确运行写指令
ccjchen 发布于 2007-10-1 21:33:00 uchar idata syn[8]={"24.5 6 0"}; void main(void) { initlcm();//初始化LCD initmcu();//初始化单片机 for(;;) { if(ByteRead(0x0080+7)==3)//这里应该可以证明数据能否写进吧? //检查最后一个数据是否是3,如果是从Flash中读取数据更新syn { sst_read(); } else//否则往sst29sf040写入数据 { sst_write(); } syn_add();//syn增 syn_dec();//syn减 Write595((syn[1]<<4)|(syn[3]&0x0f),(syn[5]<<4)|(syn[7]&0x0f)); sst_write(); } }
void ByteProgram(uchar data SrcByte,uint Dst) { XBYTE[0x0555] = 0xAA; XBYTE[0x02AA] = 0x55; XBYTE[0x0555] = 0xA0; XBYTE[Dst] = SrcByte; wait(1,9);//等待25us }
int Erase_One_Sector(uint Dst) {
/* Issue the Sector Erase command to 39SF040 */
XBYTE[0x0555] = 0xAA; /* set up address to be 555h */ /* write data 0xAA to the address */ XBYTE[0x02AA] = 0x55; /* set up address to be 2AAh */ /* write data 0x55 to the address */ XBYTE[0x0555] = 0x80; /* set up address to be 555h */ /* write data 0x80 to the address */ XBYTE[0x0555] = 0xAA; /* set up address to be 555h */ /* write data 0xAA to the address */ XBYTE[0x02AA] = 0x55; /* set up address to be 2AAh */ /* write data 0x55 to the address */ XBYTE[Dst] = 0x20; /* set up starting address to be erased */ /* write data 0x30 to the address */ wait(85,134); /* check DATABOOK for the most */ /* accurate value -- Tse */ }
uchar ByteRead(uint addr) { uchar GetData; GetData = XBYTE[addr]; return(GetData); }
|
| 【关闭】 【打印】 |
|
|
|
|