R/W function for 24LC256 EEPROM

Fork of Nucleo F030R8 24LC256 EEPROM I2C by adamump simus

Committer:
andcor02
Date:
Tue Dec 20 14:25:12 2016 +0000
Revision:
1:0aa405151a74
Parent:
0:34c4fa6b49ac
Library to R/W for 24LC256 EEPROM;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adamumpsimus 0:34c4fa6b49ac 1 #include "mbed.h"
adamumpsimus 0:34c4fa6b49ac 2
andcor02 1:0aa405151a74 3 I2C i2c(PTE25, PTE24);
andcor02 1:0aa405151a74 4 Serial pc(USBTX, USBRX);
andcor02 1:0aa405151a74 5 int address = 0xA2;
andcor02 1:0aa405151a74 6 int pointerAdddress = 0;
andcor02 1:0aa405151a74 7 char s[64];
andcor02 1:0aa405151a74 8
adamumpsimus 0:34c4fa6b49ac 9 // function declaration
adamumpsimus 0:34c4fa6b49ac 10 void writeEEPROM(int address, unsigned int eeaddress, char *data, int size);
adamumpsimus 0:34c4fa6b49ac 11 void readEEPROM(int address, unsigned int eeaddress, char *data, int size);
adamumpsimus 0:34c4fa6b49ac 12
adamumpsimus 0:34c4fa6b49ac 13 // this function has 63 bytes write limit
adamumpsimus 0:34c4fa6b49ac 14 void writeEEPROM(int address, unsigned int eeaddress, char *data, int size)
adamumpsimus 0:34c4fa6b49ac 15 {
adamumpsimus 0:34c4fa6b49ac 16 char i2cBuffer[size + 2];
adamumpsimus 0:34c4fa6b49ac 17 i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB
adamumpsimus 0:34c4fa6b49ac 18 i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB
adamumpsimus 0:34c4fa6b49ac 19
adamumpsimus 0:34c4fa6b49ac 20 for (int i = 0; i < size; i++) {
adamumpsimus 0:34c4fa6b49ac 21 i2cBuffer[i + 2] = data[i];
adamumpsimus 0:34c4fa6b49ac 22 }
adamumpsimus 0:34c4fa6b49ac 23
adamumpsimus 0:34c4fa6b49ac 24 int result = i2c.write(address, i2cBuffer, size + 2, false);
adamumpsimus 0:34c4fa6b49ac 25 wait_ms(6);
adamumpsimus 0:34c4fa6b49ac 26 }
adamumpsimus 0:34c4fa6b49ac 27
adamumpsimus 0:34c4fa6b49ac 28 // this function has no read limit
adamumpsimus 0:34c4fa6b49ac 29 void readEEPROM(int address, unsigned int eeaddress, char *data, int size)
adamumpsimus 0:34c4fa6b49ac 30 {
adamumpsimus 0:34c4fa6b49ac 31 char i2cBuffer[2];
adamumpsimus 0:34c4fa6b49ac 32 i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB
adamumpsimus 0:34c4fa6b49ac 33 i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB
adamumpsimus 0:34c4fa6b49ac 34
adamumpsimus 0:34c4fa6b49ac 35 // Reset eeprom pointer address
adamumpsimus 0:34c4fa6b49ac 36 int result = i2c.write(address, i2cBuffer, 2, false);
adamumpsimus 0:34c4fa6b49ac 37 wait_ms(6);
adamumpsimus 0:34c4fa6b49ac 38
adamumpsimus 0:34c4fa6b49ac 39 // Read eeprom
adamumpsimus 0:34c4fa6b49ac 40 i2c.read(address, data, size);
adamumpsimus 0:34c4fa6b49ac 41 wait_ms(6);
andcor02 1:0aa405151a74 42 }
andcor02 1:0aa405151a74 43
andcor02 1:0aa405151a74 44 int main()
andcor02 1:0aa405151a74 45 {
andcor02 1:0aa405151a74 46 char data_read[64];
andcor02 1:0aa405151a74 47 readEEPROM(address, pointerAdddress, data_read, 64);
andcor02 1:0aa405151a74 48 pc.printf("Previous data stored: %s\n", data_read);
andcor02 1:0aa405151a74 49 while(1){
andcor02 1:0aa405151a74 50
andcor02 1:0aa405151a74 51 pc.gets(s,64);
andcor02 1:0aa405151a74 52 char writeDataLen = 0;
andcor02 1:0aa405151a74 53 do {writeDataLen++;} while (s[writeDataLen]); // calculate the text length
andcor02 1:0aa405151a74 54
andcor02 1:0aa405151a74 55 writeEEPROM(address, pointerAdddress, s, writeDataLen);
andcor02 1:0aa405151a74 56 pc.printf("Data written: %s\n", s);
andcor02 1:0aa405151a74 57
andcor02 1:0aa405151a74 58 // read the data back
andcor02 1:0aa405151a74 59 char data_read[writeDataLen];
andcor02 1:0aa405151a74 60 readEEPROM(address, pointerAdddress, data_read, writeDataLen);
andcor02 1:0aa405151a74 61 pc.printf("Data read: %s\n", data_read);
andcor02 1:0aa405151a74 62 }
andcor02 1:0aa405151a74 63
andcor02 1:0aa405151a74 64 }
andcor02 1:0aa405151a74 65
andcor02 1:0aa405151a74 66
andcor02 1:0aa405151a74 67
andcor02 1:0aa405151a74 68
andcor02 1:0aa405151a74 69
andcor02 1:0aa405151a74 70
andcor02 1:0aa405151a74 71
andcor02 1:0aa405151a74 72