打印

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

[复制链接]
1979|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-9-26 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ccjchen|  楼主 | 2007-9-27 14:22 | 只看该作者

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

使用特权

评论回复
板凳
winloop| | 2007-9-27 15:59 | 只看该作者

你保证你写对了么

使用特权

评论回复
地板
wwh| | 2007-9-27 21:46 | 只看该作者

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

是不是没有关锁阿?

使用特权

评论回复
5
ccjchen|  楼主 | 2007-9-27 21:52 | 只看该作者

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

使用特权

评论回复
6
zzh4641726| | 2007-9-28 08:28 | 只看该作者

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

在每次写完之后加锁,写之前解锁可以很好的避免这个问题。

使用特权

评论回复
7
ccjchen|  楼主 | 2007-9-28 08:36 | 只看该作者

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

使用特权

评论回复
8
ccjchen|  楼主 | 2007-9-28 18:30 | 只看该作者

各位大虾再给提提建议!

使用特权

评论回复
9
lypd96| | 2007-9-28 18:48 | 只看该作者

RE:

先仔细的看看sst29sf040的资料

使用特权

评论回复
10
top_mao| | 2007-9-29 09:41 | 只看该作者

LS说得对,认真看看datasheet.

使用特权

评论回复
11
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"},这是怎么回事呢?

使用特权

评论回复
12
ccjchen|  楼主 | 2007-9-30 13:11 | 只看该作者

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

使用特权

评论回复
13
xplore| | 2007-9-30 20:15 | 只看该作者

基本上

是读正确,写错误, 就是你没有正确运行写指令

使用特权

评论回复
14
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

粉丝