所有关于电路
项目

使用EERAM缓解停电编程问题

2017年8月07通过雷蒙德热那亚

在入门的这篇文章中,我们探索使用I2C EERAM保存beplay体育下载不了关键程序变量当权力失败和恢复他们当权力回到容易保持连续性。

在入门的这篇文章中,我们探索使用I2C EERAM保存beplay体育下载不了关键程序变量当权力失败和恢复他们当权力回到容易保持连续性。

电源故障是不可避免的。当权力返回时,您的程序重启,但所有的变量的内容丢失。通常,这将是有利的关键值保存,当权力返回可用。EERAM很容易做到这一点。

在本文中,我们将探讨使用EERAM和构建一个简单的beplay体育下载不了示范项目,将自动保存程序变量当权力失败,然后恢复恢复力量的时候。

EERAM是什么?

简单地说,EERAM,由芯片制造,是一个2C静态随机存取存储器(SRAM)与一个影子eepm备份。用户的程序并不直接访问eepm但自由使用SRAM,可快速访问和比较永久的耐力。

存储的SRAM eepm可以通过软件或硬件信号出现。最值得注意的是,然而,是通过添加一个简单的电容器,整个SRAM阵列可以自动保存到eepm失去力量形成的。在所有三个案例中,当权力回报,eepm自动转移到存储器的内容。

可用EERAM ICs

零件号

Vcc 密度 地址范围
47 l04 2.7 - -3.6 v 4 kbits(512字节) 0 x000-0x1ff
47 c04 4.5 - -5.5 v 4 kbits(512字节) 0 x000-0x1ff
47 l16 2.7 - -3.6 v 16来(2 kB) 0 x000-0x7ff
47 c16 4.5 - -5.5 v 16来(2 kB) 0 x000-0x7ff

从上面的表中,两个密度可用,有两种电压和温度范围。所有设备都有一个我2C串行接口的速度高达1 MHz。

一定要参考以下EERAM参考pdf文档:

对于我们所有的示例,我们将使用一个英特尔夸克单片机D2000。D2000董事会更多的参考材料和应用程序,包括如何使用GPIO和我2C接口,可用以下关于电路的文章:

1.40 C源代码(QMSI ISSM_2016.2.094)和项目的例子是可供下载的文章。

虽然我们的示例程序和电路使用D2000,他们应该很容易适应任何单片机有一个我2C接口和GPIO。

基本EERAM界面

基本EERAM接口D2000示意图。

上面的示意图说明了一个典型的微机接口EERAM和可以用于包括软件的例子。

* *请注意,GPIO_3只需要连接如果您使用的是五金店(HS)特性。

BOM基本EERAM接口。

组件 描述 源/价格
IC1 47 l04 EERAM Digi-Key 47 l04-i / P/ 0.92美元
C1 6.8µF钽电容器 Digi-Key 478 - 1918/ 0.31美元
C2 0.1µF陶瓷电容器 Digi-Key 399 - 14001/ 0.32美元
R1, R2 10 kΩ电阻器 Digi-Key CF18JT10K0CT/ 0.10美元

IC1是一个“L”装置EERAM Vcc范围2.7 - -3.6 v。由于D2000 3.3 v,这是适当的版本和相同的连接可用于47 l16。如果你使用一个5 v,那么(即“C”版本。47 c04或47 c16)将是合适的。

SDA / sci。这两条线是通常的我2C时钟和数据信号的传输速度高达1 MHz。注意,R1和R2所需的上拉电阻。微芯片推荐10 kΩ100 kHz的典型值。D2000板的软件可以容纳100 kHz, 400 kHz和1 MHz的速度,我们所有的软件示例使用100 kHz的速度,因此,10 kΩ电阻。

A1和A2地址线。不像一个典型的我2C串行eepm EERAM设备有两个设备地址(见下图)。有一个地址访问控制寄存器和另一个读写存储器阵列。

EERAM我2C设备寻址。图的芯片,EERAM数据细胞株t

我的8位2C地址是由一个固定的操作码位4 - 7(二进制为1010 0011 SRAM或二进制控制寄存器),和少量2 - 3对应别针A1和A2的状态。如果这些引脚接地,相关的地址位的值为“0”,如果与Vcc,他们有一个' 1 '的价值。1的地址总是“0”。

