微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > I2C串行EEPROM应用系统的健壮性设计

I2C串行EEPROM应用系统的健壮性设计

时间:03-29 来源:电子产品世界 点击:
引言

  在嵌入式控制系统中,通常要用到非易失性存储器。无论是掉电时维持需要保存的设置,还是存储重要记录,可靠的非易失性存储器都是一种理想的选择。非易失性存储常常采用外部串行存储器来实现,其中I2C接口产品是最常用的一种类型。然而,这种产品和其他EEPROM存储器一样,在使用时也存在着一些条件会潜在地导致其产生某些非标准的甚至是错误的操作。因此在进行I2C串行EEPROM存储器的应用设计时,除了应考虑数据手册规范之外,还必须考虑更多的因素,这样才能实现更健壮的总体设计,确保系统具有优良的质量特性。

  1 防意外写措施

  器件在上电/掉电期间或者SDA/SCL线的噪声过大时都有可能导致意外写操作。为了解决这一问题,一方面需要使用去耦电容(容量通常为0.1 μF)来帮助滤除VCC上的纹波,另一方面则可以通过写保护措施来防止对器件的非法访问。

  对于具有硬件写保护功能的器件,既可以将其WP引脚连接到VCC来保护整个阵列,也可以将其WP引脚连接到VSS来放弃写保护。通常用户可以将 WP引脚连接到微控制器的一根I/O口线上,并在该引脚与VCC间连接一个上拉电阻,这样就可确保器件在平时处于写保护状态;但是要启动写周期,WP引脚必须首先被驱动为逻辑0。注意,WP引脚不能悬空,否则器件将无法正常工作。

  对于无写保护功能的器件,则可以利用一个电子开关对其SDA引脚与微控制器之间的连接进行通断控制来实现写保护。平常不访问器件时,切断它们的连接;仅在需要对器件实施读/写操作时才接通。

  2 数据完整性保护措施

  在整个写周期内(对于大多数器件而言,通常最大为5 ms),必须将VCC维持在最小工作电压以上。如果此时VCC掉电或降到最小电压以下,则无论时间长短,均无法确保被写页面的数据完整性,可能导致编程数据的不正确。此外,由于无法对EEPROM单元进行完全编程,器件的数据保留时间会比数据手册中规定的时间短。对于写周期内电源故障所导致的这些问题,通常可以在软件上采取相应的保护措施来加以解决。基于事物的提交-回退机制[1]就是一种典型的解决方案。可以证明,当EEPROM存储器应用系统采用该机制后,无论电源何时掉电或微控制器何时被复位,EEPROM存储子系统都可保持数据的完整性。

  (1) 提交-回退机制的建立

  提交-回退机制的建立包括两方面的内容:一方面是定义EEPROM存储器的逻辑结构;另一方面是构造对存储子系统进行访问、检查和错误清理的接口函数。该机制将EEPROM存储器划分为主存储区、校验存储区和缓存区3个部分。其中主存储区用于存放用户数据;校验存储区用于存放主存储区每个页面的 CRC校验码,且该区中每一页的最后一个CRC用于校验本页数据;缓存区包括多个写缓存,每个写缓存包含4个域--数据域、地址域、状态域和16位CRC 域。数据域用于临时存放写函数写入的数据页面,执行下一个提交命令时,该数据页面将从缓存区传送到主存储区。地址域表示缓存数据要写入的页面地址;状态域表示缓存的状态,包括可用(available)、占用(occupied)和终止(expired)状态;16位CRC域用来校验整个写缓存。

  该机制提供了6个接口函数:读、写、提交、回退、检查和清理。

  ① 读函数。接收1个页面编号和1个用于存放待读出数据的暂存区指针。如果暂存区指针和页面编号处于有效范围内,程序就会将指定的页面数据读入暂存区,并校验数据的有效性。该函数会返回如下状态之一:有效读(valid read)、无效读(invalid read)、无效暂存区地址(invalid buffer address)、无效页面编号(invalid page number)或保护失败(protection failure)。

  ② 写函数。接收1个页面编号和1个指向填好数据的暂存区指针。如果暂存区指针和页面编号处于有效范围内,程序就会将数据写入非易失性缓存,并标记缓存状态以准备提交。

  ③ 提交和回退函数。提交和回退函数是可以在运行写函数之后执行的互补型操作。提交函数将最近被写入缓存的数据复制到存储区中的对应位置,并为下一个待写入的数据页面准备好缓存结构。回退函数实际上就是一个"取消"操作,它消除最近一次执行写函数产生的效果,并为下一个写操作准备好缓存子系统。

  ④ 检查函数。读取存储器件的每个数据页面,并检查存储数据的有效性。该函数还检查缓存子系统,以确保没有未执行的写操作。任何无效页面或未执行的写操作都会使检查函数返回一个错误状态。

  ⑤ 清理函数。修复一个数据损坏的EEPROM。实际上,它将试图找出发生的错误,并采取相应的解决措施。

  (2) 提交-回退机制的应用

  读操作:调用读函数来实现。

  更新主存储区数据操作:先调用写函数再调用提交函数来完成。主存储区只有在完成一个提交操作后才更新数据,而不是在一个写操作之后更新的。

  异常处理:在任何一个可能破坏EEPROM写周期的事件之后(例如上电之后),都将首先执行校验/清理函数。检查函数将检验存储系统的可用性,并报告任何发现的错误;清理函数将根据检查函数返回的错误代码解决EEPROM系统存在的任何问题。在清理操作退出时,无论EEPROM子系统先前是何种状态,都应该可以继续使用。

  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top