stc12c5a60s2单片机EEPROM的问题
今天用这个单片机的EEPROM存储数据,经过测试发现,一次最多只能读写20个字节的数据,如果超过这个大小,就会导致数据丢失,不知道大家有木有遇到过这种情况。我本来是往里面...
今天用这个单片机的EEPROM存储数据,经过测试发现,一次最多只能读写20个字节的数据,如果超过这个大小,就会导致数据丢失,不知道大家有木有遇到过这种情况。
我本来是往里面存了两个数组,分别是26个数据和25个数据,发现从第20位往后就出现异常,刚开始以为这两个数据的起始地址弄错了,导致数据覆盖,后来想了想,数据不可能覆盖的,因为没有执行擦除指令,而且即便是覆盖了,在读取的时候应该会读出后面那个数组的内容。我多次检查程序,确认没有程序错误。就开始怀疑单片机自身缺陷了,后来我把那两个数组分别拆开写,拆成了四个,每个十几个数据,之后就没再出现错误。由此确认该单片机确实存在缺陷,再测试几次后发现,每次最多就能读或写20个字节,多了就会丢失。这个问题纠结了我两个下午加一晚上的时间,快让我脑子炸掉了。
有木有遇到相似情况的兄弟,或者还发现有其他问题的,在这里 说一下,以防别人再因此陷入纠结。 展开
我本来是往里面存了两个数组,分别是26个数据和25个数据,发现从第20位往后就出现异常,刚开始以为这两个数据的起始地址弄错了,导致数据覆盖,后来想了想,数据不可能覆盖的,因为没有执行擦除指令,而且即便是覆盖了,在读取的时候应该会读出后面那个数组的内容。我多次检查程序,确认没有程序错误。就开始怀疑单片机自身缺陷了,后来我把那两个数组分别拆开写,拆成了四个,每个十几个数据,之后就没再出现错误。由此确认该单片机确实存在缺陷,再测试几次后发现,每次最多就能读或写20个字节,多了就会丢失。这个问题纠结了我两个下午加一晚上的时间,快让我脑子炸掉了。
有木有遇到相似情况的兄弟,或者还发现有其他问题的,在这里 说一下,以防别人再因此陷入纠结。 展开
3个回答
意法半导体(中国)投资有限公司
2023-08-25
展开全部
展开全部
我的eeprom是提供给用户的,允许用户通过串口连续写入16k字节的。
我有遇到写入出错的情况,但是增加延时就解决了。你试试增加几个延时指令,应该就解决了。
我有遇到写入出错的情况,但是增加延时就解决了。你试试增加几个延时指令,应该就解决了。
更多追问追答
追问
就是,我也纳闷儿,你说,我把一个25个数据的数组拆成两个,而且仍然是连续的两个for循环,写完前半部分接着写后半部分,中间没有延时,这两者有什么区别,但是一起读写不管用,分开了就管用,真是奇怪。
追答
uchar IapReadByte(uint addr)
{
uchar dat;
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_(); //这儿加个延时吗?
dat=IAP_DATA;
IapIdle();
return dat;
}
void IapProg(uint addr,uchar dat)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROG;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();//这儿加个延时吗?
IapIdle();
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
stc12c5a60s2单片机EEPROM 不存在问题,因为用汇编语言编程,可以连续读 或者 连续写
测试过 连续 写 0 ~ 255 循环写 所有存在的 全部扇区,再连续读取没有错误。
擦除是以扇区为单位 512 字节擦除的。
所谓缺陷应该说是 用 C 语言编程问题。没有按照STC单片机EEPROM的 读写要求。
测试过 连续 写 0 ~ 255 循环写 所有存在的 全部扇区,再连续读取没有错误。
擦除是以扇区为单位 512 字节擦除的。
所谓缺陷应该说是 用 C 语言编程问题。没有按照STC单片机EEPROM的 读写要求。
更多追问追答
追问
难道是C语言有缺陷?我的程序是从技术手册里摘出来的,那个应该是按照要求写的啊。你说的擦除一个扇区我知道,我定义的那个数组就是把数据放在里面暂存的,读取完之后再擦除,然后和另外一个数组一起再写进去的
追答
C语言没有有缺陷,你可以直接用数据手册的程序试试,
数据手册 的例程 读写 一个扇区(512字节) 都没有问题,
应该你摘录有问题,或者你的 使用 区间有问题,
注意 擦除 是以扇区(512字节)为单位一次擦除的,
在同一区间 覆盖写入 数据是 会出错的,就是读出的数据 不等于 写入的数据。
要合理 使用 EEPROM 空间 需要有一些技巧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该没有问题,至少我是没有遇到过,你看看是不是程序有些问题。我用的是汇编,用数据手册中的例子改编的。
追问
恩,我的也是从技术手册中摘出来的,只摘录了对eeprom操作的那部分并写成子函数,然后在别的函数中调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询