我的8位2C地址包括最低有效位为' 1 '读和写的“0”。因为我的操作系统例程2C通信处理后者,我们可以把设备地址作为编程的7位价值考虑。

在我们的示意图(包括所有程序)A1和A2在地面;控制寄存器是解决二元1010000 (0 x18),和SRAM阵列处理二进制1010000 (0×50)。注意访问A1和A2大头针允许使用四EERAM芯片在同一个系统上。

五金店(HS)销,HS线是连接到D2000 GPIO 3。这个连接是只需要如果您想要使用的硬件存储功能。,HS线可以带来“高”发起的SRAM存储eepm。如果你不想使用这个特性,可以孤立的。

Vcap。如果你想使用自动存储的存储器eepm电源故障,需要附加一个电容器从Vcap销到接地。电容器的选择是重要的,芯片提供了一个应用程序注意正是为了解决这个问题(见AN2257A)。

EERAM自动存储和回忆电压。图的微芯片AN2257A

这个电容器必须提供必要的能量自动存储和回忆的内容和从eepm SRAM。电容器必须大到足以让Vcap电压保持高于VPOR(加电复位电压)水平在整个存储周期。

芯片有方便提供最低Vcap值表中(见表3,AN2257A)。注意,最小值取决于设备的电压和密度。47 l04设备我们正在使用,µF Vcap的最小值是5。

达到最小值,我们必须考虑电容器的公差组件的数据表中列出。电容我们选择的C1,值是6.8µF公差为±20%。因此,在低端的宽容,我们有一个值为5.44µF并保持所需的最小电容。在许多情况下,没有必要减少成本或组件区域,因此您可以确保健壮的操作,只需选择一个更大的电容器(10µF)。

可以使用EERAM没有汽车商行Vcap特性和外部电容器。在这种情况下,Vcap销应与Vcc和汽车商行特性必须禁用写状态寄存器中的ASE位为“0”(参见下面的控制寄存器部分),以防止数据损坏。

旁路电容器示意图中,最终组件C2,旁路电容。典型的µF和推荐值是0.1。

编程控制寄存器

EERAM编程可以分为两个部分,控制寄存器编程和SRAM编程访问。每使用一个不同的我2C设备地址。

此外,EERAM有两个控制寄存器:状态寄存器和指令寄存器。状态寄存器可以读取或写入。命令寄存器只写两个命令,一个拯救SRAM eepm和恢复从eepm SRAM。

这些寄存器(地位和命令)都有自己的地址:0 x00状态寄存器和0 x55命令寄存器。这些地址我不应混淆2C设备地址。相反,他们是作为一个二级地址后我发送2C设备地址,但是只有当写入控制寄存器。当阅读从控制寄存器,寄存器地址是不习惯,因为只有可以读状态寄存器。

状态寄存器

EERAM状态寄存器的定义。图的芯片,EERAM数据表

与数据表将提供细节磋商寄存器位,但有以下几点需要注意的几点:

  • 日月光半导体位必须设置如果你想自动保存(汽车商行)SRAM eepm电源故障。
  • 如果我没有设置,那么汽车商行和五金店(使用商品销)不启用。这是有道理的,因为我一点,这是只读的,是自动设置当你改变存储器数组的内容。
  • 见表2 - 7日EERAM数据表的完整存储/恢复真值表对ASE和碎片。
  • 数组的一些或全部,可以通过设置写保护的状态寄存器位对应内存块(见数据表)。

包括程序,EERAM_CNTRL_STATUS_REG。C, will display, and optionally write, to the status register. This program makes it easy to configure the EERAM chip for your particular application.

下面的程序片段所示的三个程序变量应该配置由用户在运行程序之前。

/ * - - - - - - >注意:用户应该设定未来三变量< - - - - - - * / bool Hdensity =没有;/ *芯片密度、NO / 0 = 47 x04或者是的/ 1 = 47 x16 * / bool WriteStatus =没有;/ *如果是的,写newval如果没有跳过写状态寄存器* / / * uint8_t newval = 0 b00000010;没有街区保护,使汽车商店,明确事件如果设置* / uint8_t newval = 0 b00000000;/ *没有街区保护,禁用自动存储,明确事件如果设置* /

