Example program for Microchip 47x04 and 47x16 EERAM devices.
Revision 0:f7121193ff7e, committed 2017-04-25
- Comitter:
- vargham
- Date:
- Tue Apr 25 15:45:34 2017 +0000
- Child:
- 1:e20c1294ccee
- Commit message:
- EERAM example application initial commit.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EERAM.lib Tue Apr 25 15:45:34 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/vargham/code/EERAM/#19f9af07424a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eeram_main.cpp Tue Apr 25 15:45:34 2017 +0000 @@ -0,0 +1,171 @@ +/** +* @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) + { + + } +} + +/* +#include "mbed.h" +#include "EERAM.h" + +EERAM eeram(PC_9, PA_8, 2048); //SDA, SCL + +int main() +{ + if (!eeram.isReady(100)) //Checks device with 100 ms timeout + { + printf("Device is not present."); + while (1); + } + eeram.readStatus(); //Reads status register + eeram.setAutoStoreEnabled(true, true); //Set auto store on power down to true and stores if not stored before + while (1) + { + char dataStore[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + eeram.write(0x100, dataStore, 16); //We can not wear EEPROM out, so it is ok to write data to the device frequently. + wait(2.0); + char dataRead[16]; + eeram.read(0x100, dataRead, 16); + wait(2.0); + } +} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-dev.lib Tue Apr 25 15:45:34 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-dev/#e13f6fdb2ac4