12 static U8 deviceAddress = EEPROM_ADDRESS;
17 void eepromInit (void)
21 int eepromSetAddress (U32 address)
25 if (address >= EEPROM_SIZE)
28 address %= EEPROM_SIZE;
30 if ((rwAddress = address) >= 65536)
31 deviceAddress |= 0x02;
33 deviceAddress &= ~0x02;
38 static int eepromSetAddressEx (U32 address, U8 *buffer)
42 if ((r = eepromSetAddress (address)))
45 buffer [0] = rwAddress >> 8;
46 buffer [1] = rwAddress;
51 U32 eepromGetAddress (void)
59 int eepromRead (U8 *buffer, U32 bufferLength)
63 buffer [0] = rwAddress >> 8;
64 buffer [1] = rwAddress;
66 if (!(r = i2cWriteReadBuffer (deviceAddress, buffer, sizeof (U16), bufferLength)))
67 eepromSetAddress (eepromGetAddress () + bufferLength);
72 int eepromReadAddress (U32 address, U8 *buffer, U32 bufferLength)
76 if ((r = eepromSetAddress (address)))
79 return eepromRead (buffer, bufferLength);
85 int eepromWrite (U8 *buffer, U32 bufferLength)
89 buffer [0] = rwAddress >> 8;
90 buffer [1] = rwAddress;
92 if (!(r = i2cWriteBuffer (deviceAddress, buffer, bufferLength + 2)))
93 eepromSetAddress (eepromGetAddress () + bufferLength);
98 int eepromWriteAddress (U32 address, U8 *buffer, U32 bufferLength)
102 if ((r = eepromSetAddress (address)))
105 return eepromWrite (buffer, bufferLength);
111 int eepromFillAddress (U32 address, U32 bufferLength, U8 fillValue)
116 U8 buffer [EEPROM_PAGESIZE + 2];
118 memset (buffer, fillValue, sizeof (buffer));
120 l = (EEPROM_PAGESIZE - ((address + EEPROM_PAGESIZE) % EEPROM_PAGESIZE)) % EEPROM_PAGESIZE;
121 l = MIN (l, bufferLength);
125 if ((r = eepromSetAddressEx (address, buffer)))
128 if ((r = i2cWriteBuffer (deviceAddress, buffer, l + 2)))
134 l = bufferLength - (bufferLength % EEPROM_PAGESIZE);
136 for (i = 0; i < l; i += EEPROM_PAGESIZE, address += (sizeof (buffer) - 2), bufferLength -= (sizeof (buffer) - 2))
138 if ((r = eepromSetAddressEx (address, buffer)))
141 if ((r = i2cWriteBuffer (deviceAddress, buffer, sizeof (buffer))))
147 if ((r = eepromSetAddressEx (address, buffer)))
150 if ((r = i2cWriteBuffer (deviceAddress, buffer, bufferLength + 2)))