STC单片机的eeprom写入问题请教,谢谢。

[复制链接]
16976|21
 楼主| fxhfxh 发表于 2011-8-31 22:25 | 显示全部楼层 |阅读模式
由于STC单片机eeprom的写入只能整个扇区(512字节)擦除后再写入数据,一般在写入少量数据时好像问题也并不大。现在的问题是:要接收从串口送来的10K左右的数据,并存入STC11F32XE的eeprom中,也就是说要存入到20几个扇区中保存,现在在数据存储器中设置了一个512字节的数组用于接收串口的数据,当接收到512个字节时再对确定的一个扇区进行擦除后写入,然后清零数组再接收串口的数据,实际情况看接收第一个512字节是没有问题的,后面的就不对了有数据丢失。是不是在擦除和写入时的时间影响了串口数据的接收。这个问题有不有朋友了解,能不能够解决?串口上位机也是发送的一个数组过来,能不能不动上位机程序解决这个问题呢?谢谢先!
corset 发表于 2011-9-1 08:36 | 显示全部楼层
STC单片机的EEPROM在操作时,是要关总中断的。一擦写,就不接收数据了,你的方案当然行不通
 楼主| fxhfxh 发表于 2011-9-1 10:14 | 显示全部楼层
corset朋友,谢谢回复。但是我的实践证明,用stc11f32xe不用关中断,写入eeprom也是成功的。
hotpower 发表于 2011-9-1 10:59 | 显示全部楼层
首先要明白什么是eeprom和flashrom之区别。
 楼主| fxhfxh 发表于 2011-9-1 11:45 | 显示全部楼层
谢谢hotpower大侠,能不能给一点比较详细的解答嘛。我是为了节约成本,所以用的STC,当然也是为了节约成本没有外加存储芯片。上位机发来的数据是没有问题的,主要是STC单片机只能一个扇区一个扇区的擦除和写入。问题说得简单点就是:上位机发出10K-20K左右的数据要一次性的存入STC的EEPROM中,已备使用和掉电后使用,能否办得到呢?谢谢!
corset 发表于 2011-9-1 12:38 | 显示全部楼层
那你就用分块的方法加上握手协议。这样应该可以
yazhi68 发表于 2011-9-1 12:39 | 显示全部楼层
STC的“EEPROM”扇区擦除需要几十ms的时间,这段时间单片机是不干活的,如果在这段时间内上位机不停地发数据,单片机肯定要丢的。还是在上位机上想点办法吧,每发一个扇区的数据后等一段时间试试看。不动上位机程序恐怕不好办。
crestgod 发表于 2011-9-1 12:47 | 显示全部楼层
楼上正解!搞个24c16也才块把钱,占2-4个口子,很方便。
 楼主| fxhfxh 发表于 2011-9-1 13:25 | 显示全部楼层
回楼上:就是为了节约成本,没有外扩存储器呢,有外存储器就不用动脑壳了,你外扩存储器,那stc内部的eeprom存储器不是浪费了吗?有了外存储器,还需要改上位机吗。
hotpower 发表于 2011-9-1 17:13 | 显示全部楼层
名词不对,俺如何解释?晕!
俺只知道自己做过flash二次写入技术和flash计数器。
俺农民没文化,不知道你的eeprom为何不能写入一个字节。
 楼主| fxhfxh 发表于 2011-9-1 18:05 | 显示全部楼层
唉,hotpower大侠,我们只是使用者,只能按照它的手册去如何应用好它,也没有您这样的水平去改变它的内部什么的呀。
gx_huang 发表于 2011-9-1 18:16 | 显示全部楼层
看样子只能从软件协议上想办法,在写入时禁止串口传送。
没有其它办法了。
yazhi68 发表于 2011-9-1 18:24 | 显示全部楼层
俺只知道自己做过flash二次写入技术和flash计数器。
俺农民没文化,不知道你的eeprom为何不能写入一个字节。
hotpower 发表于 2011-9-1 17:13 [/quote]

就是。
:lol ,大嘴瞎胡咧咧不好哈。
yazhi68 发表于 2011-9-1 18:33 | 显示全部楼层
"eeprom"中分两个区,A区和B区,每个区20个扇区。接收是逐字节写到B区,接受完了在把B区整个转存到A区,再把B区整体擦除,为下一次接受数据做好准备;或者B区不动,把A区整体擦除,下一次接受的数据放到A区。
 楼主| fxhfxh 发表于 2011-9-1 18:38 | 显示全部楼层
这个时候我突然想起了这次大邱世界田径竞标赛上萝卜丝说的那句话,他的金牌的失落是因为他的国家太不强大了。当然我们都知道他确实是犯规了。
 楼主| fxhfxh 发表于 2011-9-1 18:58 | 显示全部楼层
yazhi68朋友,您的意思是边从串口接收到数据就边直接写到eerpom中去,我马上试验一下,我以前是在ram中设置了2个512字节的数组,因为stc11f32xe有1024的附加的存储器,当512个字节接收到后,就写入到一个确定的扇区,但实践证明只有第一个512字节写入是正确的,后面的有问题。您说的在eeprom中分2个区,我没懂您的意思,其实只要能够一次性的写入到eeprom中去,就行了呀。
yazhi68 发表于 2011-9-1 19:06 | 显示全部楼层
关键是不能一边擦除一边接收,每一次接收数据之前要有足够的“空的eeprom“(已经擦除好的)存放本次接受的数据。
心静自然凉 发表于 2011-9-1 19:18 | 显示全部楼层
以前我有试验过STC的EEPROM,在进行EEPROM操作时中间不能中断进行其他任务,纵观LS几位朋友的建议,有修改软件协议和外扩存储器两种方案,还要根据LZ项目具体情况才能作最后定夺
ssunyy 发表于 2011-9-1 20:23 | 显示全部楼层
大家好,我是个初学者,我想用stc内部的eeprom存储设置参数和少量的历史报警记录,不知道可不可以,请各位前辈指教,谢谢。
dbzxxiong 发表于 2011-9-1 21:42 | 显示全部楼层
STC的芯片在写入EEPROM时,串口是不能接收数据的。所以你这个只能用上位机握手协议解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

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