0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用Arduino EEPROM在重启后保存数据

454398 ? 来源:网络整理 ? 作者:网络整理 ? 2019-11-28 10:38 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

您知道Arduino在关闭时可以存储数据吗?草图不存储在闪存中。我说的是EEPROM中的可变数据。加入我的行列,向我展示如何读写它,以及它可以为您的项目做什么。

如果您不熟悉Arduino,请确保阅读我们的初学者指南。

什么是EEPROM?

EEPROM代表电可擦可编程只读存储器。这是一种非易失性存储器。如果您不了解任何含义,请不要担心。即使没有电源,它也可以简单地存储数据(与RAM不同,RAM需要电力才能保留任何数据)。

EEPROM内置于众多处理器中,例如Matrix Creator Pi HAT中使用的现场可编程门阵列(FPGA)。所有的Arduino都有EEPROM,但容量因型号而异。请务必查看我们的购买指南以获取有关每块板的更多详细信息。

工作原理

使用 Fowler-Nordheim隧道对EEPROM进行电擦除和编程。您无需了解技术细节即可使用它。基本前提是用电来更改二进制数据(什么是二进制)。可以电子方式读取,擦除和重写。

幸运的是,Arduino语言可以轻松更改数据,而无需任何计算机科学学位。

预期寿命

虽然在Arduino中易于使用EEPROM,但寿命确实有限。 EEPROM指定可处理100,000个读/擦除周期。这意味着您可以在EEPROM变得不稳定之前写入并擦除/重写数据100,000次。实际上,取决于每个处理器的容差,Atmel(Arduino“芯片”的制造商)半导体可以处理更多或更少的循环次数。

一旦某个位置被写入并擦除了太多次,它就会开始变得不可靠。它可能无法返回正确的数据,也可能无法返回相邻位的值。

这听起来像很多次写入,但是如果以编程方式进行读取和写入(在《例如,strong》 loop )。读取数据不会降低芯片质量,仅写入会。您可以无忧无虑地从EEPROM读取数据!

请务必注意,此限制适用于每个内存位置。您的Arduino在EEPROM中可能有1,000个或更多可用的存储位置,因此,如果您对一个位置写入太多次,则只会影响该位置,而不会影响其他位置。稍后,我将讨论耗损均衡,它可以通过均匀分配数据来减少EEPROM的耗损-SSD可以利用这一点。

它有什么用?

EEPROM对于您的Arduino项目非常有用。由于即使断电也能记住数据,因此您可以存储Arduino的状态。也许您可以建造一个可以记住其位置或剩余多少“弹药”的激光转塔。您可以使用它来控制设备,并记录设备被激活的次数。

EEPROM最适合诸如设置或高分的事情。如果要定期写入复杂数据,则可以考虑使用以太网屏蔽(具有内置SD插槽)或Raspberry Pi。

读写

现在,理论已成为现实,让我们看看如何读写一些数据!首先,包括库(Arduino IDE随附):

#include

现在写入一些数据:

EEPROM.write(0, 12);

这会将数字 12 写到EEPROM位置 0 。每次写入需要3.3毫秒( ms ,1000ms = 1秒)。请注意,您不能写字母( char ),只允许从0到255的数字。这就是为什么EEPROM非常适合设置或高分,但不适用于播放器名称或单词的原因。可以使用这种方法存储文本(您可以将字母表中的每个字母映射到一个数字),但是您将需要具有多个存储位置-每个字母一个位置。

以下是您的阅读方式该数据:

EEPROM.read(0);

零是您之前写入的地址。如果您以前没有写过地址,它将返回最大值( 255 )。

有一些更有用的方法可用。假设您想存储小数位或字符串:

EEPROM.put(2,“12.67”);

这会将数据写入多个位置,这很容易编写,但仍然很方便。您仍需要跟踪已写入的位置数,以免意外覆盖数据!您必须使用 get 方法再次检索此数据:

float f = 0.00f;

EEPROM.get(2, f);

get中的值存储在浮点型 f 变量。请注意,如何使用 0.00f 作为值进行初始化。 f 使编译器知道您可能希望在此变量中存储大量数字,因此它会在编译过程中设置一些其他配置。

Arduino网站上的EEPROM文档还有更多示例。

磨损平衡

磨损平衡是一种用于减少磨损并延长EEPROM寿命的技术。如果您仅在一个小型项目上工作,则不必担心这一点。

保存EEPROM寿命的最简单方法是限制您的写入到特定位置。您可以通过先读取地址来完成此操作,如果您要写入的值已经存在,则无需再次写入(请记住,读取数据无害)。操作方法如下:

int safeWrite(int data, address) {

if(EEPROM.read(address) != data) {

EEPROM.write(address, data);

}

}

这是相当简单的代码,但是仅适用于整数!不用重新发明轮子,而是使用Arduino EEPROM库中内置的功能:

EEPROM.update(address, val);

此方法与 write 方法,尽管它可能会大大减少所需的写入次数!

如果您需要写入大量数据,并且担心芯片消耗wearing尽,则可以跟踪进行多少次写入,尽管这会使用更多数据。这是伪代码的粗略实现:

var address = 0

var writeCount = 0

if(writeCount 》 75,000)

writeCount = 0

address += 1

