Class to provide simple access to I2C EEPROM chiles like Microchip's 24LC range or AMTELS AT24C range. Chips up to 64Kb in size are directly supported.

Dependents:   Nucleo_praktyki

Fork of I2CEeprom by Robin Hourahane

Revision:
2:b7877755371e
Parent:
1:b23f5561266c
--- a/I2CEeprom.cpp	Sun Jul 19 09:34:04 2015 +0000
+++ b/I2CEeprom.cpp	Wed Jan 31 11:54:02 2018 +0000
@@ -15,13 +15,13 @@
  */
 #include "I2CEeprom.h"
 
-I2CEeprom::I2CEeprom(PinName sda, PinName scl, int address, size_t pageSize, size_t chipSize, int busSpeed):
-    m_i2c(sda, scl),
+I2CEeprom::I2CEeprom(I2C *i2c_inst, int address, size_t pageSize, size_t chipSize, int busSpeed):
+    m_i2c(i2c_inst),
     m_i2cAddress(address),
     m_chipSize(chipSize),
     m_pageSize(pageSize)
 {
-    m_i2c.frequency(busSpeed);
+    m_i2c->frequency(busSpeed);
 }
 
 size_t I2CEeprom::read(size_t address, char &value) {
@@ -30,8 +30,8 @@
         return 0;
         
     char values[] = { (address >> 8), (address & 0xFF) };
-    if (m_i2c.write(m_i2cAddress, values, 2) == 0) {
-        if (m_i2c.read(m_i2cAddress, &value, 1) == 0) {
+    if (m_i2c->write(m_i2cAddress, values, 2) == 0) {
+        if (m_i2c->read(m_i2cAddress, &value, 1) == 0) {
             return 1;
         }
     }
@@ -45,8 +45,8 @@
         return 0;
         
     char values[] = { (address >> 8), (address & 0xFF) };
-    if (m_i2c.write(m_i2cAddress, values, 2) == 0) {
-        if (m_i2c.read(m_i2cAddress, buffer, size) == 0) {
+    if (m_i2c->write(m_i2cAddress, values, 2) == 0) {
+        if (m_i2c->read(m_i2cAddress, buffer, size) == 0) {
             return size;
         }
     }
@@ -60,7 +60,7 @@
         return 0;
         
     char values[] = { (address >> 8), (address & 0xFF), value };
-    if (m_i2c.write(m_i2cAddress, values, 3) != 0) {
+    if (m_i2c->write(m_i2cAddress, values, 3) != 0) {
         return 0;
     }
     
@@ -99,7 +99,7 @@
         //printf("Writing [%.*s] at %d size %d\n\r", toWrite, page, address, toWrite);
         // Start the page write with the addres ine one write call.
         char values[] = { (address >> 8), (address & 0xFF) };
-        if (m_i2c.write(m_i2cAddress, values, 2, true) != 0) {
+        if (m_i2c->write(m_i2cAddress, values, 2, true) != 0) {
             // Write failed to return bytes written so far.
             return size - left;
         }
@@ -107,7 +107,7 @@
         // Write the bytes out one at a time to avoid having to copy them to
         // another buffer.        
         for (int count = 0; count != toWrite; ++count) {
-            if (m_i2c.write(*page) == 0) {
+            if (m_i2c->write(*page) == 0) {
             // Write failed to return bytes written so far.
                 return size - left;
             }
@@ -116,7 +116,7 @@
         
         // Stop the transaction now we've completed the page
         // write.
-        m_i2c.stop();
+        m_i2c->stop();
         
         waitForWrite();
         
@@ -152,16 +152,16 @@
         
         //printf("Writing %d at %d size %d\n\r", value, address, toWrite);
         char values[] = { (address >> 8), (address & 0xFF) };
-        if (m_i2c.write(m_i2cAddress, values, 2, true) != 0) {
+        if (m_i2c->write(m_i2cAddress, values, 2, true) != 0) {
             return size - left;
         }
         
         for (int count = 0; count != toWrite; ++count) {
-            if (m_i2c.write(value) == 0)
+            if (m_i2c->write(value) == 0)
                 return size - left;
         }
         
-        m_i2c.stop();
+        m_i2c->stop();
         
         waitForWrite();
         
@@ -176,7 +176,7 @@
     // The chip doesn't ACK while writing to the actual EEPROM
     // so loop trying to do a zero byte write until it is ACKed
     // by the chip.
-    while (m_i2c.write(m_i2cAddress, 0, 0) != 0) {
+    while (m_i2c->write(m_i2cAddress, 0, 0) != 0) {
         // Wait for ack.
         wait_ms(1);
     }