Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
M24512.h@1:23935352bb22, 2019-06-07 (annotated)
- 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?
| User | Revision | Line number | New 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 |