609178658 发表于 2013-8-23 13:07:15

51单片机内部的EEPROM存储是否会丢失

STC51单片机内部eeprom,可不可以这样使用
首先将使用的扇区连续擦除,再向内部扇区编写数据,每次写十个字节,写完十个字节不擦除扇区,第二次接着第一次的位置 ,继续写直到第一个扇区写满了再去写第二个扇区,
单片机内部的EEPROM这样使用会不会不稳定 ,会不会丢失数据?

wangqing_gxu 发表于 2013-8-23 13:10:47

没有绝对的EEPROM!

609178658 发表于 2013-8-23 13:18:35

wangqing_gxu 发表于 2013-8-23 13:10 static/image/common/back.gif
没有绝对的EEPROM!

什么意思?不太懂,没明白
如果在保存第二组数据是把之前保存的数据读出来,再和将要保存的一起保存,是这样么就不丢失了么?
不过这样会不会很麻烦,需要好多片内地址

wangqing_gxu 发表于 2013-8-23 13:24:17

看你怎么做,不过只能说减小出错机率,绝对不丢那很难.
程序跑飞可能会读写EEPROM,很难保证程序不跑飞.
电压不稳时读EEPROM可能会变写,改变了某些EEPROM的值,这个你可以做得更好.
程序写得不好,也有可增加EEPROM的风险.

609178658 发表于 2013-8-23 13:30:18

wangqing_gxu 发表于 2013-8-23 13:24 static/image/common/back.gif
看你怎么做,不过只能说减小出错机率,绝对不丢那很难.
程序跑飞可能会读写EEPROM,很难保证程序不跑飞.
电压 ...

谢谢您的解答我还是想知道这个方法可行么?
首先将使用的扇区连续擦除,再向内部扇区编写数据,每次写十个字节,写完十个字节不擦除扇区,第二次接着第一次的位置 ,继续写直到第一个扇区写满了再去写第二个扇区,
单片机内部的EEPROM这样使用会不会不稳定 ,会不会丢失数据?
官网的资料好像不建议用这个方法,但是我要保存的数据有很多 几千个字节, 这样的方法可行么

jiaohaitao 发表于 2013-8-23 13:30:56

别的单片机不了解。stc的eeprom只有是0xff时才能写,也就说,只能拉低,不能写高
只有擦出扇区,才能把扇区拉高,但是必须整个扇区操作
详情看stc的数据手册吧,程序,官方也有

609178658 发表于 2013-8-23 13:34:15

jiaohaitao 发表于 2013-8-23 13:30 static/image/common/back.gif
别的单片机不了解。stc的eeprom只有是0xff时才能写,也就说,只能拉低,不能写高
只有擦出扇区,才能把扇区 ...

谢谢解答
程序写好了 ,官方的手册我也看了是把每次修改的数据放在同一个扇区,我要每次存10个字节,那在第二次保存的时候,是不是必须要吧之前的数据读取出来再一起保存?
这个是我的问题所在

jiaohaitao 发表于 2013-8-23 13:41:43

609178658 发表于 2013-8-23 13:34 static/image/common/back.gif
谢谢解答
程序写好了 ,官方的手册我也看了是把每次修改的数据放在同一个扇区,我要每次存10个字节,那 ...

如果你要覆盖以前的数据,这个必须整个扇区擦出。
如果你接着原来的数据顺序往后写,就没必要了
如果数据比较多,建议用stc12c5a32s2这款,eeprom有28k

609178658 发表于 2013-8-23 13:41:44

我对一个扇的分两次写试验过,是可以的,但是不知道扇区用的多了 会不会不稳定甚至不能用

609178658 发表于 2013-8-23 13:46:26

jiaohaitao 发表于 2013-8-23 13:41 static/image/common/back.gif
如果你要覆盖以前的数据,这个必须整个扇区擦出。
如果你接着原来的数据顺序往后写,就没必要了
如果数据 ...

我就是接着原来的数据继续写,这样可以么 我用的是89c54RD+   有45K够用了
手册上说每次修改的数据放在同一扇区,这句话什么意思,是每次写都要擦除扇区么

