第1步:构建测试板
我使用了带有IC2 FRAM突破口的5V Arduino Mini Pro,因为我的相机滑条上的处理器和FRAM芯片可以使用3.3v或5v逻辑。请注意,用于驱动I2C的A4和A5引脚在Mini芯片的边缘上不可用,但位于芯片的中央。您将需要添加电线来访问这些电线(或仅使用Uno进行测试)。
接线很简单。将Arduino上的A4连接到FRAM上的SDA,将A5连接到SCL。添加接地和5V(Vcc)的连接,即可开始编程。
注意:仅仅因为您正在使用I2C作为存储芯片,并不意味着您也不能使用它来驱动LCD屏幕和/或电动机护罩。只要确保每个程序集的地址都不同即可。如果您都是从同一制造商那里购买的,则可能还可以。否则,您可能需要更改地址。大多数董事会都有一种相当容易做到这一点的方法。
第2步:编程Arduino
FRAM库附带的示例非常简单,但是您可能需要运行它以显示一切正常。确定可以正常工作之后,您可以上传我的草图进行尝试。
我添加的两个函数负责保存值并检索它们。 writeMem()函数将要保存的值和保存地址作为输入。接下来,将该值除以256。该数字(MSB =最高有效字节)和余数或模(LSB =最低有效字节)存储在2个单独的存储器地址中。传递函数的地址(在我的示例中,我使用地址10)和下一个顺序地址11存储2个字节。如果要传递多个值进行存储,请确保跳过它们之间的地址,以免覆盖第一个数字的第二个字节。
readMem()是使用2地址中的第一个调用的。同样,我的示例使用地址10。通过将MSB乘以256并将其添加到LSB,可以检索MSB和LSB,并重新构造完整值。
不需要二进制或十六进制数学。。..将其存储并检索。..就是这样!
步骤3:运行示例
在我的示例中,我使用for循环将值存储到一对地址,然后检索这些值,重新构造原始值,然后显示它。然后,我增加该值并再次执行此操作。我将存储并检索的第1000个值发送到串行监视器,因此请打开监视器以查看发生了什么。根据Adafruit的说法,该芯片上的内存可延长其读写寿命。这与Arduino的内存不同,后者具有有限的R/W周期。
我设计的方法最多只能保存65355的值。如果将for循环中的值更改为65355以上,将会看到会发生什么。
问题之一我遇到的是处理各种可变数据类型及其限制。重构后的值一直认为它是整数,因此在滚动到负数之前,它将仅容纳未签名整数的一半。通过编写函数并来回传递值,我发现我的数据类型发生了意外的变化,因此在处理数据时要格外小心。
我在草图中保留了Adafruit的内存转储示例,但发挥了作用。如果您希望它运行,请取消注释草图顶部附近的“//#define dumpMemory”行,它将以16进制的速度将内存缓慢地转储到监视器中。
责任编辑:wv
-
存储器
+关注
关注
38文章
7428浏览量
163507
发布评论请先 登录
相关推荐
评论