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

[复制链接]
3101|14
 楼主| ccjchen 发表于 2007-9-26 21:12 | 显示全部楼层 |阅读模式
请问各位大虾我把sst29sf040当作数据存储器时为什么在单片机掉电或复位后数据又恢复原来初始化的值啊?sst29sf040是flash阿,数据怎么会丢失呢?
 楼主| ccjchen 发表于 2007-9-27 14:22 | 显示全部楼层

那位大哥给指明一条路啊!

winloop 发表于 2007-9-27 15:59 | 显示全部楼层

你保证你写对了么

wwh 发表于 2007-9-27 21:46 | 显示全部楼层

flash书写要解锁,写完后要关锁

是不是没有关锁阿?
 楼主| ccjchen 发表于 2007-9-27 21:52 | 显示全部楼层

关锁,没听过,请问应该怎么关锁阿?

zzh4641726 发表于 2007-9-28 08:28 | 显示全部楼层

flash在上电,掉电时就是容易修改数据的。

在每次写完之后加锁,写之前解锁可以很好的避免这个问题。
 楼主| ccjchen 发表于 2007-9-28 08:36 | 显示全部楼层

我不知道什么是关锁解锁,能给举个例子吗?

 楼主| ccjchen 发表于 2007-9-28 18:30 | 显示全部楼层

各位大虾再给提提建议!

lypd96 发表于 2007-9-28 18:48 | 显示全部楼层

RE:

先仔细的看看sst29sf040的资料
top_mao 发表于 2007-9-29 09:41 | 显示全部楼层

LS说得对,认真看看datasheet.

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

我现在能正确读出芯片ID:0xBF13

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

各位大虾继续给小弟指导一下阿

xplore 发表于 2007-9-30 20:15 | 显示全部楼层

基本上

是读正确,写错误, 就是你没有正确运行写指令
 楼主| ccjchen 发表于 2007-10-1 21:33 | 显示全部楼层

xplore大哥你看看我的读写程序有问题吗?

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);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

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