11

Dependencies:   mbed

Committer:
turumputum
Date:
Mon Aug 20 17:44:43 2018 +0000
Revision:
0:51d7f8d33957
122

Who changed what in which revision?

UserRevisionLine numberNew contents of line
turumputum 0:51d7f8d33957 1 #include "mbed.h"
turumputum 0:51d7f8d33957 2
turumputum 0:51d7f8d33957 3
turumputum 0:51d7f8d33957 4 int address = 0xA0;
turumputum 0:51d7f8d33957 5
turumputum 0:51d7f8d33957 6
turumputum 0:51d7f8d33957 7 DigitalOut VCC(PB_5);
turumputum 0:51d7f8d33957 8 DigitalOut GND(PB_13);
turumputum 0:51d7f8d33957 9 I2C i2c(PB_4, PA_8);
turumputum 0:51d7f8d33957 10
turumputum 0:51d7f8d33957 11 DigitalOut myled(LED1);
turumputum 0:51d7f8d33957 12
turumputum 0:51d7f8d33957 13 Serial pc(SERIAL_TX, SERIAL_RX);
turumputum 0:51d7f8d33957 14
turumputum 0:51d7f8d33957 15
turumputum 0:51d7f8d33957 16 void writeEEPROM(int address, unsigned int eeaddress, char *data, int size);
turumputum 0:51d7f8d33957 17 void readEEPROM(int address, unsigned int eeaddress, char *data, int size);
turumputum 0:51d7f8d33957 18
turumputum 0:51d7f8d33957 19
turumputum 0:51d7f8d33957 20 // this function has 63 bytes write limit
turumputum 0:51d7f8d33957 21 void writeEEPROM(int address, unsigned int eeaddress, char *data, int size)
turumputum 0:51d7f8d33957 22 {
turumputum 0:51d7f8d33957 23 char i2cBuffer[size + 2];
turumputum 0:51d7f8d33957 24 i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB
turumputum 0:51d7f8d33957 25 i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB
turumputum 0:51d7f8d33957 26
turumputum 0:51d7f8d33957 27 for (int i = 0; i < size; i++) {
turumputum 0:51d7f8d33957 28 i2cBuffer[i + 2] = data[i];
turumputum 0:51d7f8d33957 29 }
turumputum 0:51d7f8d33957 30
turumputum 0:51d7f8d33957 31 int result = i2c.write(address, i2cBuffer, size + 2, false);
turumputum 0:51d7f8d33957 32 wait_ms(6);
turumputum 0:51d7f8d33957 33 }
turumputum 0:51d7f8d33957 34
turumputum 0:51d7f8d33957 35 // this function has no read limit
turumputum 0:51d7f8d33957 36 void readEEPROM(int address, unsigned int eeaddress, char *data, int size)
turumputum 0:51d7f8d33957 37 {
turumputum 0:51d7f8d33957 38 char i2cBuffer[2];
turumputum 0:51d7f8d33957 39 i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB
turumputum 0:51d7f8d33957 40 i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB
turumputum 0:51d7f8d33957 41
turumputum 0:51d7f8d33957 42 // Reset eeprom pointer address
turumputum 0:51d7f8d33957 43 int result = i2c.write(address, i2cBuffer, 2, false);
turumputum 0:51d7f8d33957 44 wait_ms(6);
turumputum 0:51d7f8d33957 45
turumputum 0:51d7f8d33957 46 // Read eeprom
turumputum 0:51d7f8d33957 47 i2c.read(address, data, size);
turumputum 0:51d7f8d33957 48 wait_ms(6);
turumputum 0:51d7f8d33957 49 }
turumputum 0:51d7f8d33957 50
turumputum 0:51d7f8d33957 51
turumputum 0:51d7f8d33957 52 int main()
turumputum 0:51d7f8d33957 53 {
turumputum 0:51d7f8d33957 54
turumputum 0:51d7f8d33957 55 VCC=1;
turumputum 0:51d7f8d33957 56 GND=0;
turumputum 0:51d7f8d33957 57
turumputum 0:51d7f8d33957 58 pc.printf("I2C EEPROM started...\n");
turumputum 0:51d7f8d33957 59
turumputum 0:51d7f8d33957 60 int pointerAdddress = 0;
turumputum 0:51d7f8d33957 61
turumputum 0:51d7f8d33957 62 wait_ms(3000);
turumputum 0:51d7f8d33957 63
turumputum 0:51d7f8d33957 64 // write some data on eeprom
turumputum 0:51d7f8d33957 65 char writeData[] = {"1234567890"}; // the text length must be below 64 bytes
turumputum 0:51d7f8d33957 66 char writeDataLen = 0;
turumputum 0:51d7f8d33957 67 do {writeDataLen++;} while (writeData[writeDataLen]); // calculate the text length
turumputum 0:51d7f8d33957 68
turumputum 0:51d7f8d33957 69 writeEEPROM(address, pointerAdddress, writeData, writeDataLen);
turumputum 0:51d7f8d33957 70
turumputum 0:51d7f8d33957 71 pc.printf("Data written: %s\n", writeData);
turumputum 0:51d7f8d33957 72
turumputum 0:51d7f8d33957 73
turumputum 0:51d7f8d33957 74 // read the data back
turumputum 0:51d7f8d33957 75 char data_read[writeDataLen];
turumputum 0:51d7f8d33957 76 readEEPROM(address, pointerAdddress, data_read, writeDataLen);
turumputum 0:51d7f8d33957 77
turumputum 0:51d7f8d33957 78 pc.printf("Data read: %s\n", data_read);
turumputum 0:51d7f8d33957 79 }
turumputum 0:51d7f8d33957 80