X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Feeprom.c;h=81b295888e195e02a1b15a59580161c90097e846;hb=b6b9bf085c6a02bca4441599d176344e0153a612;hp=85b2e20de5457d795b100cbba8893df145915bac;hpb=6f8beb702446d9cf0d4474598199357c4b8a5bd2;p=bertos.git diff --git a/drv/eeprom.c b/drv/eeprom.c index 85b2e20d..81b29588 100755 --- a/drv/eeprom.c +++ b/drv/eeprom.c @@ -5,35 +5,61 @@ * All Rights Reserved. * --> * - * \version $Id$ - * - * \author Stefano Fedrigo - * \author Bernardo Innocenti - * * \brief Driver for the 24xx16 and 24xx256 I2C EEPROMS (implementation) * * \note This implementation is AVR specific. - */ - -/* - * $Log$ - * Revision 1.3 2004/07/29 22:57:09 bernie - * Add 24LC16 support. - * - * Revision 1.2 2004/07/22 01:24:43 bernie - * Document AVR dependency. - * - * Revision 1.1 2004/07/20 17:11:18 bernie - * Import into DevLib. * + * \version $Id$ + * \author Stefano Fedrigo + * \author Bernardo Innocenti */ + +/*#* + *#* $Log$ + *#* Revision 1.10 2004/09/20 03:31:22 bernie + *#* Sanitize for C++. + *#* + *#* Revision 1.9 2004/09/14 21:03:46 bernie + *#* Use debug.h instead of kdebug.h. + *#* + *#* Revision 1.8 2004/08/25 14:12:08 rasky + *#* Aggiornato il comment block dei log RCS + *#* + *#* Revision 1.7 2004/08/24 16:48:40 bernie + *#* Note reason for including + *#* + *#* Revision 1.6 2004/08/24 14:27:20 bernie + *#* Doxygen fix. + *#* + *#* Revision 1.5 2004/08/24 13:46:48 bernie + *#* Include . + *#* + *#* Revision 1.4 2004/08/10 06:57:22 bernie + *#* eeprom_erase(): New function. + *#* + *#* Revision 1.3 2004/07/29 22:57:09 bernie + *#* Add 24LC16 support. + *#* + *#* Revision 1.2 2004/07/22 01:24:43 bernie + *#* Document AVR dependency. + *#* + *#* Revision 1.1 2004/07/20 17:11:18 bernie + *#* Import into DevLib. + *#* + *#*/ + #include "eeprom.h" + #include /* cpu_to_be16() */ -#include +#include #include +#include // MIN() + +#include // memset() #include + /* Wait for TWINT flag set: bus is ready */ #define WAIT_TWI_READY do {} while (!(TWCR & BV(TWINT))) @@ -136,8 +162,10 @@ static void twi_stop(void) * * \return true on success, false on error. */ -static bool twi_send(const uint8_t *buf, size_t count) +static bool twi_send(const void *_buf, size_t count) { + const uint8_t *buf = (const uint8_t *)_buf; + while (count--) { TWDR = *buf++; @@ -163,8 +191,10 @@ static bool twi_send(const uint8_t *buf, size_t count) * * \return true on success, false on error */ -static bool twi_recv(uint8_t *buf, size_t count) +static bool twi_recv(void *_buf, size_t count) { + uint8_t *buf = (uint8_t *)_buf; + /* * When reading the last byte the TWEA bit is not * set, and the eeprom should answer with NACK @@ -326,6 +356,28 @@ int eeprom_read_char(e2addr_t addr) } +/*! + * Erase specified part of eeprom, writing 0xFF. + * + * \param addr starting address + * \param count length of block to erase + */ +void eeprom_erase(e2addr_t addr, size_t count) +{ + uint8_t buf[EEPROM_BLKSIZE]; + memset(buf, 0xFF, sizeof buf); + + // Clear all but struct hw_info at start of eeprom + while (count) + { + size_t size = MIN(count, sizeof buf); + eeprom_write(addr, buf, size); + addr += size; + count -= size; + } +} + + /*! * Initialize TWI module. */ @@ -365,8 +417,8 @@ void eeprom_init(void) void eeprom_test(void) { - static const char magic[13] = "Humpty Dumpty"; - char buf[sizeof magic + 1]; + static const char magic[14] = "Humpty Dumpty"; + char buf[sizeof magic]; size_t i; // Write something to EEPROM using unaligned sequential writes