jiaohaitao 发表于 2013-8-23 13:58:51

你说的是手册上的建议:
1.同一次修改的数据放在同一扇区中,单独修改的数据放在另外的扇区,就不须读出保护。
2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC单片机的Data Flash比外部EEPROM要快很多,
读一个字节/编程一个字节/擦除一个扇区大概是10uS/60uS/10mS。
3.如果同一个扇区中存放了一个以上的字节,某次只需要修改其中的一个字节或一部分字节时,则另外的
不需要修改的数据须先读出放在STC 单片机的RAM中,然后擦除整个扇区,再将需要保留的数据和需修改
的数据一并写回该扇区中。这时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。
我的理解:
修改频率相同的数据放同一个扇区,这样比较方便,改一个字节要擦出整个扇区,改多个也要擦。这样
性价比高,哈哈,不知老妖是不是要描述的这个意思

609178658 发表于 2013-8-23 14:14:17

jiaohaitao 发表于 2013-8-23 13:58 static/image/common/back.gif
你说的是手册上的建议:
1.同一次修改的数据放在同一扇区中,单独修改的数据放在另外的扇区,就不须读出保护 ...

我就是想知道我那么做可以么,如果写之前要把之前写的读出来在一起写,会不会很麻烦,如果我之前已经写了 1000个字节,
我继续写的时候,要把那100个字节读出来存到RAM,再一起保存 这么做麻烦,
可不可以顺序保存,不覆盖,懂我说的意思?我说明白没?
还有”老妖“是什么意思?

wangqing_gxu 发表于 2013-8-23 15:28:23

你的方法是可以的,但很容易出错.
每次接在后面写,必须保证每次的偏移量都对,但单片机连续运行几个月上年,还有各种干扰,用一个变量保存偏移量出错的可能是有的.而一但出错,后面再写多少数据都是白搭.

609178658 发表于 2013-8-23 15:34:56

本帖最后由 609178658 于 2013-8-23 15:46 编辑

wangqing_gxu 发表于 2013-8-23 15:28 static/image/common/back.gif
你的方法是可以的,但很容易出错.
每次接在后面写,必须保证每次的偏移量都对,但单片机连续运行几个月上年,还 ...

保存时间不需要很久 只是连续保存,之后送个打印机打印和CH375通过USB输出,   每次接在后面继续写,写完的不读出来,可以么

jiaohaitao 发表于 2013-8-23 19:15:25

609178658 发表于 2013-8-23 14:14 static/image/common/back.gif
我就是想知道我那么做可以么,如果写之前要把之前写的读出来在一起写,会不会很麻烦,如果我之前已经写了 ...

你只要保证你要操作的字节单元是干净的(就是0xff),你就可以往里面写数据。如果你要修改原来的数据,只能读出到内存,擦出原来的扇区,再写进出。
写和读:按字节
擦出:按扇区

饭桶 发表于 2013-8-23 19:36:00

你的方法可以

609178658 发表于 2013-8-27 20:47:05

jiaohaitao 发表于 2013-8-23 19:15 static/image/common/back.gif
你只要保证你要操作的字节单元是干净的(就是0xff),你就可以往里面写数据。如果你要修改原来的数据,只 ...

我翻看过手册,生产单片机的厂家并不支持这样的使用方法,可能是不稳定吧

cooper_ 发表于 2013-8-27 21:22:13

我感觉可以的,我做过类似的例子,是用eeprom来记录温度值,是可行的。按照你说的,记录满整个空间之前,只要不覆盖写,应该没有多大问题。

你的方法可以的,往同一扇区写数据只要不覆盖以前写过的地方,可以直接写,用不着把原来的读出来再一块存进去,我感觉那样很麻烦,还要占不少的ram和时间

wgui 发表于 2013-8-27 21:43:15

跟内存卡一样,一次操作512字节。
页: [1]
查看完整版本: 51单片机内部的EEPROM存储是否会丢失