I2C EEProm library

Fork of eeprom by FRA221_2015

Committer:
JojoS
Date:
Mon Dec 21 17:31:49 2015 +0000
Revision:
4:0f09fbac7613
Parent:
3:df82ebf4be54
write(address, data, length) fiailed when writing full flash size. There was address command too much, fixed by checking remaining bytes == 0.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bborredon 0:80245aff63ce 1 #ifndef __EEPROM__H_
bborredon 0:80245aff63ce 2 #define __EEPROM__H_
bborredon 0:80245aff63ce 3
bborredon 0:80245aff63ce 4 // Includes
sweilz 3:df82ebf4be54 5 #include <string>
bborredon 0:80245aff63ce 6 #include "mbed.h"
bborredon 0:80245aff63ce 7
bborredon 0:80245aff63ce 8 // Defines
sweilz 3:df82ebf4be54 9 #define EEPROM_Address 0xA0
bborredon 0:80245aff63ce 10
bborredon 0:80245aff63ce 11 #define EEPROM_NoError 0x00
bborredon 0:80245aff63ce 12 #define EEPROM_BadAddress 0x01
bborredon 0:80245aff63ce 13 #define EEPROM_I2cError 0x02
bborredon 0:80245aff63ce 14 #define EEPROM_ParamError 0x03
bborredon 0:80245aff63ce 15 #define EEPROM_OutOfRange 0x04
bborredon 0:80245aff63ce 16 #define EEPROM_MallocError 0x05
bborredon 0:80245aff63ce 17
bborredon 0:80245aff63ce 18 #define EEPROM_MaxError 6
bborredon 0:80245aff63ce 19
sweilz 3:df82ebf4be54 20 static std::string _ErrorMessageEEPROM[EEPROM_MaxError] = { "",
bborredon 0:80245aff63ce 21 "Bad chip address",
bborredon 0:80245aff63ce 22 "I2C error (nack)",
bborredon 0:80245aff63ce 23 "Invalid parameter",
bborredon 0:80245aff63ce 24 "Data address out of range",
sweilz 3:df82ebf4be54 25 "Memory allocation error"};
bborredon 0:80245aff63ce 26
bborredon 0:80245aff63ce 27 // Class
sweilz 3:df82ebf4be54 28 class EEPROM
sweilz 3:df82ebf4be54 29 {
bborredon 0:80245aff63ce 30 public:
bborredon 0:80245aff63ce 31 enum TypeEeprom {T24C01=128,T24C02=256,T24C04=512,T24C08=1024,T24C16=2048,
bborredon 0:80245aff63ce 32 T24C32=4096,T24C64=8192,T24C128=16384,T24C256=32768,
sweilz 3:df82ebf4be54 33 T24C512=65536,T24C1024=131072,T24C1025=131073
sweilz 3:df82ebf4be54 34 } Type;
sweilz 3:df82ebf4be54 35
bborredon 0:80245aff63ce 36 /*
bborredon 0:80245aff63ce 37 * Constructor, initialize the eeprom on i2c interface.
bborredon 0:80245aff63ce 38 * @param sda : sda i2c pin (PinName)
bborredon 0:80245aff63ce 39 * @param scl : scl i2c pin (PinName)
bborredon 0:80245aff63ce 40 * @param address : eeprom address, according to eeprom type (uint8_t)
sweilz 3:df82ebf4be54 41 * @param type : eeprom type (TypeEeprom)
bborredon 0:80245aff63ce 42 * @return none
bborredon 0:80245aff63ce 43 */
soulx 2:c648c5e93d5e 44 EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type=T24C64);
sweilz 3:df82ebf4be54 45
bborredon 0:80245aff63ce 46 /*
bborredon 0:80245aff63ce 47 * Random read byte
bborredon 0:80245aff63ce 48 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 49 * @param data : byte to read (int8_t&)
bborredon 0:80245aff63ce 50 * @return none
bborredon 0:80245aff63ce 51 */
bborredon 0:80245aff63ce 52 void read(uint16_t address, int8_t& data);
sweilz 3:df82ebf4be54 53
bborredon 0:80245aff63ce 54 /*
bborredon 0:80245aff63ce 55 * Random read short
bborredon 0:80245aff63ce 56 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 57 * @param data : short to read (int16_t&)
bborredon 0:80245aff63ce 58 * @return none
bborredon 0:80245aff63ce 59 */
bborredon 0:80245aff63ce 60 void read(uint16_t address, int16_t& data);
sweilz 3:df82ebf4be54 61
bborredon 0:80245aff63ce 62 /*
bborredon 0:80245aff63ce 63 * Random read long
bborredon 0:80245aff63ce 64 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 65 * @param data : long to read (int32_t&)
bborredon 0:80245aff63ce 66 * @return none
bborredon 0:80245aff63ce 67 */
bborredon 0:80245aff63ce 68 void read(uint16_t address, int32_t& data);
sweilz 3:df82ebf4be54 69
bborredon 0:80245aff63ce 70 /*
bborredon 0:80245aff63ce 71 * Random read float
bborredon 0:80245aff63ce 72 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 73 * @param data : float to read (float&)
bborredon 0:80245aff63ce 74 * @return none
bborredon 0:80245aff63ce 75 */
bborredon 0:80245aff63ce 76 void read(uint16_t address, float& data);
sweilz 3:df82ebf4be54 77
bborredon 0:80245aff63ce 78 /*
bborredon 0:80245aff63ce 79 * Random read anything
bborredon 0:80245aff63ce 80 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 81 * @param data : data to read (void *)
bborredon 0:80245aff63ce 82 * @param size : number of bytes to read (uint16_t)
bborredon 0:80245aff63ce 83 * @return none
bborredon 0:80245aff63ce 84 */
bborredon 0:80245aff63ce 85 void read(uint16_t address, void *data, uint16_t size);
sweilz 3:df82ebf4be54 86
bborredon 0:80245aff63ce 87 /*
bborredon 0:80245aff63ce 88 * Current address read byte
bborredon 0:80245aff63ce 89 * @param data : byte to read (int8_t&)
bborredon 0:80245aff63ce 90 * @return none
bborredon 0:80245aff63ce 91 */
bborredon 0:80245aff63ce 92 void read(int8_t& data);
sweilz 3:df82ebf4be54 93
bborredon 0:80245aff63ce 94 /*
bborredon 0:80245aff63ce 95 * Sequential read byte
bborredon 0:80245aff63ce 96 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 97 * @param data : bytes array to read (int8_t[]&)
bborredon 0:80245aff63ce 98 * @param size : number of bytes to read (uint16_t)
bborredon 0:80245aff63ce 99 * @return none
bborredon 0:80245aff63ce 100 */
bborredon 0:80245aff63ce 101 void read(uint16_t address, int8_t *data, uint16_t size);
sweilz 3:df82ebf4be54 102
bborredon 0:80245aff63ce 103 /*
bborredon 0:80245aff63ce 104 * Write byte
bborredon 0:80245aff63ce 105 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 106 * @param data : byte to write (int8_t)
bborredon 0:80245aff63ce 107 * @return none
bborredon 0:80245aff63ce 108 */
bborredon 0:80245aff63ce 109 void write(uint16_t address, int8_t data);
sweilz 3:df82ebf4be54 110
bborredon 0:80245aff63ce 111 /*
bborredon 0:80245aff63ce 112 * Write short
bborredon 0:80245aff63ce 113 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 114 * @param data : short to write (int16_t)
bborredon 0:80245aff63ce 115 * @return none
bborredon 0:80245aff63ce 116 */
bborredon 0:80245aff63ce 117 void write(uint16_t address, int16_t data);
sweilz 3:df82ebf4be54 118
bborredon 0:80245aff63ce 119 /*
bborredon 0:80245aff63ce 120 * Write long
bborredon 0:80245aff63ce 121 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 122 * @param data : long to write (int32_t)
bborredon 0:80245aff63ce 123 * @return none
bborredon 0:80245aff63ce 124 */
bborredon 0:80245aff63ce 125 void write(uint16_t address, int32_t data);
sweilz 3:df82ebf4be54 126
bborredon 0:80245aff63ce 127 /*
bborredon 0:80245aff63ce 128 * Write float
bborredon 0:80245aff63ce 129 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 130 * @param data : float to write (float)
bborredon 0:80245aff63ce 131 * @return error number if > 0 (uint8_t)
bborredon 0:80245aff63ce 132 */
bborredon 0:80245aff63ce 133 void write(uint16_t address, float data);
sweilz 3:df82ebf4be54 134
bborredon 0:80245aff63ce 135 /*
bborredon 0:80245aff63ce 136 * Write anything
bborredon 0:80245aff63ce 137 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 138 * @param data : data to write (void *)
bborredon 0:80245aff63ce 139 * @param size : number of bytes to read (uint16_t)
bborredon 0:80245aff63ce 140 * @return none
bborredon 0:80245aff63ce 141 */
bborredon 0:80245aff63ce 142 void write(uint16_t address, void *data, uint16_t size);
sweilz 3:df82ebf4be54 143
bborredon 0:80245aff63ce 144 /*
bborredon 0:80245aff63ce 145 * Write page
bborredon 0:80245aff63ce 146 * @param address : start address (uint16_t)
bborredon 0:80245aff63ce 147 * @param data : bytes array to write (int8_t[])
bborredon 0:80245aff63ce 148 * @param size : number of bytes to write (uint16_t)
bborredon 0:80245aff63ce 149 * @return none
bborredon 0:80245aff63ce 150 */
bborredon 0:80245aff63ce 151 void write(uint16_t address, int8_t data[], uint16_t size);
sweilz 3:df82ebf4be54 152
bborredon 0:80245aff63ce 153 /*
bborredon 0:80245aff63ce 154 * Wait eeprom ready
bborredon 0:80245aff63ce 155 * @param : none
bborredon 0:80245aff63ce 156 * @return none
bborredon 0:80245aff63ce 157 */
bborredon 0:80245aff63ce 158 void ready(void);
sweilz 3:df82ebf4be54 159
bborredon 0:80245aff63ce 160 /*
bborredon 0:80245aff63ce 161 * Get eeprom size in bytes
bborredon 0:80245aff63ce 162 * @param : none
bborredon 0:80245aff63ce 163 * @return size in bytes (uint16_t)
bborredon 0:80245aff63ce 164 */
bborredon 0:80245aff63ce 165 uint32_t getSize(void);
sweilz 3:df82ebf4be54 166
sweilz 3:df82ebf4be54 167 /*
sweilz 3:df82ebf4be54 168 * Get the current error number (EEPROM_NoError if no error)
sweilz 3:df82ebf4be54 169 * @param : none
sweilz 3:df82ebf4be54 170 * @return current error number (uint8_t)
bborredon 0:80245aff63ce 171 */
bborredon 0:80245aff63ce 172 uint8_t getError(void);
sweilz 3:df82ebf4be54 173
bborredon 0:80245aff63ce 174 /*
bborredon 0:80245aff63ce 175 * Get current error message
bborredon 0:80245aff63ce 176 * @param : none
bborredon 0:80245aff63ce 177 * @return current error message(std::string)
bborredon 0:80245aff63ce 178 */
sweilz 3:df82ebf4be54 179 std::string getErrorMessage(void) {
sweilz 3:df82ebf4be54 180 return(_ErrorMessageEEPROM[_errnum]);
bborredon 0:80245aff63ce 181 }
sweilz 3:df82ebf4be54 182
bborredon 0:80245aff63ce 183 //---------- local variables ----------
bborredon 0:80245aff63ce 184 private:
bborredon 0:80245aff63ce 185 I2C _i2c; // Local i2c communication interface instance
bborredon 0:80245aff63ce 186 int _address; // Local ds1621 i2c address
bborredon 0:80245aff63ce 187 uint8_t _errnum; // Error number
bborredon 0:80245aff63ce 188 TypeEeprom _type; // EEPROM type
bborredon 0:80245aff63ce 189 uint8_t _page_write; // Page write size
bborredon 0:80245aff63ce 190 uint8_t _page_number; // Number of page
bborredon 0:80245aff63ce 191 uint32_t _size; // Size in bytes
bborredon 0:80245aff63ce 192 bool checkAddress(uint16_t address); // Check address range
bborredon 0:80245aff63ce 193 //-------------------------------------
bborredon 0:80245aff63ce 194 };
bborredon 0:80245aff63ce 195 #endif