zoukankan      html  css  js  c++  java
  • [资料] 经验分享——EEPROM读写及数据管理

    本帖最后由 wscf123 于 2015-2-8 23:35 编辑[资料] 经验分享——EEPROM读写及数据管理
     


    转载的好贴,静下心看,红色的为我补充。

    经常有人在QQ群讨论有关E2PROM操作、保护、失效等一些问题,今天闲来没事,简单概括总结一下咯。(才疏学浅,路过的英雄记得补刀

    1)有关 芯片内部自带的E2PROM

     

    有的资深的工程师可能不是很愿意用MCU自带的E2PROM,大概是这些家伙上过什么当、受过骗还是什么的。简单说一下优缺点吧:

    (1)片内集成的感觉挺便宜的,和MCU一起卖的,对成本要求严格的,写次数很少的场合一般会考虑,至少能省个2、3毛钱吧;

    (2)缺点的话,可能擦写次数、稳定性没有外挂的专用芯片厉害;

     

    2)有关常用的外挂E2PROM

    如果是学生或者刚从学生时代走来的人们,大概也就知道ATMEL 24C0X系列吧,就好像我毕业的时候以为世界只有51和AVR,开个玩笑!

    ATMEL 24C0X系列,目前市场上应用也是比较多,附:微雪的介绍ATMEL 24C0X

    http://www.waveshare.net/Left_Column/EEPROM_Device.htm

    工程师主要考察E2PROM的参数无非就是擦写次数、功耗、稳定性、价格,其中10万次擦写次数和 100万次擦写次数正在较量,至于从工程师的角度考虑 擦写次数自然是没有上限最好,太低的擦写次数会让程序员死很多脑细胞。

    3)有关E2PROM的数据管理

     

    (1)操作注意事项:分页操作需要有5ms延迟等待时间才可以(以类AT24C04的产品为例),也就是模块化程序设计中,在写数据之前、写数据完毕后、度数据之前、读数据之后都需要考虑加5ms的延时时间。本来IIC的读写速率就不是很高,外加这些延迟一定会势必影响系统设计的实时性,但也不得不从读写性能的角度出发。

     

    (2)上拉电阻的选择:出于稳定性考虑,WP、SDA、SCL引脚都会设置上拉电阻,常用的电阻值为 4.7K 、10K电阻,个人比较推荐4.7K。

     

    (3)硬件IIC与软件模拟IIC的比较:对MCU资源不是很敏感的应用,都会考虑软件模拟的方式,毕竟这个移植起来真的很方便,只有第一做软件部分的时序、保护性设计作为足够好,后面拿过来修改时钟就可以直接,确实方便。

     

    (4)默认参数的写入:设置新E2PROM的时间戳标志,每次系统启动时检查这个时间戳和MCU自身存储的时间戳是否一致,不一致则初始化整个E2PROM为默认参数;当然软件程序的升级,这个时间戳表示也有必要做更改。

     

    (5)数据容错和管理

    把数据以有意义的数据块作分类管理,在数据的块的头、位加固定标识和CS/CRC校验 模式,格式如

      

    数据块开始字

      

    数据长度

    数据

    校验

    结束

    0xA5

    Length

    Byte0---ByteN

    CS/CRC

    0x5A

     

    实际用于产品中,可以挑选这个格式内容里面的部分内容使用,比如去掉结束符等。

    个人之所以建立写入开始字、结束字,原因是方便最好读出来的数据做数据格式检查,确认写入、读出的数据可靠性最高。

       为增强实际的可靠性,在需要写入的时候,可以在写入后,再读出来进行数据的比对,确认写入是否正确;或者在需要读出的时候,读两次、或者多次,检查每次的数据是否一致。

       对于出现异常的数据,最好有容错机制,可以回到默认状态值,不至于系统此时因为某个参数改变的崩溃。

     

    (6)实际底层操作是否需要关闭主程序的中断:一般按照上述(5)操作,有多次冗余操作设计,可以不关闭主程序中断。而且,IIC为等待型操作,一般不会因为系统延迟导致时钟脉宽拉长,影响字节写入、读出。

     

    (7)E2PROM擦写次数的延长: 如果现在手上的E2PROM的擦鞋次数是10万次,项目要求为100万次,且E2PROM内有很多空闲字节的没有使用。

     

    可以这样操作,将数据整理好,以数据块的方式存储,一组数据分10个块地址存储,每次写完后转移到下一块写,即10次写操作中每个物理的数据存储地址只操作了1次。 注意此时的写块数据的指针不能单独存、操作,不然这个字节的操作频率高,也就受到10万次的限制,这个关键的链子在10万次的时候掉了,其他字节也就挂了。这个表征操作哪个块的指针或者说标示符,当然也需要是移动的,至于具体怎么实现,就是见仁见智的事了。

    扫码关注微信,不定期用心推送优质文章。

    【Java开发交流】(群号157529282),欢迎,有志同道合的朋友加入,交流讨论。

  • 相关阅读:
    IssueQuery failed in redmine rake tasks
    rubymine 调试 redmine
    redmine rake tasks
    rails tutorial sample app
    win7 chm 打开失败记录
    rails再体验(第一个程序)
    Bitnami Redmine插件开发记录
    redmine export long csv file failed: 502 proxy error
    Java时区切换时的需要注意
    Android No static field XXX of type I in class Lcom/XXX/R$id错
  • 原文地址:https://www.cnblogs.com/ncepu/p/13695111.html
Copyright © 2011-2022 走看看