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

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

3天内不再提示

怎样用Arduino读取和写入外部EEPROM的数据

454398 来源:工程师吴畏 2019-07-30 11:32 次阅读

您需要的东西

EEPROM - 24LC512

ATmega328P-PU

16 MHz Crystal

面包板

电阻器4.7k Ohmx 2

电容器22 pFx 2

故事

EEPROM 代表 E lectrically E rasable P 可编程 R ead- O nly M emory。

EEPROM非常重要且有用,因为它是一种非易失性的内存形式。这意味着即使电路板断电,EEPROM芯片仍然保留写入的程序。因此,当您关闭电路板然后重新打开电源时,可以运行写入EEPROM的程序。所以基本上,无论如何,EEPROM都存储并运行程序。这意味着您可以关闭设备,将其关闭3天,然后返回并打开设备,它仍然可以运行其中编程的程序。这就是大多数消费电子设备的工作方式。

该项目由LCSC赞助。我一直在使用LCSC.com的电子元件。 LCSC致力于以最优惠的价格提供各种真正的高品质电子元件,并通过遍布200多个国家的全球运输网络

EEPROM也非常高效传统EEPROM中的各个字节可以独立读取,擦除和重写。在大多数其他类型的非易失性存储器中,这是不可能做到的。

Microchip 24系列EEPROM这样的串行EEPROM器件允许您为任何可以说I²C的器件添加更多存储器。

EEPROM基础知识

Microchip 24LC2512芯片可以采用8引脚DIP封装。 24LC512上的引脚非常直接,包括电源(8),GND(4),写保护(7),SCL/SDA(6,5)和三个地址引脚(1,2,3)。

ROM的简史

早期的“存储程序”类型的计算机 - 例如桌面计算器和键盘解释器 - 开始以二极管矩阵ROM的形式使用ROM。这是一个由分散的半导体二极管组成的存储器,放置在特殊组织的PCB上。随着集成电路的出现,这让位于Mask ROM。掩模ROM很像二极管矩阵ROM,只是它的实现规模要小得多。然而,这意味着你不能只用烙铁移动几个二极管并重新编程。掩模ROM必须由制造商编程,此后不可更改。

不幸的是,Mask ROM价格昂贵并且需要很长时间才能生产,因为每个新程序都需要一个由铸造厂生产的全新设备。然而,在1956年,这个问题通过PROM(可编程ROM)的发明得以解决,PROM允许开发人员自己编写芯片。这意味着制造商可以生产数百万个相同的未编程设备,使其更便宜,更实用。但是,PROM只能使用高压编程设备写入一次。在编程PROM器件之后,无法将器件恢复到未编程状态。

1971年随着EPROM(可擦除可编程ROM)的发明而改变了 - 除了在首字母缩写词中添加另一个字母 - 带有擦除设备的能力,并使用强大的紫外光源将其恢复到“空白”状态。那是对的,你必须在IC上发出明亮的光线才能重新编程,这有多酷?好吧,事实证明它非常酷,除非你是一个开发固件的开发人员,在这种情况下,你真的希望能够使用电子信号重新编程设备。随着EEPROM(电可擦除可编程ROM)的发展,这终于在1983年成为现实,我们到达了当今笨拙的首字母缩略词。

EEPROM的怪癖

EEPROM作为一种方法存在两个主要缺点数据存储。在大多数应用中,优点超过了缺点,但在将EEPROM纳入下一个设计之前,您应该了解它们。

首先,使EEPROM工作的技术也限制了它的可用次数被重写。这与电子被困在构成ROM的晶体管中并累积直到“1”和“0”之间的电荷差异无法识别有关。但不用担心,大多数EEPROM的最大重写次数为100万或更多。只要你没有连续写入EEPROM,你就不可能达到这个最大值。

其次,如果你从中断电源,EEPROM将不会被删除,但它不能保留在你的数据无限期。电子可以漂移出晶体管并通过绝缘体,随着时间的推移有效地擦除EEPROM。也就是说,这通常会在几年内发生(虽然它可以通过加热加速)。大多数制造商表示,在室温下,您的数据在EEPROM上安全10年或更长时间。

在为项目选择EEPROM器件时,还应记住一件事。 EEPROM容量以位而不是字节来度量。 512K EEPROM将保存512K位数据,换句话说,只有64KB。

Arduino硬件连接

好了,现在我们知道了什么是EEPROM,让我们挂起来看看它能做些什么!为了让我们的设备说话,我们需要连接电源和I²C串行线。该器件特别在5VDC下运行,因此我们将它连接到Arduino UNO的5V输出。此外,I²C线路需要上拉电阻才能正常通信。这些电阻的值取决于线路的电容和您想要通信的频率,但非关键应用的一个好的经验法则就是将其保持在kΩ范围内。在本例中,我们将使用4.7kΩ上拉电阻。

此器件上有三个引脚用于选择I²C地址,这样就可以在总线上有多个EEPROM,并以不同的方式对它们进行寻址。您可以将它们全部接地,但我们将对它们进行布线,以便我们可以在本教程的后面部分使用更高容量的设备。

我们将使用面包板将所有内容连接在一起。下图显示了大多数I²CEEPROM器件的正确连接,包括我们销售的Microchip 24系列EEPROM。

阅读和写作

大多数情况下,当您将EEPROM与微控制器结合使用时,您实际上不需要同时查看存储器的所有内容。您只需根据需要在此处读取和写入字节。但是,在这个例子中,我们要将整个文件写入EEPROM,然后将其全部读回,以便我们可以在计算机上查看。这应该让我们对使用EEPROM的想法感到满意,并让我们感觉有多少数据可以真正适合小型设备。

