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

Dependents:   EERAM_example

Committer:
vargham
Date:
Tue Apr 25 15:05:37 2017 +0000
Revision:
0:19f9af07424a
Child:
1:6028bc22d82f
EERAM initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vargham 0:19f9af07424a 1 /**
vargham 0:19f9af07424a 2 * @file eeram_main.cpp
vargham 0:19f9af07424a 3 * @brief Example program for Microchip I2C EERAM devices (47x04 and 47x16)
vargham 0:19f9af07424a 4 * @author Mark Peter Vargha, vmp@varghamarkpeter.hu
vargham 0:19f9af07424a 5 * @version 1.0.0
vargham 0:19f9af07424a 6 *
vargham 0:19f9af07424a 7 * Copyright (c) 2017
vargham 0:19f9af07424a 8 *
vargham 0:19f9af07424a 9 * Licensed under the Apache License, Version 2.0 (the "License");
vargham 0:19f9af07424a 10 * you may not use this file except in compliance with the License.
vargham 0:19f9af07424a 11 * You may obtain a copy of the License at
vargham 0:19f9af07424a 12 *
vargham 0:19f9af07424a 13 * http://www.apache.org/licenses/LICENSE-2.0
vargham 0:19f9af07424a 14 *
vargham 0:19f9af07424a 15 * Unless required by applicable law or agreed to in writing, software
vargham 0:19f9af07424a 16 * distributed under the License is distributed on an "AS IS" BASIS,
vargham 0:19f9af07424a 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vargham 0:19f9af07424a 18 * See the License for the specific language governing permissions and
vargham 0:19f9af07424a 19 * limitations under the License.
vargham 0:19f9af07424a 20 */
vargham 0:19f9af07424a 21
vargham 0:19f9af07424a 22 #include "mbed.h"
vargham 0:19f9af07424a 23 #include "EERAM.h"
vargham 0:19f9af07424a 24
vargham 0:19f9af07424a 25 #define PIN_I2C_SDA PC_9
vargham 0:19f9af07424a 26 #define PIN_I2C_SCL PA_8
vargham 0:19f9af07424a 27
vargham 0:19f9af07424a 28 #define I2C_FREQUENCY 1000000
vargham 0:19f9af07424a 29
vargham 0:19f9af07424a 30 Serial serial(PA_9, PA_10); //Tx, Rx
vargham 0:19f9af07424a 31 I2C i2c(PIN_I2C_SDA, PIN_I2C_SCL); //SDA, SCL
vargham 0:19f9af07424a 32 EERAM eeram(i2c, 2048);
vargham 0:19f9af07424a 33
vargham 0:19f9af07424a 34 void printI2C()
vargham 0:19f9af07424a 35 {
vargham 0:19f9af07424a 36 //0x41 Discovery Touch
vargham 0:19f9af07424a 37 //0x18 EERAM control
vargham 0:19f9af07424a 38 //0x50 EERAM memory
vargham 0:19f9af07424a 39
vargham 0:19f9af07424a 40 int error;
vargham 0:19f9af07424a 41 int address;
vargham 0:19f9af07424a 42 int nDevices = 0;
vargham 0:19f9af07424a 43
vargham 0:19f9af07424a 44 serial.printf("Scanning I2C devices...\r\n");
vargham 0:19f9af07424a 45
vargham 0:19f9af07424a 46 for(address = 1; address < 127; address++ )
vargham 0:19f9af07424a 47 {
vargham 0:19f9af07424a 48 i2c.start();
vargham 0:19f9af07424a 49 error = i2c.write(address << 1); //We shift it left because mbed takes in 8 bit addreses
vargham 0:19f9af07424a 50 i2c.stop();
vargham 0:19f9af07424a 51 if (error == 1)
vargham 0:19f9af07424a 52 {
vargham 0:19f9af07424a 53 serial.printf("I2C device found at address 0x%X\r\n", address); //Returns 7-bit addres
vargham 0:19f9af07424a 54 nDevices++;
vargham 0:19f9af07424a 55 }
vargham 0:19f9af07424a 56
vargham 0:19f9af07424a 57 }
vargham 0:19f9af07424a 58 serial.printf("I2C scan finished.\r\n");
vargham 0:19f9af07424a 59 if (nDevices == 0)
vargham 0:19f9af07424a 60 {
vargham 0:19f9af07424a 61 serial.printf("No I2C devices found.\r\n");
vargham 0:19f9af07424a 62 }
vargham 0:19f9af07424a 63
vargham 0:19f9af07424a 64 }
vargham 0:19f9af07424a 65
vargham 0:19f9af07424a 66 void fillTestData(char data[], uint8_t start, int length)
vargham 0:19f9af07424a 67 {
vargham 0:19f9af07424a 68 for (int i = 0; i < length; i++) data[i] = start + i;
vargham 0:19f9af07424a 69 }
vargham 0:19f9af07424a 70
vargham 0:19f9af07424a 71 void eeramDataTest()
vargham 0:19f9af07424a 72 {
vargham 0:19f9af07424a 73 const int testDataLength = 16;
vargham 0:19f9af07424a 74 char data[testDataLength];
vargham 0:19f9af07424a 75
vargham 0:19f9af07424a 76 //Write
vargham 0:19f9af07424a 77 //eeram.fillMemory(0xFF);
vargham 0:19f9af07424a 78
vargham 0:19f9af07424a 79 fillTestData(data, 0x0, testDataLength);
vargham 0:19f9af07424a 80 serial.printf("Write %d bytes to 0x0: %d\r\n", testDataLength, eeram.write(0x0, data, testDataLength));
vargham 0:19f9af07424a 81
vargham 0:19f9af07424a 82 fillTestData(data, 0x50, testDataLength);
vargham 0:19f9af07424a 83 serial.printf("Write %d bytes to 0x500: %d\r\n", testDataLength, eeram.write(0x500, data, testDataLength));
vargham 0:19f9af07424a 84
vargham 0:19f9af07424a 85 fillTestData(data, 0x70, testDataLength);
vargham 0:19f9af07424a 86 serial.printf("Write %d bytes to 0x700: %d\r\n", testDataLength, eeram.write(0x700, data, testDataLength));
vargham 0:19f9af07424a 87
vargham 0:19f9af07424a 88 //Dump
vargham 0:19f9af07424a 89 serial.printf("Dump contents 0x0, 16\r\n");
vargham 0:19f9af07424a 90 eeram.dump(serial, 0x0, testDataLength);
vargham 0:19f9af07424a 91 serial.printf("Dump contents 0x500, 16\r\n");
vargham 0:19f9af07424a 92 eeram.dump(serial, 0x500, testDataLength);
vargham 0:19f9af07424a 93 serial.printf("Dump contents 0x700, 16\r\n");
vargham 0:19f9af07424a 94 eeram.dump(serial, 0x700, testDataLength);
vargham 0:19f9af07424a 95 //serial.printf("Dump all\r\n");
vargham 0:19f9af07424a 96 //eeram.dump(serial);
vargham 0:19f9af07424a 97 serial.printf("Dump done\r\n");
vargham 0:19f9af07424a 98
vargham 0:19f9af07424a 99 //Read back
vargham 0:19f9af07424a 100 fillTestData(data, 0x0, testDataLength);
vargham 0:19f9af07424a 101 serial.printf("Read back 16 bytes from 0x500: %d\r\n", eeram.read(0x500, data, testDataLength));
vargham 0:19f9af07424a 102 serial.printf("%.4X ", 0x500);
vargham 0:19f9af07424a 103 for (int i = 0; i < testDataLength; i++)
vargham 0:19f9af07424a 104 {
vargham 0:19f9af07424a 105 serial.printf("%.2X ", data[i]);
vargham 0:19f9af07424a 106 }
vargham 0:19f9af07424a 107 serial.printf("\r\n");
vargham 0:19f9af07424a 108 }
vargham 0:19f9af07424a 109
vargham 0:19f9af07424a 110 void eeramRegisterTest()
vargham 0:19f9af07424a 111 {
vargham 0:19f9af07424a 112 eeram.dumpRegisters(serial);
vargham 0:19f9af07424a 113 }
vargham 0:19f9af07424a 114
vargham 0:19f9af07424a 115 int main()
vargham 0:19f9af07424a 116 {
vargham 0:19f9af07424a 117 serial.baud(460800);
vargham 0:19f9af07424a 118 i2c.frequency(I2C_FREQUENCY); //Hz
vargham 0:19f9af07424a 119 serial.printf("\r\nI2C EERAM example\r\n");
vargham 0:19f9af07424a 120
vargham 0:19f9af07424a 121 //printI2C();
vargham 0:19f9af07424a 122
vargham 0:19f9af07424a 123 serial.printf("Is EERAM device ready?\r\n");
vargham 0:19f9af07424a 124 while (!eeram.isReady());
vargham 0:19f9af07424a 125 serial.printf("Device is ready.\r\n");
vargham 0:19f9af07424a 126
vargham 0:19f9af07424a 127 eeram.readStatus();
vargham 0:19f9af07424a 128 eeram.setAutoStoreEnabled(true);
vargham 0:19f9af07424a 129 eeram.setProtectedMemoryArea(U64);
vargham 0:19f9af07424a 130 eeram.writeStatusIfChanged(true);
vargham 0:19f9af07424a 131 serial.printf("Status: %.2X\r\n", eeram.getStatus());
vargham 0:19f9af07424a 132
vargham 0:19f9af07424a 133 eeramDataTest();
vargham 0:19f9af07424a 134
vargham 0:19f9af07424a 135 eeramRegisterTest();
vargham 0:19f9af07424a 136
vargham 0:19f9af07424a 137 //eeram.store(true);
vargham 0:19f9af07424a 138 //eeram.recall(true);
vargham 0:19f9af07424a 139
vargham 0:19f9af07424a 140 while (true)
vargham 0:19f9af07424a 141 {
vargham 0:19f9af07424a 142
vargham 0:19f9af07424a 143 }
vargham 0:19f9af07424a 144 }