-/*!
+/**
* \file
* <!--
* Copyright 2003, 2004, 2005 Develer S.r.l. (http://www.develer.com/)
/*#*
*#* $Log$
+ *#* Revision 1.20 2006/07/19 12:56:25 bernie
+ *#* Convert to new Doxygen style.
+ *#*
+ *#* Revision 1.19 2006/03/20 17:49:50 bernie
+ *#* Make the TWI driver more generic to work with devices other than EEPROMS.
+ *#*
+ *#* Revision 1.18 2005/11/27 23:33:40 bernie
+ *#* Use appconfig.h instead of cfg/config.h.
+ *#*
*#* Revision 1.17 2005/04/11 19:10:27 bernie
*#* Include top-level headers from cfg/ subdir.
*#*
#include "eeprom.h"
#include <cfg/debug.h>
-#include <cfg/config.h> // CONFIG_EEPROM_VERIFY
+#include <appconfig.h> // CONFIG_EEPROM_VERIFY
#include <cfg/macros.h> // MIN()
#include <drv/twi.h>
#include <drv/wdt.h>
#error CONFIG_EEPROM_VERIFY must be defined to either 0 or 1
#endif
+/**
+ * EEPROM ID code
+ */
+#define EEPROM_ID 0xA0
+
+/**
+ * This macros form the correct slave address for EEPROMs
+ */
+#define EEPROM_ADDR(x) (EEPROM_ID | (((uint8_t)(x)) << 1))
+
+
+
-/*!
+/**
* Copy \c count bytes from buffer \c buf to
* eeprom at address \c addr.
*/
uint8_t blk_offs = (uint8_t)addr;
result =
- twi_start_w(blk_addr)
+ twi_start_w(EEPROM_ADDR(blk_addr))
&& twi_send(&blk_offs, sizeof blk_offs)
&& twi_send(buf, size);
uint16_t addr_be = cpu_to_be16(addr);
result =
- twi_start_w(0)
+ twi_start_w(EEPROM_ID)
&& twi_send((uint8_t *)&addr_be, sizeof addr_be)
&& twi_send(buf, size);
#if CONFIG_EEPROM_VERIFY
-/*!
+/**
* Check that the contents of an EEPROM range
* match with a provided data buffer.
*
}
-/*!
+/**
* Copy \c count bytes at address \c addr
* from eeprom to RAM to buffer \c buf.
*
uint8_t blk_offs = (uint8_t)addr;
bool res =
- twi_start_w(blk_addr)
+ twi_start_w(EEPROM_ADDR(blk_addr))
&& twi_send(&blk_offs, sizeof blk_offs)
- && twi_start_r(blk_addr)
+ && twi_start_r(EEPROM_ADDR(blk_addr))
&& twi_recv(buf, count);
#elif CONFIG_EEPROM_TYPE == EEPROM_24XX256
addr = cpu_to_be16(addr);
bool res =
- twi_start_w(0)
+ twi_start_w(EEPROM_ID)
&& twi_send((uint8_t *)&addr, sizeof(addr))
- && twi_start_r(0)
+ && twi_start_r(EEPROM_ID)
&& twi_recv(buf, count);
#else
#error Unknown device type
}
-/*!
+/**
* Write a single character \a c at address \a addr.
*/
bool eeprom_write_char(e2addr_t addr, char c)
}
-/*!
+/**
* Read a single character at address \a addr.
*
* \return the requested character or -1 in case of failure.
}
-/*!
+/**
* Erase specified part of eeprom, writing 0xFF.
*
* \param addr starting address
}
-/*!
+/**
* Initialize TWI module.
*/
void eeprom_init(void)