关于数据读写需要注意的问题

EEPROM读写问题及解决方法

        接到公司的旧代码,生产的版本总有一些不良品,仔细查看他的代码,发现在对eeprom的操作的时候,简直了:就是直接写一遍eeprom。

问题:

        1. eeprom只要执行写,就直接写入。

        2. eeprom一直在一个位置写,没有考虑写坏的问题。 

        3. IIC和eeprom通信,他只管数据发到IIC总线上了,并不会去管eeprom是否写入成功了。

        4. 读取没有校验

解决方法:

        问题1: eeprom写入的时候,应该先读出数据,然后判断是否和要写入的值相等,相等不 写,否则写入。(间接的增加eeprom写的寿命)

        问题2:

        数据一直在一个位置写入,读出,势必会造成eeprom的损坏,我们其实就需要在写入的时候对写入进行一些特殊操作。当某个区域写坏了,我们要能够自动写到其他的位置。

        像有些项目数据不是写在eeprom中的,而是写入flash中,需要先按扇区擦除然后写入会比较麻烦,而eeprom则没有这个烦恼,也就意味着我写入一个值的时候不会对附近的其他值造成影响,这样存储数据我可以划分一个区域专门用来存一些信息,并且这个区域又被划分为更多的小块,这样某个小块写坏了,我们也可以写其他的小块。

        我之前开发过一块灯的项目,他需要保存关机前灯的档位(就一个数据),下次开机还要是关机前的档位。当然这里是用电池供电,并且关机也是进入低功耗,因此这个档位值完全没必要存储,因为设备只要电池不断电这个数据就不会丢失。前面开发这块产品的人他代码中是会去存储到flash中的,而我并没有这么去做。数据写入有大风险,读出也会有较小的风险,所以能不存储就不存储。

        问题3:

        数据抛到iic总线上不是就完事了,我们还要判断此次写入是否成功,这个成功意味着我们需要将写入的值读出来,来和写入的值进行对比。

        问题4:       

        数据读的时候也是有风险的,虽然我能保证写的时候是正确的 ,但是并不能保证下次读出来就是对的,这个时候我们就需要增加校验,在另一个位置增加校验位的存储。读出的时候同时读这两个位置的值,然后进行对比。

Flash读写问题及解决方法

        以上eeprom遇到的问题,同样在flash(内部flash,SPI flash)中也是存在的。然而flash的写比eeprom要麻烦很多。一般flash都是按扇区擦除的,因此写数据前要么把其他位置的数全部读出来然后更改写入位置的值然后再写入,要么将不同的数保存到不同的扇区(显然这种做法不切实际)。

        如果在内部flash中保存数据,必定保存的数据量也是极小的,而且种类也少。

        并不是说所有的数据都要按这一套流程,像有些产品会存储产品ID号,这玩意基本写一次就不会改,因此我们只需要简单的固定保存在某个地方,增加一下读写校验,并不需要防止写坏的问题。以上的问题都是和频繁读写有关,如果不是频繁写入只需要固定一个位置既可(也许你的领导会让你这么去做,之前我领导就要我这么做过,但真心没有必要)。

总结

        如果真的因为读写异常造成的设备异常,在后期生产,产品出现bug要解决时也是很难的,偶现的bug往往是最让人头疼的。因此在开发时,尽量避免存储数据,如果无法避免,尽量存储更少更简单的数据,尽量用eeprom设备。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入门->放弃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值