no-OS
Loading...
Searching...
No Matches
m24512.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef __M24512_H__
34#define __M24512_H__
35
36#include <stdint.h>
37#include <stdbool.h>
38#include "no_os_i2c.h"
39#include "no_os_gpio.h"
40#include "no_os_error.h"
41#include "no_os_eeprom.h"
42
43#define M24512_MEMORY_SIZE 65536U // 64KB (512Kbit)
44#define M24512_PAGE_SIZE 128U // 128 bytes per page
45#define M24512_NUM_PAGES 512U // Total number of pages
46#define M24512_MAX_ADDRESS (M24512_MEMORY_SIZE - 1)
47
48// Timing specifications (in milliseconds)
49#define M24512_WRITE_CYCLE_TIME 5U // Maximum write cycle time
50#define M24512_BYTE_WRITE_TIME 5U // Byte/page write time
51#define M24512_PAGE_WRITE_TIME 5U // Page write time
52
53// Address format
54#define M24512_ADDR_HIGH_BYTE(addr) ((uint8_t)((addr >> 8) & 0xFF))
55#define M24512_ADDR_LOW_BYTE(addr) ((uint8_t)(addr & 0xFF))
56
69
82
89int32_t m24512_init(struct no_os_eeprom_desc **desc,
90 const struct no_os_eeprom_init_param *param);
91
97int32_t m24512_remove(struct no_os_eeprom_desc *desc);
98
107int32_t m24512_read_data(struct no_os_eeprom_desc *desc, uint32_t address,
108 uint8_t *data, uint16_t len);
109
118int32_t m24512_write_data(struct no_os_eeprom_desc *desc, uint32_t address,
119 uint8_t *data, uint16_t len);
120
126bool m24512_is_ready(struct m24512_dev *dev);
127
134int m24512_wait_ready(struct m24512_dev *dev, uint32_t timeout_ms);
135
144int m24512_get_info(struct m24512_dev *dev, uint32_t *memory_size,
145 uint16_t *page_size, uint16_t *num_pages);
146
152static inline uint16_t m24512_addr_to_page(uint16_t addr)
153{
154 return addr / M24512_PAGE_SIZE;
155}
156
162static inline uint8_t m24512_addr_to_offset(uint16_t addr)
163{
164 return addr % M24512_PAGE_SIZE;
165}
166
173static inline uint16_t m24512_page_to_addr(uint16_t page, uint8_t offset)
174{
175 return (page * M24512_PAGE_SIZE) + offset;
176}
177
183static inline bool m24512_is_valid_addr(uint16_t addr)
184{
185 return addr <= M24512_MAX_ADDRESS;
186}
187
193static inline bool m24512_is_valid_page(uint16_t page)
194{
195 return page < M24512_NUM_PAGES;
196}
197
202
203#endif /* __M24512_H__ */
const struct no_os_eeprom_platform_ops eeprom_m24512_ops
M24512 EEPROM specific ops structure.
Definition m24512.c:435
#define M24512_MAX_ADDRESS
Definition m24512.h:46
int32_t m24512_remove(struct no_os_eeprom_desc *desc)
Free resources allocated by M24512 device.
Definition m24512.c:160
bool m24512_is_ready(struct m24512_dev *dev)
Check if EEPROM is ready (write cycle completed)
Definition m24512.c:280
int m24512_get_info(struct m24512_dev *dev, uint32_t *memory_size, uint16_t *page_size, uint16_t *num_pages)
Get device information.
Definition m24512.c:319
int m24512_wait_ready(struct m24512_dev *dev, uint32_t timeout_ms)
Wait for write cycle completion.
Definition m24512.c:291
int32_t m24512_write_data(struct no_os_eeprom_desc *desc, uint32_t address, uint8_t *data, uint16_t len)
Write multiple bytes to EEPROM (handles page boundaries)
Definition m24512.c:222
#define M24512_PAGE_SIZE
Definition m24512.h:44
int32_t m24512_read_data(struct no_os_eeprom_desc *desc, uint32_t address, uint8_t *data, uint16_t len)
Read multiple bytes from EEPROM.
Definition m24512.c:185
int32_t m24512_init(struct no_os_eeprom_desc **desc, const struct no_os_eeprom_init_param *param)
Initialize the M24512 EEPROM device.
Definition m24512.c:86
#define M24512_NUM_PAGES
Definition m24512.h:45
Header file for EEPROM APIs.
Error codes definition.
Header file of GPIO Interface.
Header file of I2C Interface.
M24512 device descriptor.
Definition m24512.h:74
struct no_os_gpio_desc * wc_gpio_desc
Definition m24512.h:80
uint8_t i2c_addr
Definition m24512.h:78
struct no_os_i2c_desc * i2c_desc
Definition m24512.h:76
M24512 initialization parameters.
Definition m24512.h:61
struct no_os_i2c_init_param i2c_init
Definition m24512.h:63
uint8_t i2c_addr
Definition m24512.h:65
struct no_os_gpio_init_param * wc_gpio_init
Definition m24512.h:67
Structure holding the EEPROM descriptor.
Definition no_os_eeprom.h:59
Structure holding the parameters for EEPROM initialization.
Definition no_os_eeprom.h:47
Structure holding the EEPROM function pointers that point to the platform specific function.
Definition no_os_eeprom.h:72
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding I2C address descriptor.
Definition no_os_i2c.h:89
Structure holding the parameters for I2C initialization.
Definition no_os_i2c.h:52