a simple wrapper above I2C to provider EEPROM access API
Dependents: ou_mbed_oled ou_mbed_eeprom ou_mbed_tmp102
eeprom.h@2:ce12a405cd3a, 2018-06-18 (annotated)
- 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?
User | Revision | Line number | New 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 |