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.
Fork of I2CEeprom by
Diff: I2CEeprom.cpp
- 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); }