风筝
发表于: 2019-9-10 07:48:55 | 显示全部楼层

在Arduino开发板上读写因尺寸大而无法存储的文本、图像等数据。


EEPROM,全称Electrically Erasable Programmable Read-Only Memory(电可擦除可编程只读存储器),它非常重要并且有用,因为它是非易失性的存储器形式。这意味着即使电路板断电,EEPROM芯片仍然保留写入的程序。因此,当您断开电路板电源然后重新打开电源时,仍可以运行写入EEPROM的程序。所以EEPROM可以存储并运行程序。这意味着您可以关闭设备,将其关闭3天,然后返回并打开设备,它仍然可以运行其中编程的程序。这就是大多数消费电子设备的工作方式。


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)。

24LC2512.jpg


ROM的简史

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


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


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


EEPROM的怪癖

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


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


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


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


Arduino硬件连接

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


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


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

Hardware .jpg


读写数据

大多数情况下,当您将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相同的三步过程:

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

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

●    询问该位置的数据字节。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-24 12:55 , Processed in 0.042573 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表