a simple wrapper above I2C to provider EEPROM access API

Dependents:   ou_mbed_oled ou_mbed_eeprom ou_mbed_tmp102

Committer:
poushen
Date:
Mon Jun 18 22:53:01 2018 +0000
Revision:
2:ce12a405cd3a
Parent:
1:0c876c06b026
Child:
3:8ddab67b62c3
add #ifdef to avoid re include

Who changed what in which revision?

UserRevisionLine numberNew contents of line
poushen 1:0c876c06b026 1 /** A class for eeprom accesss operation
poushen 1:0c876c06b026 2 *
poushen 1:0c876c06b026 3 * @author Poushen Ou
poushen 1:0c876c06b026 4 * @version 1.0
poushen 1:0c876c06b026 5 * @date 15-Jun-2018
poushen 1:0c876c06b026 6 *
poushen 1:0c876c06b026 7 * This code provide classic access operation for I2C EEPROM
poushen 1:0c876c06b026 8 *
poushen 1:0c876c06b026 9 * About I2C EEPROM 24FC256:
poushen 1:0c876c06b026 10 * http://ww1.microchip.com/downloads/en/DeviceDoc/21203M.pdf
poushen 1:0c876c06b026 11 */
poushen 2:ce12a405cd3a 12 #ifndef _EEPROM_H_
poushen 2:ce12a405cd3a 13 #define _EEPROM_H_
poushen 0:3de36cc169a3 14
poushen 0:3de36cc169a3 15 #include "mbed.h"
poushen 0:3de36cc169a3 16
poushen 0:3de36cc169a3 17 #define EEPROM_ADDR 0xA0
poushen 0:3de36cc169a3 18
poushen 1:0c876c06b026 19 /** eeprom Class Library
poushen 1:0c876c06b026 20 * to provide very simple interface for mbed
poushen 1:0c876c06b026 21 *
poushen 1:0c876c06b026 22 * Example:
poushen 1:0c876c06b026 23 * @code
poushen 1:0c876c06b026 24 * #include "mbed.h"
poushen 1:0c876c06b026 25 * #include "eeprom.h"
poushen 1:0c876c06b026 26 *
poushen 1:0c876c06b026 27 * // make eeprom instance using I2C object.
poushen 1:0c876c06b026 28 * // with default slave address 0xA0 (0x50 in 7bit format)
poushen 1:0c876c06b026 29 * // test ok with 24FC256 EEPROM
poushen 1:0c876c06b026 30 * I2C i2c(dp5,dp27);
poushen 1:0c876c06b026 31 * eeprom epm(i2c);
poushen 1:0c876c06b026 32 *
poushen 1:0c876c06b026 33 * int main()
poushen 1:0c876c06b026 34 * {
poushen 1:0c876c06b026 35 * epm.write_address(12288, TWO_BYTES_ADDRESS);
poushen 1:0c876c06b026 36 *
poushen 1:0c876c06b026 37 * for (int i=0; i< 64; i++) {
poushen 1:0c876c06b026 38 * printf("%.2x ", epm.current_read());
poushen 1:0c876c06b026 39 * }
poushen 1:0c876c06b026 40 * printf("\n\r");
poushen 1:0c876c06b026 41 *
poushen 1:0c876c06b026 42 * while(1);
poushen 1:0c876c06b026 43 * }
poushen 1:0c876c06b026 44 * @endcode
poushen 1:0c876c06b026 45 */
poushen 0:3de36cc169a3 46 class eeprom
poushen 0:3de36cc169a3 47 {
poushen 0:3de36cc169a3 48 public:
poushen 0:3de36cc169a3 49 /** Create a eeprom instance connected to specified I2C pins with specified address
poushen 0:3de36cc169a3 50 *
poushen 0:3de36cc169a3 51 * @param i2c_obj I2C object (instance)
poushen 0:3de36cc169a3 52 * @param address (option) I2C-bus slave address (default: 0xA0)
poushen 0:3de36cc169a3 53 */
poushen 0:3de36cc169a3 54 eeprom(I2C &i2c_obj, char address = EEPROM_ADDR);
poushen 0:3de36cc169a3 55
poushen 0:3de36cc169a3 56 /** Initialization */
poushen 0:3de36cc169a3 57 void init(void);
poushen 0:3de36cc169a3 58
poushen 1:0c876c06b026 59 /** Write address with specify address size
poushen 0:3de36cc169a3 60 *
poushen 0:3de36cc169a3 61 * @param address eeprom memory address
poushen 1:0c876c06b026 62 * @param address_size should be 1 - 3(ONE_BYTE_ADDRESS, TWO_BYTES_ADDRESS, THREE_BYTES_ADDRESS)
poushen 0:3de36cc169a3 63 */
poushen 0:3de36cc169a3 64 void write_address(int address, int address_size, bool repeated=false);
poushen 0:3de36cc169a3 65
poushen 1:0c876c06b026 66 /** Current read, read the current memory data
poushen 0:3de36cc169a3 67 *
poushen 1:0c876c06b026 68 * @return the current memory data
poushen 0:3de36cc169a3 69 */
poushen 1:0c876c06b026 70 uint8_t current_read(void);
poushen 0:3de36cc169a3 71
poushen 1:0c876c06b026 72 /** Sequential read, read one or many bytes from current memory address
poushen 0:3de36cc169a3 73 *
poushen 0:3de36cc169a3 74 * @param buffer the start address point to buffer
poushen 0:3de36cc169a3 75 * @param buffer_size the length of buffer
poushen 0:3de36cc169a3 76 */
poushen 0:3de36cc169a3 77 void sequential_read(uint8_t *buffer, int buffer_size);
poushen 0:3de36cc169a3 78
poushen 1:0c876c06b026 79 /** Random read, read one or more memory data from assign memory address
poushen 0:3de36cc169a3 80 *
poushen 0:3de36cc169a3 81 * @param address eeprom memory address
poushen 1:0c876c06b026 82 * @param address_size should be 1 - 3 (ONE_BYTE_ADDRESS, TWO_BYTES_ADDRESS, THREE_BYTES_ADDRESS)
poushen 0:3de36cc169a3 83 * @param buffer the start address point to buffer
poushen 0:3de36cc169a3 84 * @param buffer_size the length of buffer
poushen 0:3de36cc169a3 85 */
poushen 0:3de36cc169a3 86 void random_read(int address, int address_size, uint8_t *buffer, int buffer_size);
poushen 0:3de36cc169a3 87
poushen 1:0c876c06b026 88 /** byte write, write one byte to assign memory address
poushen 0:3de36cc169a3 89 *
poushen 0:3de36cc169a3 90 * @param address eeprom memory address
poushen 1:0c876c06b026 91 * @param address_size should be 1 - 3(ONE_BYTE_ADDRESS, TWO_BYTES_ADDRESS, THREE_BYTES_ADDRESS)
poushen 0:3de36cc169a3 92 * @param data the byte data to write
poushen 0:3de36cc169a3 93 */
poushen 0:3de36cc169a3 94 void byte_write(int address, int address_size, uint8_t data, bool repeated=false);
poushen 0:3de36cc169a3 95
poushen 1:0c876c06b026 96 /** page write, write many bytes to assign memory address
poushen 1:0c876c06b026 97 * , do not deal with page size and aligned problem, be careful to use!!!
poushen 0:3de36cc169a3 98 *
poushen 0:3de36cc169a3 99 * @param address eeprom memory address
poushen 1:0c876c06b026 100 * @param address_size should be 1 - 3(ONE_BYTE_ADDRESS, TWO_BYTES_ADDRESS, THREE_BYTES_ADDRESS)
poushen 0:3de36cc169a3 101 * @param buffer the page data to write
poushen 0:3de36cc169a3 102 */
poushen 0:3de36cc169a3 103 void page_write(int address, int address_size, uint8_t *buffer, int buffer_size, bool repeated=false);
poushen 0:3de36cc169a3 104
poushen 1:0c876c06b026 105 /** ack polling, wait for EEPROM write completed */
poushen 0:3de36cc169a3 106 void ack_polling(void);
poushen 0:3de36cc169a3 107
poushen 0:3de36cc169a3 108 private:
poushen 0:3de36cc169a3 109 I2C &i2c;
poushen 0:3de36cc169a3 110 char adr;
poushen 1:0c876c06b026 111 };
poushen 1:0c876c06b026 112
poushen 1:0c876c06b026 113 enum {
poushen 1:0c876c06b026 114 ONE_BYTE_ADDRESS = 1,
poushen 1:0c876c06b026 115 TWO_BYTES_ADDRESS,
poushen 1:0c876c06b026 116 THREE_BYTES_ADDRESS
poushen 1:0c876c06b026 117 };
poushen 2:ce12a405cd3a 118
poushen 2:ce12a405cd3a 119 #endif