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

    文章

    1009

    浏览量

    81355
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186534
收藏 人收藏

    评论

    相关推荐

    EEPROM故障的原因和影响

    存储的数据。它广泛应用于各种电子设备中,用于存储重要的配置信息、程序代码或用户数据。当EEPROM无法正常工作,即无法正确读取写入或保持存
    的头像 发表于 09-05 10:56 2618次阅读

    如何向EEPROM写入数字

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)写入数字是一个相对直接的过程,但涉及到多个步骤和细节。以下是一个详细的步骤说明,旨在帮助您理解并成功向
    的头像 发表于 09-05 10:56 711次阅读

    怎样用THS3201实现输出功率可调?

    怎样用THS3201实现输出功率可调?
    发表于 08-26 08:28

    PGA309EVM-USB写入EEPROM后再读取都是0,为什么?

    使用PGA309EVM-USB评估板及其配套软件模拟校正测试后,按 continue 写入EEPROM后,可以打开cal results 文件,里面的EEPROM都有数据,但是去软件
    发表于 08-15 06:42

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码。
    的头像 发表于 07-30 09:14 676次阅读
    <b class='flag-5'>怎样用</b><b class='flag-5'>Arduino</b>测试锂电池容量

    求教FPGA的RAM与EEPROM问题?

    将一组8位的256个数据从RAM中读取出来,然后写入eeprom中,modesim仿真显示一直写入失败,
    发表于 06-25 16:15

    是否有可能从HX3向EEPROM写入数据

    我想用外部 I2C EEPROM 配置 HX3。 如果我只将配置数据保存到 EEPROM 中,而不需要更改数据,那么是否有可能从 HX3 向
    发表于 05-21 06:11

    向stm8s105内部eeprom写入数据后,重新下载别的程序,这时候内部eeprom里的数据会被擦除掉吗?

    在向stm8s105内部eeprom写入数据后,重新下载别的程序,这时候内部eeprom里的数据会被擦除掉吗?有什么方法将
    发表于 05-16 06:33

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?
    发表于 05-07 06:55

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,stm32f100
    发表于 05-07 06:06

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

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

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

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

    怎样用表来判断加热管的好坏?

    怎样用表来判断加热管的好坏? 万表是电工常用的测量仪器,它可以用来判断加热管的好坏。加热管是一种常见的加热元件,广泛应用于家电、机械设备和工业生产中。在选择和使用加热管时,我们需要了解其电阻值
    的头像 发表于 12-20 17:21 4845次阅读

    如何用IIC方式往ADAU1701的EEPROM写入工程?

    我想问下如何用IIC方式往ADAU1701的EEPROM写入工程,因为我目前IIC方式只能把工程写入ADAU1701功能板上,所以掉电数据
    发表于 11-29 08:30

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

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