将Hdensity变量设置为“不”如果使用47 x04芯片或“是的”密度越高47 x16芯片。如果你只是想读状态寄存器,WriteStatus设置为“NO”。如果你想读和写状态寄存器,WriteStatus设置为“是”并设置newval 8位值,你想写状态寄存器。

下图显示屏幕的输出串行终端运行编程和设置ASE后。

截图EERAM_CNTRL_STATUS_REG.C输出。

命令寄存器

第二个控制寄存器是命令寄存器。它是只写在第二个地址0 x55。命令可以是一个商店(0 x33)副本SRAM eepm或召回(0 xdd)副本eepm SRAM。

我两个字节被写入2C设备地址使用命令:

  • 字节1命令寄存器地址(0 x55)。
  • 字节2是命令(0 x33商店或0 xdd召回)。

后发送间隔的序列必须延迟交流特性中定义的数据表。间隔包括状态寄存器的写周期时间(Twc) 1 ms,加上回忆延迟(Trecall)或存储延迟(Tstore)根据命令你执行。Trecall和Tstore取决于设备密度:47 x04设备,Tstore = 8女士和女士Trecall = 2;为47 x16设备,Tstore = 25女士和女士Trecall = 5。

一个警告你考虑是否使用I2C的阻塞和非阻塞调用。包括在所有的项目中,我们使用I2C通信阻塞调用。因此,我们开始我后的延迟2C传输阻塞调用知道I2C传输完成前调用返回。然而,如果您使用非阻塞调用,然后您必须显式地开始后延迟程序已承认完成transfer-normally相关的回调例程。否则,你可能不知不觉地推迟后不到所需的时间间隔发送命令。

包括程序,EERAM_CMD_SR。C, demonstrates the uses of the software save and recall commands.

访问存储器

写一个字节到一个特定的地址,写信给我2C设备地址SRAM(0×50为我们实现)如前所述,发送的高字节地址之后,低字节的地址,最后,字节的数据。

读一个字节的存储器阵列是一个两步的过程。首先,设置地址数组中的位置以同样的方式,你想读与写字节。没有发送停止位,从我读的字节2C设备地址和EERAM传输的数据字节地址选中。

包括程序,EERAM_RW。C, demonstrates the process by reading and writing a single byte. If you examine the two functions readbyteC(uint16_t address) and writebyteC(uint16_t address, uint8_t byte), you can see the coded implementation of the steps outlined above. Note that both routines use error checking and return a variable of type int. If the return value is negative, it is either -999 if the address is not valid or a negated errno value. If the returned value is a non-negative number, it is the valid value from the addressed memory in the case of a read or a 0 in the case of a valid write.

我们也可以读或写的SRAM顺序(即。连续、多字节)。过程的细节给出EERAM数据表,包括程序、EERAM_S_RW。C, which will read and then write the entire SRAM memory array using the sequential access procedures. To use the program, the user should first set two program variables, Hdensity and bytevalue (the byte value to be written to all locations).

连接到串行终端时,程序将输出整个内存数组之前和之后设置内存位置(参见下面的屏幕输出)也报道任何差异值,随后阅读。

屏幕输出EERAM_S_RW.C运行。所有内存值改变从“255”“170”。

使用商品销

要发起一个五金店,只需把商品销逻辑高至少Thspw (150 ns,见EERAM数据表)。这将自动导致写状态寄存器设置事件,需要延迟的Twc女士(1)才能完成,独立存储是否发生(见下文)。

eepm SRAM存储的,需要设置了状态寄存器位,这意味着SRAM阵列已经修改。当存储发生延迟(Tstore)需要完成。包括程序,EERAM_HS_Save。C, demonstrates the procedure and assumes that the HS pin is connected to GPIO_3 as per the schematic.

还要注意事件在状态寄存器将HS线被激活时,不管实际上是位设置和存储。事件点的非易失性(这意味着它保留其状态即使力量被移除),必须重置专门写一个‘0’,在状态寄存器。

示范项目

适度的工具集的节目探索EERAM,我们准备一个示例应用程序项目。beplay体育下载不了这个简单的演示将使用一个标准的7-segment显示连接到D2000 GPIO管脚。

物料清单:

的BOM的电路由两个组件:

  • DIS1——LSHD-A103共阴极7-segment显示器(逮老鼠,0.66美元)
  • RN - 330Ω电阻网络(14-pin) (逮老鼠,0.80美元)

