se quito el led de debug de la bibilioteca
Fork of eeprom_1 by
Diff: eeprom.cpp
- Revision:
- 3:925096a4c7f0
- Parent:
- 2:79ed7ff7c23d
--- a/eeprom.cpp Mon Nov 02 23:20:56 2015 +0000 +++ b/eeprom.cpp Mon Dec 21 23:26:42 2015 +0000 @@ -1,5 +1,10 @@ /*********************************************************** Author: Bernard Borredon +Version: 1.3 + - Correct write(uint32_t address, int8_t data[], uint32_t length) for eeprom >= T24C32. + Tested with 24C02, 24C08, 24C16, 24C64, 24C256, 24C512, 24C1025 on LPC1768 (mbed online and µVision V5.16a). + - Correct main test. + Date : 12 decembre 2013 Version: 1.2 - Update api documentation @@ -27,6 +32,16 @@ const char * const EEPROM::_name[] = {"24C01","24C02","24C04","24C08","24C16","24C32", "24C64","24C128","24C256","24C512","24C1024","24C1025"}; +/** + * EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type) : _i2c(sda, scl) + * + * Constructor, initialize the eeprom on i2c interface. + * @param sda sda i2c pin (PinName) + * @param scl scl i2c pin (PinName) + * @param address eeprom address, according to eeprom type (uint8_t) + * @param type eeprom type (TypeEeprom) + * @return none +*/ EEPROM::EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type) : _i2c(sda, scl) { @@ -117,8 +132,17 @@ // Set I2C frequency _i2c.frequency(400000); + } +/** + * void write(uint32_t address, int8_t data) + * + * Write byte + * @param address start address (uint32_t) + * @param data byte to write (int8_t) + * @return none +*/ void EEPROM::write(uint32_t address, int8_t data) { uint8_t page; @@ -126,7 +150,7 @@ uint8_t cmd[3]; int len; int ack; - + // Check error if(_errnum) return; @@ -166,7 +190,7 @@ // Data cmd[2] = (uint8_t) data; } - + ack = _i2c.write((int)addr,(char *)cmd,len); if(ack != 0) { _errnum = EEPROM_I2cError; @@ -178,6 +202,15 @@ } +/** + * void write(uint32_t address, int8_t data[], uint32_t length) + * + * Write array of bytes (use the page mode) + * @param address start address (uint32_t) + * @param data bytes array to write (int8_t[]) + * @param size number of bytes to write (uint32_t) + * @return none +*/ void EEPROM::write(uint32_t address, int8_t data[], uint32_t length) { uint8_t page; @@ -187,7 +220,7 @@ uint8_t i,j,ind; uint8_t cmd[129]; int ack; - + // Check error if(_errnum) return; @@ -209,7 +242,7 @@ // Compute remaining bytes remain = length - blocs * _page_write; - + for(i = 0;i < blocs;i++) { // Compute page number page = 0; @@ -323,7 +356,7 @@ } } - if(remain) { + if(remain) { // Compute page number page = 0; if(_type < T24C32) @@ -402,37 +435,45 @@ // Wait end of write ready(); } - } + } } - } - else { - // Fist word address (MSB) - cmd[0] = (uint8_t) (address >> 8); + else { + // Fist word address (MSB) + cmd[0] = (uint8_t) (address >> 8); - // Second word address (LSB) - cmd[1] = (uint8_t) address; + // Second word address (LSB) + cmd[1] = (uint8_t) address; - // Add data for the current page - for(j = 0;j < remain;j++) - cmd[j + 2] = (uint8_t) data[blocs * _page_write + j]; - - // Write data for the current page - ack = _i2c.write((int)addr,(char *)cmd,remain + 2); - if(ack != 0) { - _errnum = EEPROM_I2cError; - return; - } + // Add data for the current page + for(j = 0;j < remain;j++) + cmd[j + 2] = (uint8_t) data[blocs * _page_write + j]; + + // Write data for the current page + ack = _i2c.write((int)addr,(char *)cmd,remain + 2); + if(ack != 0) { + _errnum = EEPROM_I2cError; + return; + } - // Wait end of write - ready(); + // Wait end of write + ready(); + } } } +/** + * void write(uint32_t address, int16_t data) + * + * Write short + * @param address start address (uint32_t) + * @param data short to write (int16_t) + * @return none +*/ void EEPROM::write(uint32_t address, int16_t data) { int8_t cmd[2]; - + // Check error if(_errnum) return; @@ -449,10 +490,18 @@ } +/** + * void write(uint32_t address, int32_t data) + * + * Write long + * @param address start address (uint32_t) + * @param data long to write (int32_t) + * @return none +*/ void EEPROM::write(uint32_t address, int32_t data) { int8_t cmd[4]; - + // Check error if(_errnum) return; @@ -469,10 +518,18 @@ } +/** + * void write(uint32_t address, float data) + * + * Write float + * @param address start address (uint32_t) + * @param data float to write (float) + * @return none +*/ void EEPROM::write(uint32_t address, float data) { int8_t cmd[4]; - + // Check error if(_errnum) return; @@ -489,10 +546,19 @@ } +/** + * void write(uint32_t address, void *data, uint32_t size) + * + * Write anything (use the page write mode) + * @param address start address (uint32_t) + * @param data data to write (void *) + * @param size number of bytes to write (uint32_t) + * @return none +*/ void EEPROM::write(uint32_t address, void *data, uint32_t size) { int8_t *cmd = NULL; - + // Check error if(_errnum) return; @@ -517,6 +583,14 @@ } +/** + * void read(uint32_t address, int8_t& data) + * + * Random read byte + * @param address start address (uint32_t) + * @param data byte to read (int8_t&) + * @return none +*/ void EEPROM::read(uint32_t address, int8_t& data) { uint8_t page; @@ -524,7 +598,7 @@ uint8_t cmd[2]; uint8_t len; int ack; - + // Check error if(_errnum) return; @@ -534,7 +608,7 @@ _errnum = EEPROM_OutOfRange; return; } - + // Compute page number page = 0; if(_type < T24C32) @@ -575,6 +649,15 @@ } +/** + * void read(uint32_t address, int8_t *data, uint32_t size) + * + * Sequential read byte + * @param address start address (uint32_t) + * @param data bytes array to read (int8_t[]&) + * @param size number of bytes to read (uint32_t) + * @return none +*/ void EEPROM::read(uint32_t address, int8_t *data, uint32_t size) { uint8_t page; @@ -582,7 +665,7 @@ uint8_t cmd[2]; uint8_t len; int ack; - + // Check error if(_errnum) return; @@ -639,11 +722,18 @@ } +/** + * void read(int8_t& data) + * + * Current address read byte + * @param data byte to read (int8_t&) + * @return none + */ void EEPROM::read(int8_t& data) { uint8_t addr; int ack; - + // Check error if(_errnum) return; @@ -660,10 +750,18 @@ } +/** + * void read(uint32_t address, int16_t& data) + * + * Random read short + * @param address start address (uint32_t) + * @param data short to read (int16_t&) + * @return none +*/ void EEPROM::read(uint32_t address, int16_t& data) { int8_t cmd[2]; - + // Check error if(_errnum) return; @@ -680,10 +778,18 @@ } +/** + * void read(uint32_t address, int32_t& data) + * + * Random read long + * @param address start address (uint32_t) + * @param data long to read (int32_t&) + * @return none +*/ void EEPROM::read(uint32_t address, int32_t& data) { int8_t cmd[4]; - + // Check error if(_errnum) return; @@ -700,10 +806,18 @@ } +/** + * void read(uint32_t address, float& data) + * + * Random read float + * @param address start address (uint32_t) + * @param data float to read (float&) + * @return none + */ void EEPROM::read(uint32_t address, float& data) { int8_t cmd[4]; - + // Check error if(_errnum) return; @@ -720,6 +834,15 @@ } +/** + * void read(uint32_t address, void *data, uint32_t size) + * + * Random read anything + * @param address start address (uint32_t) + * @param data data to read (void *) + * @param size number of bytes to read (uint32_t) + * @return none +*/ void EEPROM::read(uint32_t address, void *data, uint32_t size) { int8_t *cmd = NULL; @@ -749,6 +872,13 @@ } +/** + * void clear(void) + * + * Clear eeprom (write with 0) + * @param none + * @return none + */ void EEPROM::clear(void) { int32_t data; @@ -761,6 +891,13 @@ } } +/** + * void ready(void) + * + * Wait eeprom ready + * @param none + * @return none +*/ void EEPROM::ready(void) { int ack; @@ -784,11 +921,25 @@ } +/** + * uint32_t getSize(void) + * + * Get eeprom size in bytes + * @param none + * @return size in bytes (uint32_t) +*/ uint32_t EEPROM::getSize(void) { return(_size); } +/** + * const char* getName(void) + * + * Get eeprom name + * @param none + * @return name (const char*) + */ const char* EEPROM::getName(void) { uint8_t i = 0; @@ -835,11 +986,25 @@ return(_name[i]); } +/** + * uint8_t getError(void) + * + * Get the current error number (EEPROM_NoError if no error) + * @param none + * @return none +*/ uint8_t EEPROM::getError(void) { return(_errnum); } +/** + * bool checkAddress(uint32_t address) + * + * Check if address is in the eeprom range address + * @param address address to check (uint32_t) + * @return true if in eeprom range, overwise false (bool) +*/ bool EEPROM::checkAddress(uint32_t address) { bool ret = true;