EEPROM.write(address, data)

您将需要将地址和writeCount存储在EEPROM中(并且writeCount需要在地址位置之间划分)。在大多数情况下,将不需要此级别的保护。 Arduino也是如此便宜,因此您可能会发现购买备份更容易!

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • EEPROM
    +关注

    关注

    9

    文章

    1094

    浏览量

    84121
  • Arduino
    +关注

    关注

    190

    文章

    6501

    浏览量

    193136
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    功率分析仪的“存储”与“数据保存”模式如何保存测量数据呢?

    数据保存”模式和“存储”模式将通过差异化功能设定满足用户多样化的数据存储需求:当您仅需保存一组数据时可选择“
    的头像 发表于 07-23 17:51 ?488次阅读
    功率分析仪的“存储”与“<b class='flag-5'>数据</b><b class='flag-5'>保存</b>”模式如何<b class='flag-5'>保存</b>测量<b class='flag-5'>数据</b>呢?

    FLASH模拟EEPROM

    的片上 FLASH 模拟EEPROM 功能。 1 FLASH 与 EEPROM 简介 FLASH 和 EEPROM 都为非易失性存储器,断电
    发表于 07-16 15:13

    如何从CYUSB3014-BZXCT读取/写入EEPROM固件?

    我有一个 CYUSB3014-BZXCT 芯片,其中保存EEPROM 数据。 我还有第二个空的 CYUSB3014,我想将第一个芯片的 EEPROM
    发表于 05-07 06:46

    window10选择更新并重启重启转圈一晚上,什么原因

    window10选择更新并重启重启转圈一晚上,什么原因
    发表于 03-25 10:23

    如何优化EEPROM数据存储策略

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器)是一种非挥发性存储器,可以没有电源的情况下保持数据
    的头像 发表于 12-16 17:21 ?1586次阅读

    嵌入式系统中使用EEPROM的优缺点

    同时也存在一些局限性。以下是EEPROM嵌入式系统中使用的优缺点分析: 优点 非易失性存储 : EEPROM中的数据断电
    的头像 发表于 12-16 16:57 ?1067次阅读

    EEPROM嵌入式系统中的应用 EEPROM数据保护技术解析

    于存储设备的配置参数,如网络设置、用户偏好设置等。这些参数系统重启仍然需要保持不变,因此EEPROM提供了一个理想的存储
    的头像 发表于 12-16 16:37 ?3080次阅读

    ADS1278EVM-PDK连续采集方式保存数据时,能否保存为单个文件?

    ADS1278EVM-PDK请问连续采集方式保存数据时,Ready按只能保存一系列文件(是不是不断刷新只保存最后一次
    发表于 12-02 07:19

    ADS1293EVM保存数据时候,始终只能保存CH1的数据,而其他chanel的数据却无法保存到txt文件下,怎么解决?

    我购买了ADS1293EVM开发板,使用官方软件时候,无论我怎样设置,无论开启了几个通路,当我点保存数据时候,始终只能保存CH1的
    发表于 11-29 06:38

    EEPROM轻量级的简易类文件的数据读写库:EEPROMFS

    小。 这里就给大家分享一款EEPROM轻量级的简易类文件的数据读写库:EEPROMFS 1 关于EEPROMFS EEPROMFS,基于EEPROM的简易类文件的数据读写库,方便做动态
    的头像 发表于 11-15 16:31 ?1309次阅读
    <b class='flag-5'>EEPROM</b>轻量级的简易类文件的<b class='flag-5'>数据</b>读写库:EEPROMFS

    LMK05318手册里的编写EEPROM的步骤,这个掩码什么意思?

    ,不能出来正常波形。 2.按手册里的步骤执行完,发现输出没有波形,并且断电重启也没有波形。但是代码中读R157寄存器的第二位是清零状态的,表示EEPROM写入完成。 3.写入R157的值
    发表于 11-11 08:14

    eeprom芯片型号怎么确定

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器)是一种非易失性存储器,可以不移除芯片的情况下,通过
    的头像 发表于 10-17 10:33 ?2206次阅读

    异常重启怎么破?多方排查,原因竟然是。。。

    ?又是异常重启。。。让人摸不到头脑。 这几天,看到客户上报了重启问题,说是查不出原因。 重启现象是 ——有极个别设备在工作中不定时反复异常重启,大部分设备正常;反复
    的头像 发表于 10-14 07:04 ?1098次阅读
    异常<b class='flag-5'>重启</b>怎么破?多方排查<b class='flag-5'>后</b>,原因竟然是。。。

    拥有SHA-256核心和32Kbits的EEPROM应用的加密芯片-GEN-FA

    加密芯片 - GEN -FA有32 Kbits的EEPROM。配置数据和用户数据可以保存在EEPRO m。数据由密码和加密n保护。GEN有S
    的头像 发表于 09-13 09:36 ?821次阅读
    拥有SHA-256核心和32Kbits的<b class='flag-5'>EEPROM</b>应用的加密芯片-GEN-FA

    EEPROM故障的原因和影响

    EEPROM(Electrically Erasable Programmable Read-Only Memory),即电可擦除可编程只读存储器,是一种非易失性存储器芯片,能够不通电的情况下保持
    的头像 发表于 09-05 10:56 ?8954次阅读