写点东西

我们的示例草图将简单地取出任何字节串行端口并将其写入EEPROM,跟踪我们写入内存的字节数。

将一个字节的内存写入EEPROM通常分三步进行:

发送要写入的内存地址的最高有效字节。

发送要写入的内存地址的最低有效字节。

发送您想要存储在此位置的数据字节。

可能有一些关键词可以解释:

记忆地址

如果你想象512 Kbit EEPROM中的所有字节从0开始排成一行到64000 - 因为一个字节有8位,因此你可以在512 Kbit EEPROM上安装64000字节 - 然后一个存储器地址就是你找到一个特定字节的位置。我们需要将该地址发送到EEPROM,以便它知道放置我们发送的字节的位置。

最重要和最不重要的字节

因为256 Kbit EEPROM中有32000个可能的位置 - 并且因为255是可以在一个字节中编码的最大数字 - 我们需要以两个字节发送该地址。首先,我们发送最高有效字节(MSB) - 在这种情况下的前8位。然后我们发送最低有效字节(LSB) - 第二个8位。为什么?因为这是设备期望接收它们的方式,所以就是这样。

页面写作

一次写一个字节很好,但是大多数EEPROM设备都有一个叫做“页面写缓冲区”的东西,可以让你写多个每次字节的方式与单个字节的方式相同。我们将在示例草图中利用这一点。

EEPROM使用内部计数器,它会在接收到的每个后续数据字节时自动增加内存位置。一旦发送了内存地址,我们就可以使用最多64个字节的数据。 EEPROM(正确地)假定地址312后跟10个字节将在地址312处记录字节0,在地址313处记录字节1,在地址314处记录字节2,依此类推。

读取东西

从EEPROM读取基本上遵循与写入EEPROM相同的三步过程:

发送要写入的存储器地址的最高有效字节。

发送要写入的内存地址的最低有效字节。

询问该位置的数据字节。

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

    关注

    9

    文章

    923

    浏览量

    80040
  • Arduino
    +关注

    关注

    184

    文章

    6422

    浏览量

    184628
收藏 人收藏

    评论

    相关推荐

    ESP32/Arduino如何使用EEPROM,并且读取写入数据

    EEPROM (electrically erasable programmable read-only memory)是一种用户可修改的ROM,又或者称为闪存(Flash Memory)。
    的头像 发表于 03-19 11:44 394次阅读

    tc399能否通过I2C将数据写入外部eeprom

    地址是否正确。 2. 能否通过 I2C 将数据写入外部 eeprom?如果可能的话... 请建议我们如何写入
    发表于 01-22 08:33

    怎样用ADAU1761设计DRC的压缩/扩展?

    请问怎样用ADAU1761设计DRC的压缩/扩展。我在SigmaStudio 4.5的模块中只找到RMS。如果ADAU1761设计DRC要怎样
    发表于 11-28 06:41

    怎样用32单片机测电压?

    怎样用32单片机测电压
    发表于 10-31 07:09

    如何写入tinyAVR 1系列器件中的闪存和EEPROM

    电子发烧友网站提供《如何写入tinyAVR 1系列器件中的闪存和EEPROM.pdf》资料免费下载
    发表于 09-25 09:55 0次下载
    如何<b class='flag-5'>写入</b>tinyAVR 1系列器件中的闪存和<b class='flag-5'>EEPROM</b>

    PLC中怎样用X和Y两个轴走出直线轨迹?

    PLC中怎样用X和Y两个轴走出直线轨迹呢?那么这两个轴需要配合成速度成线性比例,位置和速度应该如何云运算呢?
    发表于 09-12 09:58 280次阅读
    PLC中<b class='flag-5'>怎样用</b>X和Y两个轴走出直线轨迹?

    如何使用Python和pandas库读取写入文件

    在本文中,我将介绍如何使用 Python 和 pandas 库读取写入文件。 1、安装 pip install pandas 2、读取 import pandas as pd df
    的头像 发表于 09-11 17:52 730次阅读

    怎样解决at24cxx库写入慢的问题?

    在项目中用到了 AT24C512 EEPROM,实际操作发现在写入稍多写的数据时 出现非常慢的情况
    的头像 发表于 09-06 15:35 440次阅读
    <b class='flag-5'>怎样</b>解决at24cxx库<b class='flag-5'>写入</b>慢的问题?

    如何通过Arduino读取电表

    电子发烧友网站提供《如何通过Arduino读取电表.zip》资料免费下载
    发表于 06-16 15:18 1次下载
    如何通过<b class='flag-5'>Arduino</b><b class='flag-5'>读取</b>电表

    怎样用示波器测试lin总线的波特率呢?

    怎样用示波器测试lin总线的波特率呢?有什么方法吗?
    发表于 05-09 11:22

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 05-08 17:34

    请问Proteus仿真软件中怎样用探针测电压呢?

    请问Proteus仿真软件中怎样用探针测电压呢?
    发表于 04-26 15:55

    怎样用74LS00实现两位数据输入的奇偶校验电路?

    怎样用74LS00实现两位数据输入的奇偶校验电路?
    发表于 04-26 11:25

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 04-06 14:29

    请问怎样用一个脉冲使伺服电机旋转呢?

    请问怎样用一个脉冲(信号的一开一关)来从伺服驱动器位置控制上使伺服电机旋转呢?
    发表于 03-30 17:21