示意图

下面的示意图详细电路:

D2000 7-segment显示电路原理图。

这种电路以及基本EERAM电路使得整个项目。

项目范围

很多的例子使用7-segment显示存在,而不是进入的基本操作的细节显示,你可以阅读的背景,在这之前的接口AAC项目而在AAC教科书

在我们的项目中,只会显示周期不断通过数字0 - 9,与3秒钟延迟之间的变化。通常,停电后,程序将重新启动电源并开始循环返回时最初的程序价值。

然而,这个项目的不同,我们将使用EERAM自动保存数字值在一个电源故障。权力返回时,数字值将被恢复和计数将继续存在的价值,当权力失败了。

项目的完整的程序,EERAM_7_segment。C, is liberally commented and the following narrative is offered for further explanation.

项目步骤

您必须将ASE在状态寄存器设置为启用自动存储在运行程序之前(见章节描述EERAM_CNTRL_STATUS_REG.C)。演示程序只使用车库小函数,而不是软件或硬件存储功能解释。

程序使用全局变量LOC1pre和LOC2post指定两个地址EERAM数字值。200年和202年我们有任意选择的地址。

程序的主要()函数首先为适当延迟间隔允许eepm一加电就被转移到存储器。随后,GPIO和我2C是初始化和SRAM的位置在LOC1pre LOC2post读取的值来确定数字在进入计数和显示循环。

基本的方法是执行一个循环计数和显示

  1. 从存储器中读取当前值的位数(LOC1pre和LOC2post),
  2. 更新这个值,
  3. 节省了SRAM的价值(LOC1pre),
  4. 改变显示的值,
  5. 更新的价值SRAM (LOC2post),
  6. 然后等待3秒钟再做。

时的前一个值是“9”更新为“0”。这是很简单,但有一些皱纹。

首先,我们在挽救两位数的值,一旦(LOC1pre)之前立即改变显示,一旦(LOC2post)后立即更改显示。实现这个计划,因为它是可能的,权力可以被打断后更新的显示变量之前完成更新显示。(诚然,这是不可能的,我从来没有见过它发生在测试)。出现这种情况可以被探测到,可想而知,您可能希望以特定的方式处理更新如果真的发生。所包括的项目,我们只是调用一个虚常规(不匹配(void))如果检测到的情况,但是我们认为的价值LOC1pre数字计数。

这个项目还需要能够检测首次运行时设置的初始值数字计数。在这种情况下,一个假设是,程序第一次运行时,LOC1pre的价值和LOC2post是‘255’。因此,255年这些位置必须有一个起始值,可以实现使用的实用程序EERAM_S_RW。C或EERAM_RW.C。如果这些位置是解读为“255”,然后初始化数到“0”。

我们也检查一个无效的值数,这是任何值大于9和小于255。这只会发生如果读取的值被损坏或有某种意外的编程错误。在这种情况下,终端发生错误和一个函数,闪烁显示输入“E”。函数也称为事件的我2C传输错误。除非显式地测试函数,我从来没有观察到这发生在测试期间。

程序流在这一点上,发现了一个有效的计算值并显示它。数从EERAM保存的价值,恢复从eepm如果电源故障,或是程序第一次执行时初始值。延迟3秒后,程序进入主循环计数和显示。

其余的项目包含支持的函数应该容易理解通过代码中的注释。

案板上完成的项目(左:EERAM电路;右:7位显示电路)。

你可以关掉电源,电源返回时,显示将显示值,当权力被和继续。

在程序是一个简单的演示,它应该很容易看到过程可以扩大到保存和恢复多个程序变量,以及其他数据。

封闭的思想

EERAM提供了一种相对简单、经济的方法来解决问题相关的变量和数据的损失后,电源故障。它确实需要一些编程空中,在我看来,它比建设更简单,更容易实现所需的电路维护权力足够长到一个单独的eepm写同样的内容。

因为用户程序只能与SRAM, eepm耐力的问题被最小化,因为写作eepm只发生在电源故障或程序控制下一个明确的行动。hardware-initiated存储的附加功能,软件存储/回忆,和内存块保护提供额外的灵活性。

程序文件的项目可以通过点击下面的链接下载:

EERAM_Code.zip

自己尝试这个项目!BOM。