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