69 const size_t size = 32,
70 const uint16_t page_max = 32) :
71 TWI::
Device(twi, 0x50 | (subaddr & 0x07)),
73 PAGE_MASK(page_max - 1),
85 int res =
write(NULL);
98 int read(
void* dest, uint16_t src,
size_t count)
100 uint8_t retry = RETRY_MAX;
101 src = __builtin_bswap16(src);
104 int res =
write(&src,
sizeof(src));
105 if (res ==
sizeof(src)) {
106 res =
read(dest, count);
108 if (res == (
int) count)
return (res);
111 delay(RETRY_DELAY_MS);
124 int write(uint16_t dest,
const void* src,
size_t count)
126 uint8_t* p = (uint8_t*) src;
128 size_t n = PAGE_MAX - (dest &
PAGE_MASK);
131 uint8_t retry = RETRY_MAX;
132 uint16_t addr = __builtin_bswap16(dest);
144 delay(RETRY_DELAY_MS);
146 if (res < 0)
return (-1);
148 if (s == 0)
return (count);
160 static const uint8_t RETRY_MAX = 20;
163 static const uint8_t RETRY_DELAY_MS = 1;
237 AT24CXX(twi, subaddr, 512, 128)
AT24C32(TWI &twi, uint8_t subaddr=0)
void iovec_arg(iovec_t *&vp, const void *buf, size_t size)
AT24CXX(TWI &twi, uint8_t subaddr=0, const size_t size=32, const uint16_t page_max=32)
AT24C128(TWI &twi, uint8_t subaddr=0)
AT24C512(TWI &twi, uint8_t subaddr=0)
void iovec_end(iovec_t *&vp)
int read(void *dest, uint16_t src, size_t count)
int write(uint16_t dest, const void *src, size_t count)
AT24C256(TWI &twi, uint8_t subaddr=0)
int write(const void *buf, size_t count)
Device(TWI &twi, uint8_t addr)
Software::TWI< BOARD::D6, BOARD::D7 > twi
int read(void *buf, size_t count)
AT24C64(TWI &twi, uint8_t subaddr=0)