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