mFS file system library for EEPROM memory chips.
i2c_eeprom.cpp
- Committer:
- HBP
- Date:
- 2011-02-21
- Revision:
- 0:cbf45dde2b49
- Child:
- 5:a0fe74dce80d
File content as of revision 0:cbf45dde2b49:
/*H**************************************************************************** * FILENAME : i2c_eeprom.cpp * * * * DESCRIPTION : * * Simple library for external I2C EEEPROM. * * * * AUTHOR : Olli Vanhoja START DATE : 2011-02-17 * ******************************************************************************* * * CHANGES : * * VERSION DATE WHO DETAIL * 0.1 2011-02-21 Olli Vanhoja Initial release version * *H*/ #include "mbed.h" #include "i2c_eeprom.h" I2C i2c(p28, p27); DigitalOut BusyLed(LED1); i2c_eeprom::i2c_eeprom() { } i2c_eeprom::i2c_eeprom(int hwAddr) { i_i2c_address = hwAddr; } void i2c_eeprom::write(char *data, uint16 iAddr, unsigned int n) { char *pi2c_data[3]; // Pointers for CW items char i2c_data[3]; // Final CW BusyLed = 1; /* Convert address to hi and low byte array * This is really pointless even though they are * called pointers it would be lot easier to do this * conversion without any pointers */ uint16 *piAddr = &iAddr; pi2c_data[0] = (char *)piAddr+1; pi2c_data[1] = (char *)piAddr; for (uint16 i=0; i < n; i++) { pi2c_data[2] = &data[i]; // Apply actual values from pointer //for (int n=0; n < 3; n++) // i2c_data[n] = *pi2c_data[n]; i2c_data[0] = *pi2c_data[0]; i2c_data[1] = *pi2c_data[1]; i2c_data[2] = *pi2c_data[2]; // Send write command if(i2c.write(i_i2c_address, i2c_data, 3)) error("Write failed!\n\r"); iAddr++; // increment address counter // Wait for ACK while(i2c.write(i_i2c_address, NULL, 0)){} } BusyLed = 0; } void i2c_eeprom::read(uint16 iAddr, uint16 n, char *out) { char *pi2c_data[2]; // Pointers for CW items char i2c_data[2]; // Final CW uint16 *piAddr = &iAddr; pi2c_data[0] = (char *)piAddr+1; pi2c_data[1] = (char *)piAddr; BusyLed = 1; // Apply actual values from pointer //for (int i=0; i < 2; i++) // i2c_data[i] = *pi2c_data[i]; i2c_data[0] = *pi2c_data[0]; i2c_data[1] = *pi2c_data[1]; // Send read command if(i2c.write(i_i2c_address, i2c_data, 2)) error("Read failed! ref:1\n\r"); if(i2c.read(i_i2c_address, out, n)) error("Read failed! ref:2\n\r"); BusyLed = 0; }