Driver library for Microchip I2C EERAM (47x04 and 47x16) 4 kbit or 16 kbit EEPROM backed SRAM.

Dependents:   EERAM_example

Revision:
0:19f9af07424a
Child:
1:6028bc22d82f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EERAM.cpp	Tue Apr 25 15:05:37 2017 +0000
@@ -0,0 +1,144 @@
+/**
+* @file    eeram_main.cpp
+* @brief   Example program for Microchip I2C EERAM devices (47x04 and 47x16)
+* @author  Mark Peter Vargha, vmp@varghamarkpeter.hu
+* @version 1.0.0
+*
+* Copyright (c) 2017
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "mbed.h"
+#include "EERAM.h"
+
+#define PIN_I2C_SDA PC_9
+#define PIN_I2C_SCL PA_8
+
+#define I2C_FREQUENCY 1000000
+
+Serial serial(PA_9, PA_10);  //Tx, Rx
+I2C i2c(PIN_I2C_SDA, PIN_I2C_SCL); //SDA, SCL
+EERAM eeram(i2c, 2048);
+
+void printI2C()
+{
+    //0x41  Discovery Touch
+    //0x18  EERAM control
+    //0x50  EERAM memory
+
+    int error;
+    int address;
+    int nDevices = 0;
+
+    serial.printf("Scanning I2C devices...\r\n");
+
+    for(address = 1; address < 127; address++ )
+    {
+        i2c.start();
+        error = i2c.write(address << 1); //We shift it left because mbed takes in 8 bit addreses
+        i2c.stop();
+        if (error == 1)
+        {
+            serial.printf("I2C device found at address 0x%X\r\n", address); //Returns 7-bit addres
+            nDevices++;
+        }
+
+    }
+    serial.printf("I2C scan finished.\r\n");
+    if (nDevices == 0)
+    {
+        serial.printf("No I2C devices found.\r\n");
+    }
+
+}
+
+void fillTestData(char data[], uint8_t start, int length)
+{
+    for (int i = 0; i < length; i++) data[i] = start + i;
+}
+
+void eeramDataTest()
+{
+    const int testDataLength = 16;
+    char data[testDataLength];
+
+    //Write
+    //eeram.fillMemory(0xFF);
+
+    fillTestData(data, 0x0, testDataLength);
+    serial.printf("Write %d bytes to 0x0: %d\r\n", testDataLength, eeram.write(0x0, data, testDataLength));
+
+    fillTestData(data, 0x50, testDataLength);
+    serial.printf("Write %d bytes to 0x500: %d\r\n", testDataLength, eeram.write(0x500, data, testDataLength));
+
+    fillTestData(data, 0x70, testDataLength);
+    serial.printf("Write %d bytes to 0x700: %d\r\n", testDataLength, eeram.write(0x700, data, testDataLength));
+
+    //Dump
+    serial.printf("Dump contents 0x0, 16\r\n");
+    eeram.dump(serial, 0x0, testDataLength);
+    serial.printf("Dump contents 0x500, 16\r\n");
+    eeram.dump(serial, 0x500, testDataLength);
+    serial.printf("Dump contents 0x700, 16\r\n");
+    eeram.dump(serial, 0x700, testDataLength);
+    //serial.printf("Dump all\r\n");
+    //eeram.dump(serial);
+    serial.printf("Dump done\r\n");
+
+    //Read back
+    fillTestData(data, 0x0, testDataLength);
+    serial.printf("Read back 16 bytes from 0x500: %d\r\n", eeram.read(0x500, data, testDataLength));
+    serial.printf("%.4X ", 0x500);
+    for (int i = 0; i < testDataLength; i++)
+    {
+        serial.printf("%.2X ", data[i]);
+    }
+    serial.printf("\r\n");
+}
+
+void eeramRegisterTest()
+{
+    eeram.dumpRegisters(serial);
+}
+
+int main()
+{
+    serial.baud(460800);
+    i2c.frequency(I2C_FREQUENCY); //Hz
+    serial.printf("\r\nI2C EERAM example\r\n");
+
+    //printI2C();
+
+    serial.printf("Is EERAM device ready?\r\n");
+    while (!eeram.isReady());
+    serial.printf("Device is ready.\r\n");
+
+    eeram.readStatus();
+    eeram.setAutoStoreEnabled(true);
+    eeram.setProtectedMemoryArea(U64);
+    eeram.writeStatusIfChanged(true);
+    serial.printf("Status: %.2X\r\n", eeram.getStatus());
+
+    eeramDataTest();
+
+    eeramRegisterTest();
+
+    //eeram.store(true);
+    //eeram.recall(true);
+
+    while (true)
+    {
+
+    }
+}