首页 新闻资讯 技术资料 论坛 网站地图
通信产品 消费电子 电源系列 数控系统 嵌入式软件 接口电路 安防产品
电子元器件搜索:
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
维库电子市场网是知名的电子元器件交易网站, 为电子生产企业提供IC库存和技术资料查询服务。
位置: 首页 > 详细信息
  [求助]请问各位大虾我把sst29sf040当作数据存储器时为...
出处:综合电子论坛 时间: 2007-09-29
河外星系 发布于 2007-9-26 21:13:57
表情[求助]请问各位大虾我把sst29sf040当作数据存储器时为什么在单片机掉电和复位后程序又恢复原来初始化的值啊?
sst29sf040是flash阿,数据怎么会丢失呢?
hlf_2001 发布于 2007-9-26 22:25:30
表情

你用的什么单片机?  首先要确认一下 单片机是否收到了中断信号, 如果硬件没问题就要考虑是否是软体有问题


河外星系 发布于 2007-9-27 8:36:53
表情

我用的单片机为AT89C52. sst29sf040的A0-A7接74ls373的输出,74373集成在CPLD中,没画出来,A8-A14接AT89C52的
P20-P26,而A15-A18接地,因为我用不到那么大的空间,而其片选端CE接AT89C52的P27 ,所以有效范围0x0000~0x7FFF ,下面是我的程序,有问题么?

unsigned char idata dig1[7]={"4 8.5 0"}

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);
}
void sst_save()//用于保存易丢失数据
{
     uchar i;
    Erase_One_Sector(128);
           for(i=0;i<4;i++)
            {  
                
              ByteProgram(syn[2*i+1],0x0080+i);
              syn[2*i+1]=ByteRead(0x0080+i);
                
            }
}
void main()
{
   sst_save();
}


aibxyz 发布于 2007-9-27 9:53:53
表情

你先不断电复位

直接写个程序验证下写进去了没


河外星系 发布于 2007-9-27 11:15:14
表情如果我不断电复位的话,复位后数据依然从初始化的值dig1[7]={"4 8.5 0"}开始,在我的仿真软件中查看xdata, 数据是随着我改变的数值变化而变化的阿,为什么一复位我读到的值就是初始化的值了呢?你告诉我应该怎么验证写进去了 没有好吗?
河外星系 发布于 2007-9-28 8:31:40
表情再给指导一下aibxyz大虾!
河外星系 发布于 2007-9-29 14:29:36
表情我现在能正确读出芯片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"},这是怎么回事呢?
aibxyz 发布于 2007-9-29 20:22:20
表情

验证么,写进去然后读出来

注意,要确定是读成功了,而不是原来xdata里的数据

用仿真器看到的xdata随你的改变而改变不能说明什么

另外,建议没写一个命令,延时一下



关闭】 【打印
相关专题  
计算机外设
综合电子技术
测试测量
安防产品
嵌入式系统
嵌入式开发新闻
IC设计
传感控制
AD/DA
存储器
工业控制
嵌入式硬件
医疗电子
SOPC
开发工具
应用产品
嵌入式软件
汽车电子
数控系统
接口电路
软件开发
CPLD/FPGA
军工/航空航天
消费电子
通信产品

© 2007 百斯嵌入式开发网 网站地图