a simple wrapper above I2C to provider EEPROM access API

Dependents:   ou_mbed_oled ou_mbed_eeprom ou_mbed_tmp102

Committer:
poushen
Date:
Fri Jun 15 13:02:30 2018 +0000
Revision:
0:3de36cc169a3
Child:
1:0c876c06b026
add eeprom class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
poushen 0:3de36cc169a3 1
poushen 0:3de36cc169a3 2
poushen 0:3de36cc169a3 3
poushen 0:3de36cc169a3 4
poushen 0:3de36cc169a3 5 #include "mbed.h"
poushen 0:3de36cc169a3 6
poushen 0:3de36cc169a3 7 #define EEPROM_ADDR 0xA0
poushen 0:3de36cc169a3 8
poushen 0:3de36cc169a3 9 enum {
poushen 0:3de36cc169a3 10 ONE_BYTE_ADDRESS = 1,
poushen 0:3de36cc169a3 11 TWO_BYTES_ADDRESS,
poushen 0:3de36cc169a3 12 THREE_BYTES_ADDRESS
poushen 0:3de36cc169a3 13 };
poushen 0:3de36cc169a3 14
poushen 0:3de36cc169a3 15 class eeprom
poushen 0:3de36cc169a3 16 {
poushen 0:3de36cc169a3 17 public:
poushen 0:3de36cc169a3 18 /** Create a eeprom instance connected to specified I2C pins with specified address
poushen 0:3de36cc169a3 19 *
poushen 0:3de36cc169a3 20 * @param i2c_obj I2C object (instance)
poushen 0:3de36cc169a3 21 * @param address (option) I2C-bus slave address (default: 0xA0)
poushen 0:3de36cc169a3 22 */
poushen 0:3de36cc169a3 23 eeprom(I2C &i2c_obj, char address = EEPROM_ADDR);
poushen 0:3de36cc169a3 24
poushen 0:3de36cc169a3 25 /** Initialization */
poushen 0:3de36cc169a3 26 void init(void);
poushen 0:3de36cc169a3 27
poushen 0:3de36cc169a3 28 /** Write address
poushen 0:3de36cc169a3 29 *
poushen 0:3de36cc169a3 30 * @param address eeprom memory address
poushen 0:3de36cc169a3 31 * @param address_size should be 1 - 3
poushen 0:3de36cc169a3 32 */
poushen 0:3de36cc169a3 33 void write_address(int address, int address_size, bool repeated=false);
poushen 0:3de36cc169a3 34
poushen 0:3de36cc169a3 35 /** Current read
poushen 0:3de36cc169a3 36 *
poushen 0:3de36cc169a3 37 * @param data the current memory data
poushen 0:3de36cc169a3 38 */
poushen 0:3de36cc169a3 39 void current_read(uint8_t *data);
poushen 0:3de36cc169a3 40
poushen 0:3de36cc169a3 41 /** Sequential read
poushen 0:3de36cc169a3 42 *
poushen 0:3de36cc169a3 43 * @param buffer the start address point to buffer
poushen 0:3de36cc169a3 44 * @param buffer_size the length of buffer
poushen 0:3de36cc169a3 45 */
poushen 0:3de36cc169a3 46 void sequential_read(uint8_t *buffer, int buffer_size);
poushen 0:3de36cc169a3 47
poushen 0:3de36cc169a3 48 /** Random read
poushen 0:3de36cc169a3 49 *
poushen 0:3de36cc169a3 50 * @param address eeprom memory address
poushen 0:3de36cc169a3 51 * @param address_size should be 1 - 3
poushen 0:3de36cc169a3 52 * @param buffer the start address point to buffer
poushen 0:3de36cc169a3 53 * @param buffer_size the length of buffer
poushen 0:3de36cc169a3 54 */
poushen 0:3de36cc169a3 55 void random_read(int address, int address_size, uint8_t *buffer, int buffer_size);
poushen 0:3de36cc169a3 56
poushen 0:3de36cc169a3 57 /** byte write
poushen 0:3de36cc169a3 58 *
poushen 0:3de36cc169a3 59 * @param address eeprom memory address
poushen 0:3de36cc169a3 60 * @param address_size should be 1 - 3
poushen 0:3de36cc169a3 61 * @param data the byte data to write
poushen 0:3de36cc169a3 62 */
poushen 0:3de36cc169a3 63 void byte_write(int address, int address_size, uint8_t data, bool repeated=false);
poushen 0:3de36cc169a3 64
poushen 0:3de36cc169a3 65 /** page write
poushen 0:3de36cc169a3 66 *
poushen 0:3de36cc169a3 67 * @param address eeprom memory address
poushen 0:3de36cc169a3 68 * @param address_size should be 1 - 3
poushen 0:3de36cc169a3 69 * @param buffer the page data to write
poushen 0:3de36cc169a3 70 */
poushen 0:3de36cc169a3 71 void page_write(int address, int address_size, uint8_t *buffer, int buffer_size, bool repeated=false);
poushen 0:3de36cc169a3 72
poushen 0:3de36cc169a3 73 /** ack polling */
poushen 0:3de36cc169a3 74 void ack_polling(void);
poushen 0:3de36cc169a3 75
poushen 0:3de36cc169a3 76 private:
poushen 0:3de36cc169a3 77 I2C &i2c;
poushen 0:3de36cc169a3 78 char adr;
poushen 0:3de36cc169a3 79 };