首页

如何使用Arduino的内部EEPROM?

在本教程中,我们将学习一种称为EEPROM的特殊类型的内存。我们还将看到如何使用Arduino的内部EEPROM和它的用途。我们将搭建一个小电路,了解如何使用Arduino EEPROM的READ和WRITE功能。

作为本教程的扩展,我将在下一个教程中向您展示如何使用外部EEPROM,如AT24C32或AT24C256与Arduino。

简介

计算机中的内存是一门迷人的学科。简单地说,内存是一种用来存储信息的设备。所有的计算机,无论是基于微处理器的大型系统还是基于微控制器的小型嵌入式设备,都需要内存来永久或临时存储数据。

让我们以Arduino为例。如果你看一下本Arduino UNO Pinout教程中提到的Arduino UNO板的规格,你会发现UNO有三种类型的内存:

  • 32 KB Flash
  • 2 KB内存
  • 1 KB EEPROM

撇开大小值不说,Flash和EEPROM是永久内存类型,RAM是临时内存类型。这是什么意思?永久存储器(Permanent Memory)是一种存储器,它可以在断电后保存数据/信息。

另一方面,临时内存用于在程序运行时保存临时数据,它可以保存这些值,直到接通电源。

根据对权力的依赖程度,记忆可以分为两种类型:

  • 非易失性内存
  • 挥发性记忆

Flash和EEPROM属于非易失性内存类别,其中Flash用于存储程序代码,而EEPROM用于存储小数据(如传感器数据日志或硬件信息)。这两个存储器即使在断电的情况下也能保存数据。

对于RAM来说,它是一个易失性存储器,即,一旦电源断开,数据就会消失。

什么是EEPROM?

现在让我们把注意力集中在兴趣的记忆上。EEPROM或E2PROM是电可擦可编程只读存储器的缩写,是较早一代ROM(只读存储器)、PROM(可编程只读存储器)和EPROM(可擦可编程只读存储器)的继承者。

在继续讨论之前,让我们先来上一堂关于记忆的小历史课。ROM或只读存储器是一种非易失性存储器,用于永久存储数据,例如嵌入式系统的固件。

初始ROM是工厂编程的,没有办法改变ROM的内容。这些也被称为MROM(掩码只读存储器)。

后来出现了PROM(可编程只读存储器)。它们可以由最终用户编程(使用一种称为PROM程序员的特殊设备),但这是一次性的工作,也就是说,它们只能被编程一次。

为了克服PROM的“一次性可编程”问题,EPROM被开发出来。它代表可擦可编程只读存储器。通过将其暴露在强紫外线下,记忆可以被擦除,并且可以像PROM一样编程。

EPROM的一个问题是,反复暴露在强光下(通常来自汞蒸气灯)最终会耗尽内存,将擦除周期限制在1000以内。

最后,EEPROM或电可擦可编程只读存储器被开发出来,以便内存可以电擦除,而它仍然放在系统中(这是不可能的EPROM)。

注意:现代闪存是EEPROM的一种,它被用于记忆卡、USB闪存驱动器、固态驱动器、微控制器等。

现代微控制器使用闪存存储固件和eeprom存储小数据(如参数,设备ID,历史记录等)。

Arduino中的EEPROM

在我们的Arduino项目中使用EEPROM允许我们存储简单的数据,如默认设置,LED的状态或继电器的状态,甚至在电源关闭时。

在Arduino中使用EEPROM有两种选择。第一种简单的方法是使用Arduino的内部EEPROM。第二种选择是添加一个外部EEPROM IC,如著名的ATMEL AT24系列。在本教程中,让我们关注Arduino的内部EEPROM。

由于内部EEPROM是微控制器而不是板的特性,所有的Arduino板,如UNO, Mega和Nano都有一定数量的内部EEPROM。

下表显示了在各种Arduino板中使用的一些常见ATMEL微控制器的内部EEPROM的大小。

单片机 董事会 大小
ATmega328P UNO, Nano, Mini 1024字节(1 KB)
ATmega2560 大型 4096字节(4 KB)
ATmega168 纳米 512个字节

Arduino EEPROM库

EEPROM库是一个特殊的库,使您能够读写Arduino板上微控制器的内部EEPROM。它是IDE的标准,你不需要下载任何额外的东西。

Arduino EEPROM库为您提供了五个非常有用的函数:

  • EEPROM.read ()—从EEPROM中读取一个字节。
  • EEPROM.write ()—写一个字节到EEPROM。
  • EEPROM.update ()—如果当前值与前一个值不一致,才向EEPROM写入一个字节。
  • EEPROM.get ()从EEPROM中读取任何数据类型(float或struct或任何数据类型)。
  • EEPROM.put ()-将任何数据类型写入EEPROM (float或struct或任何数据类型)。

在Arduino IDE中有针对EEPROM库的例子。浏览这些来获取更多信息。

测试电路:记住继电器的状态

我们已经看到了很多关于EEPROM的理论,以及Arduino中的EEPROM。所有这些理论只有当我们看到实际实施时才有意义。因此,让我们构建一个小电路来测试Arduino的EEPROM功能。这个应用程序叫做“Arduino能记住中继的状态吗?”

Arduino-EEPROM-Test-Circuit

在这个测试电路中,我将使用一个按钮来打开或关闭继电器。同时,我也将在EEPROM中存储继电器的状态,无论何时按下按钮。因此,如果Arduino重新启动,它首先从EEPROM检查继电器的前一个状态,并将继电器设置到该位置。

线路图

下图是Arduino的EEPROM测试电路图。

Arduino-EEPROM-Test-Circuit-Diagram
Arduino EEPROM测试电路电路图

代码

正如我已经说过的,您不需要任何额外的库。您所要做的就是在代码中包含“EEPROM.h”头文件。

结论

Arduino中EEPROM的初学者指南/教程。在本教程中,您学习了如何使用Arduino的内部EEPROM。在下一篇教程中,我将向您展示如何将外部EEPROM IC添加到Arduino。

一个回应

  1. 伟大的教程!
    一件事,如果我有一个由移动传感器触发的继电器,如何记住继电器的状态,这样当继电器启动,然后断电,它将保持在电源恢复。谢谢

留言回复

您的电邮地址将不会公布。

Electronicshub图标
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu