Martyn Gilbertson / M24512
Committer:
Martyn Gilbertson
Date:
Fri Jun 07 14:50:42 2019 +0100
Revision:
1:23935352bb22
Parent:
0:11e6262c2981
Child:
2:1457e305e2b4
Added documentation to status typedef

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Martyn Gilbertson 0:11e6262c2981 1 /** ISL MBED Libraries
Martyn Gilbertson 0:11e6262c2981 2 * Copyright (C) 2019 - Invisible Systems Ltd. All Rights Reserved.
Martyn Gilbertson 0:11e6262c2981 3 *
Martyn Gilbertson 0:11e6262c2981 4 * <b> M24512.h</b>
Martyn Gilbertson 0:11e6262c2981 5 * <p> M24512 EEPROM Driver </p>
Martyn Gilbertson 0:11e6262c2981 6 * @version 1.0.0
Martyn Gilbertson 0:11e6262c2981 7 * @since 06 June 2019
Martyn Gilbertson 0:11e6262c2981 8 * @author Martyn Gilbertson
Martyn Gilbertson 0:11e6262c2981 9 * <p>
Martyn Gilbertson 0:11e6262c2981 10 * v1.0.0 - 06 June 2019
Martyn Gilbertson 0:11e6262c2981 11 * [+] Initial release
Martyn Gilbertson 0:11e6262c2981 12 * </p>
Martyn Gilbertson 0:11e6262c2981 13 */
Martyn Gilbertson 0:11e6262c2981 14 #ifndef _M24512_H_
Martyn Gilbertson 0:11e6262c2981 15 #define _M24512_H_
Martyn Gilbertson 0:11e6262c2981 16
Martyn Gilbertson 0:11e6262c2981 17 #include "mbed.h"
Martyn Gilbertson 0:11e6262c2981 18
Martyn Gilbertson 0:11e6262c2981 19
Martyn Gilbertson 0:11e6262c2981 20 /** Driver for reading and writing to M24512 eeprom
Martyn Gilbertson 0:11e6262c2981 21 *
Martyn Gilbertson 0:11e6262c2981 22 * Example:
Martyn Gilbertson 0:11e6262c2981 23 * @code
Martyn Gilbertson 0:11e6262c2981 24 * // Write "test" to page 0 and read back
Martyn Gilbertson 0:11e6262c2981 25 * #include "M24512.h"
Martyn Gilbertson 0:11e6262c2981 26 *
Martyn Gilbertson 0:11e6262c2981 27 * M24512 eeprom(I2C_SDA, I2C_SCL);
Martyn Gilbertson 0:11e6262c2981 28 *
Martyn Gilbertson 0:11e6262c2981 29 * int main() {
Martyn Gilbertson 0:11e6262c2981 30 * M24512::status_t ret;
Martyn Gilbertson 0:11e6262c2981 31 * char data[32] = {'t','e','s','t'};
Martyn Gilbertson 0:11e6262c2981 32 *
Martyn Gilbertson 0:11e6262c2981 33 * ret = eeprom.write(0, (char*)data, 4);
Martyn Gilbertson 0:11e6262c2981 34 * if ( ret != M24512::M24512_SUCCESS )
Martyn Gilbertson 0:11e6262c2981 35 * {
Martyn Gilbertson 0:11e6262c2981 36 * printf("Error writing this! %2.2X\n", ret );
Martyn Gilbertson 0:11e6262c2981 37 * }
Martyn Gilbertson 0:11e6262c2981 38 *
Martyn Gilbertson 0:11e6262c2981 39 * memset( data, 0, sizeof(data) );
Martyn Gilbertson 0:11e6262c2981 40 * ret = eeprom.read(0, (char*)&data, 4);
Martyn Gilbertson 0:11e6262c2981 41 * if ( ret != M24512::M24512_SUCCESS )
Martyn Gilbertson 0:11e6262c2981 42 * {
Martyn Gilbertson 0:11e6262c2981 43 * printf("Error reading %2.2X!\n", ret );
Martyn Gilbertson 0:11e6262c2981 44 * }
Martyn Gilbertson 0:11e6262c2981 45 * printf("Read: %s\n", data );
Martyn Gilbertson 0:11e6262c2981 46 * return 0;
Martyn Gilbertson 0:11e6262c2981 47 * }
Martyn Gilbertson 0:11e6262c2981 48 * @endcode
Martyn Gilbertson 0:11e6262c2981 49 */
Martyn Gilbertson 0:11e6262c2981 50 class M24512 : private NonCopyable<M24512>
Martyn Gilbertson 0:11e6262c2981 51 {
Martyn Gilbertson 0:11e6262c2981 52
Martyn Gilbertson 0:11e6262c2981 53 public:
Martyn Gilbertson 0:11e6262c2981 54
Martyn Gilbertson 0:11e6262c2981 55 /** MBED uses 8 bit addressing so shift to 7bit
Martyn Gilbertson 0:11e6262c2981 56 * Default value 0x50 is with address pins hi-z
Martyn Gilbertson 0:11e6262c2981 57 */
Martyn Gilbertson 0:11e6262c2981 58 #define M24512_DEFAULT_ADDRESS (uint8_t)(0x50 << 1)
Martyn Gilbertson 0:11e6262c2981 59
Martyn Gilbertson 0:11e6262c2981 60
Martyn Gilbertson 0:11e6262c2981 61 /** Return values for each function
Martyn Gilbertson 0:11e6262c2981 62 */
Martyn Gilbertson 0:11e6262c2981 63 typedef enum {
Martyn Gilbertson 1:23935352bb22 64 /*! Succes */
Martyn Gilbertson 0:11e6262c2981 65 M24512_SUCCESS = 0,
Martyn Gilbertson 1:23935352bb22 66 /*! I2C Ack error */
Martyn Gilbertson 0:11e6262c2981 67 M24512_I2C_ERROR = 1,
Martyn Gilbertson 1:23935352bb22 68 /*! Device Ready timed out */
Martyn Gilbertson 0:11e6262c2981 69 M24512_RDY_TIMEOUT = 2,
Martyn Gilbertson 1:23935352bb22 70 /*! Memory overflow */
Martyn Gilbertson 0:11e6262c2981 71 M24512_MEM_OVERFLOW = 3
Martyn Gilbertson 0:11e6262c2981 72 } status_t;
Martyn Gilbertson 0:11e6262c2981 73
Martyn Gilbertson 0:11e6262c2981 74
Martyn Gilbertson 0:11e6262c2981 75 /** Initialise M24512 Interface
Martyn Gilbertson 0:11e6262c2981 76 *
Martyn Gilbertson 0:11e6262c2981 77 * @param sda - I2C Data pin
Martyn Gilbertson 0:11e6262c2981 78 * @param scl - I2C Clock pin
Martyn Gilbertson 0:11e6262c2981 79 * @param addr - Hardware address of device (defaults to 0x50)
Martyn Gilbertson 0:11e6262c2981 80 */
Martyn Gilbertson 0:11e6262c2981 81 M24512(PinName sda, PinName scl, uint8_t address = M24512_DEFAULT_ADDRESS);
Martyn Gilbertson 0:11e6262c2981 82
Martyn Gilbertson 0:11e6262c2981 83
Martyn Gilbertson 0:11e6262c2981 84 /** Destructor
Martyn Gilbertson 0:11e6262c2981 85 */
Martyn Gilbertson 0:11e6262c2981 86 ~M24512(void);
Martyn Gilbertson 0:11e6262c2981 87
Martyn Gilbertson 0:11e6262c2981 88
Martyn Gilbertson 0:11e6262c2981 89 /** Read continuous from address
Martyn Gilbertson 0:11e6262c2981 90 *
Martyn Gilbertson 0:11e6262c2981 91 * @param addr - address to start reading from
Martyn Gilbertson 0:11e6262c2981 92 * @param data - pointer to data buffer (must be allocated)
Martyn Gilbertson 0:11e6262c2981 93 * @param size - size of data to read back into data pointer
Martyn Gilbertson 0:11e6262c2981 94 */
Martyn Gilbertson 0:11e6262c2981 95 status_t read(uint16_t addr, char* data, uint16_t size);
Martyn Gilbertson 0:11e6262c2981 96
Martyn Gilbertson 0:11e6262c2981 97
Martyn Gilbertson 0:11e6262c2981 98 /** Write continuous to address
Martyn Gilbertson 0:11e6262c2981 99 *
Martyn Gilbertson 0:11e6262c2981 100 * @param addr - address to start writing at
Martyn Gilbertson 0:11e6262c2981 101 * @param data - pointer to data buffer must be allocated
Martyn Gilbertson 0:11e6262c2981 102 * @param size - size of data to write
Martyn Gilbertson 0:11e6262c2981 103 */
Martyn Gilbertson 0:11e6262c2981 104 status_t write(uint16_t addr, const char* data, uint16_t size);
Martyn Gilbertson 0:11e6262c2981 105
Martyn Gilbertson 0:11e6262c2981 106 /** Set the i2c frequency
Martyn Gilbertson 0:11e6262c2981 107 *
Martyn Gilbertson 0:11e6262c2981 108 * @param hz - frequency in hertz
Martyn Gilbertson 0:11e6262c2981 109 */
Martyn Gilbertson 0:11e6262c2981 110 void frequency(uint32_t hz);
Martyn Gilbertson 0:11e6262c2981 111
Martyn Gilbertson 0:11e6262c2981 112
Martyn Gilbertson 0:11e6262c2981 113 /** Get page size
Martyn Gilbertson 0:11e6262c2981 114 */
Martyn Gilbertson 0:11e6262c2981 115 uint16_t get_page_size() const;
Martyn Gilbertson 0:11e6262c2981 116
Martyn Gilbertson 0:11e6262c2981 117
Martyn Gilbertson 0:11e6262c2981 118 /** Get page count
Martyn Gilbertson 0:11e6262c2981 119 */
Martyn Gilbertson 0:11e6262c2981 120 uint16_t get_page_count() const;
Martyn Gilbertson 0:11e6262c2981 121
Martyn Gilbertson 0:11e6262c2981 122
Martyn Gilbertson 0:11e6262c2981 123 /** Get memory size in KiB
Martyn Gilbertson 0:11e6262c2981 124 */
Martyn Gilbertson 0:11e6262c2981 125 uint32_t get_total_memory() const;
Martyn Gilbertson 0:11e6262c2981 126
Martyn Gilbertson 0:11e6262c2981 127 private:
Martyn Gilbertson 0:11e6262c2981 128
Martyn Gilbertson 0:11e6262c2981 129 /*! i2c driver class */
Martyn Gilbertson 0:11e6262c2981 130 I2C _i2c;
Martyn Gilbertson 0:11e6262c2981 131
Martyn Gilbertson 0:11e6262c2981 132 /*! memory address */
Martyn Gilbertson 0:11e6262c2981 133 uint8_t _addr;
Martyn Gilbertson 0:11e6262c2981 134
Martyn Gilbertson 0:11e6262c2981 135
Martyn Gilbertson 0:11e6262c2981 136 protected:
Martyn Gilbertson 0:11e6262c2981 137
Martyn Gilbertson 0:11e6262c2981 138 /** Write to single page
Martyn Gilbertson 0:11e6262c2981 139 * @note this will only write a maximum of %page_size%
Martyn Gilbertson 0:11e6262c2981 140 *
Martyn Gilbertson 0:11e6262c2981 141 * @param addr - address to start writing at
Martyn Gilbertson 0:11e6262c2981 142 * @param data - pointer to data buffer must be allocated
Martyn Gilbertson 0:11e6262c2981 143 * @param size - size of data to write maximum %page_size%
Martyn Gilbertson 0:11e6262c2981 144 */
Martyn Gilbertson 0:11e6262c2981 145 status_t write_page(uint16_t addr, const char* data, uint16_t size);
Martyn Gilbertson 0:11e6262c2981 146
Martyn Gilbertson 0:11e6262c2981 147 /** Check status of Memory chip after writing data
Martyn Gilbertson 0:11e6262c2981 148 *
Martyn Gilbertson 0:11e6262c2981 149 * @returns - @see status_t enum typedef
Martyn Gilbertson 0:11e6262c2981 150 */
Martyn Gilbertson 0:11e6262c2981 151 status_t ready(void);
Martyn Gilbertson 0:11e6262c2981 152 };
Martyn Gilbertson 0:11e6262c2981 153
Martyn Gilbertson 0:11e6262c2981 154 #endif /* _M24512_H_ */
Martyn Gilbertson 0:11e6262c2981 155