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