第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
在此處下載并安裝庫Adafruit庫,并查看其示例。
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文章
7648瀏覽量
167292
發布評論請先 登錄
閃速存儲器屬于RAM還是ROM,閃速存儲器一般用來做什么的
安泰功率放大器如何進行鐵電存儲器的高壓極化測試

什么是ROM存儲器的定義
內存儲器分為隨機存儲器和什么
存儲器中訪問速度最快的是什么
鐵電存儲器和Flash的區別
鐵電存儲器有哪些優缺點
鐵電存儲器的結構特點
MSP430FRBoot-適用于MSP430? FRAM大型存儲器型號器件的主存儲器引導加載程序和無線更新

評論