出于保修原因,最好计算某些事件,例如电源循环、工作时间、硬(按钮)复位和超时。虽然数字计数器很容易构建,但如何使它们非易失性和不可复位并不明显。本文介绍如何使用现成串行EEPROM的EPROM仿真模式以及一种不寻常的编码方案来解决问题。
赋予动机
出于保修原因,有时需要计算和记录某些事件,例如电源循环、工作时间、硬(按钮)复位和超时。用于此目的的传统电子计数器由触发器构建,使用二进制代码,如图1所示。设置所有触发器时达到最大计数,因此计数器的大小由感兴趣的间隔内要计数的最大事件数决定。
位号 | ||||||||||
N+1 | n | ... | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
2n | 2N-1 | ... | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
图1.在自然二进制代码中,位值从一个位加倍到下一个位。
满足需求
虽然基于人字拖的计数器很容易构建,但它有很大的缺点。当达到计数限制时,它会滚动到零(自行重置)。它的操作也是不稳定的——它需要电源来维持其计数状态。第一个问题可以通过在计数器达到其限制时冻结计数器来解决;您可以通过连接电池以保持计数器的电源来解决第二个问题。但这些措施可能是不可接受的,因为它们会增加成本并且只能在有限的时间内起作用。
还有另一种选择。您可以在 EEPROM 或某种其他形式的非易失性 (NV) 存储中备份计数值。下次上电时,计数器可以预加载存储在该NV存储器中的值。然而,除非NV存储器嵌入到微控制器或FPGA等另一个芯片中,否则存储器内容是不安全的,因为存储器芯片可以很容易地在电路板上移除、重新编程(重置)和更换。因此,此方法不满足不可重置的要求。
过去的把戏
EPROM是另一种不需要电池的非易失性存储器。EPROM在1970年代随着微处理器的出现而变得流行。刚出厂,所有 EPROM 字节都读取 FFh。 通过对从 1(擦除)到 0(编程)的单个位进行编程来存储数据;编程需要 12V 至 13V 的脉冲。在加载新数据之前,您必须通过封装中内置的窗口将芯片暴露在高强度紫外线下来擦除整个内存。一次性可编程 (OTP) EPROM 没有窗口,因此无法擦除。由于这些不便,EPROM的普及已经减少,取而代之的是EEPROM和高密度闪存,两者都可以在5V或更低的电压下工作和编程。尽管如此,通过将OTP EPROM的单向编程(1比0)和缺乏可擦除性与现代EEPROM技术相结合,您可以获得称为EPROM仿真模式的新功能。EPROM仿真模式是实现非易失性、不可复位计数器的关键技术。
EPROM仿真模式
串行接口EEPROM的一个常见特性是页面写入缓冲器,它允许您在一次冲程中对整个存储器页面进行编程。收到写入命令后,系统会自动使用寻址内存页面中的数据加载页面写入缓冲区。对于 EPROM 仿真模式,写缓冲器作为移位寄存器实现(图 2)。传入的新数据 (D-IN) 馈送到 AND 门,该门在进入缓冲区 (S-IN) 之前将其与缓冲区数据 (S-OUT) 组合在一起。因此,AND门确保存储器位在编程为0后不能更改为1。在对页面的所有位进行完整循环后,缓冲区中的数据再次与内存页面中的数据对齐。现在可以开始写入周期,将整个缓冲器复制回非易失性EEPROM。
图2.EPROM仿真将新数据和现有数据的按位逻辑AND写回存储器。
在 EPROM 中计数
由于EPROM位只能在一个方向上改变,因此传统的计数代码不起作用。相反,您必须将整个内存数组视为 n 位的单个实体。最初,n位都没有编程(全部为1)。若要对事件进行计数,必须将其中一个未编程位更改为 0。您可以简单地随机选择下一个位进行编程,但图 3 中的方案更容易实现。它从最低有效位开始,并按顺序继续,直到对该字节的所有位进行编程。然后,它逐位编程下一个字节,依此类推。在EPROM仿真模式下,具有1024位的存储芯片适用于计算1024个事件。
计数 值 |
十六进制 代码 |
位号 | |||||||
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | ||
0 | FFh | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | FEh | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
2 | ECK | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
3 | F8h | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
4 | F0h | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
5 | E0h | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
6 | C0h | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 80h | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 00h | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
图3.在EPROM中计数需要一个代码,每个位都具有相同的位值。
支持EPROM仿真模式的芯片
虽然EPROM仿真模式易于实现,但在撰写本文时,只有Maxim提供此类产品。存储器密度为1Kb(DS2431、DS28CN01和DS28E01)和20Kb(DS28EC20)。所有这些芯片都带有一个唯一的工厂编程识别号。除DS2431和DS28EC20外,具有EPROM仿真模式的产品均为安全存储器;只有基于设备特定密钥生成消息身份验证代码的主服务器才能获得写入访问权限。
示例流程图
例如,考虑DS2431存储器芯片,其中存储器页0配置为在EPROM仿真模式下实现256位计数器。32 字节页面可以使用 64 位暂存器作为中间存储,以每个 8 字节的块的形式更新。图4中的算法检测具有未编程位的第一个块,递增计数值,然后将该块写回EEPROM。
图4.此算法递增 32 字节内存页中的计数器。
结论
包含EPROM仿真模式的EEPROM是实现非易失性、不可复位计数器的首选产品。内存芯片的序列号可用于检测篡改,即用计数值较低的内存芯片替换内存芯片。为了防止计数器的未经授权的增量,应使用需要消息身份验证代码进行写入访问的安全存储芯片。
审核编辑:郭婷
-
电源
+关注
关注
184文章
17705浏览量
249969 -
计数器
+关注
关注
32文章
2256浏览量
94479 -
EEPROM
+关注
关注
9文章
1019浏览量
81562
发布评论请先 登录
相关推荐
评论