Example program for Microchip 47x04 and 47x16 EERAM devices.

Dependencies:   EERAM mbed-dev

Committer:
vargham
Date:
Tue Apr 25 15:45:34 2017 +0000
Revision:
0:f7121193ff7e
Child:
2:e7a7a5328184
EERAM example application initial commit.

Who changed what in which revision?

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