*
* \brief Driver for the 24xx16 and 24xx256 I2C EEPROMS (implementation)
*
- *
- * \version $Id$
* \author Stefano Fedrigo <aleph@develer.com>
* \author Bernie Innocenti <bernie@codewiz.org>
*/
#include <cfg/module.h> // MOD_CHECK()
#include <cpu/attr.h>
-#include CPU_HEADER(twi)
+#include <drv/i2c.h>
#include <drv/wdt.h>
*/
static const EepromInfo mem_info[] =
{
+ {
+ /* 24XX08 */
+ .has_dev_addr = false,
+ .blk_size = 0x10,
+ .e2_size = 0x400,
+ },
{
/* 24XX16 */
.has_dev_addr = false,
*/
static size_t eeprom_writeRaw(struct KFile *_fd, const void *buf, size_t size)
{
- Eeprom *fd = EEPROM(_fd);
+ Eeprom *fd = EEPROM_CAST(_fd);
e2dev_addr_t dev_addr;
uint8_t addr_buf[2];
uint8_t addr_len;
}
- if (!(twi_start_w(EEPROM_ADDR(dev_addr))
- && twi_send(addr_buf, addr_len)
- && twi_send(buf, count)))
+ if (!(i2c_start_w(EEPROM_ADDR(dev_addr))
+ && i2c_send(addr_buf, addr_len)
+ && i2c_send(buf, count)))
{
- twi_stop();
+ i2c_stop();
return wr_len;
}
- twi_stop();
+ i2c_stop();
/* Update count and addr for next operation */
size -= count;
*/
static size_t eeprom_writeVerify(struct KFile *_fd, const void *_buf, size_t size)
{
- Eeprom *fd = EEPROM(_fd);
+ Eeprom *fd = EEPROM_CAST(_fd);
int retries = 5;
- size_t wr_len;
+ size_t wr_len = 0;
while (retries--)
{
*/
static size_t eeprom_read(struct KFile *_fd, void *_buf, size_t size)
{
- Eeprom *fd = EEPROM(_fd);
+ Eeprom *fd = EEPROM_CAST(_fd);
uint8_t addr_buf[2];
uint8_t addr_len;
size_t rd_len = 0;
}
- if (!(twi_start_w(EEPROM_ADDR(dev_addr))
- && twi_send(addr_buf, addr_len)
- && twi_start_r(EEPROM_ADDR(dev_addr))))
+ if (!(i2c_start_w(EEPROM_ADDR(dev_addr))
+ && i2c_send(addr_buf, addr_len)
+ && i2c_start_r(EEPROM_ADDR(dev_addr))))
{
- twi_stop();
+ i2c_stop();
return 0;
}
while (size--)
{
/*
- * The last byte read does not has an ACK
+ * The last byte read does not have an ACK
* to stop communication.
*/
- int c = twi_get(size);
+ int c = i2c_get(size);
if (c == EOF)
break;
rd_len++;
}
+ i2c_stop();
return rd_len;
}
*/
void eeprom_init(Eeprom *fd, EepromType type, e2dev_addr_t addr, bool verify)
{
- MOD_CHECK(twi);
+ MOD_CHECK(i2c);
ASSERT(type < EEPROM_CNT);
memset(fd, 0, sizeof(*fd));