11 #define ADDR_24LC64 0x50
12 #define PAGE_SIZE_24LC64 32U
13 #define SIZE_24LC64 8192U
18 #define MAGIC_NUMBER 0xAA55AA55
19 #define EEPROM_VERSION 0x00000100
29 uint8_t unique_number;
31 uint8_t touch_calib[24];
32 uint8_t mac_address[6];
48 if((address + size) > SIZE_24LC64 -1)
52 eeAddress[0] = address >> 8;
53 eeAddress[1] = address;
55 if(status !=
NO_ERROR)
return status;
57 if(status !=
NO_ERROR)
return status;
58 status =
bus_writeread(bus,ADDR_24LC64,eeAddress,2,dst,size,NULL);
59 if(status !=
NO_ERROR)
return status;
61 if(status !=
NO_ERROR)
return status;
74 uint8_t eePattern[PAGE_SIZE_24LC64 + 2];
75 uint16_t addressCounter = address;
77 size_t remainingSize=size;
79 if((address + size) > SIZE_24LC64 -1)
85 eePattern[0] = addressCounter >> 8;
86 eePattern[1] = addressCounter;
87 calcSize = min(PAGE_SIZE_24LC64 - (addressCounter & (PAGE_SIZE_24LC64-1)),remainingSize);
88 remainingSize -= calcSize;
89 addressCounter += calcSize;
90 memcpy(&eePattern[2],src,PAGE_SIZE_24LC64);
93 if(status !=
NO_ERROR)
return status;
95 if(status !=
NO_ERROR)
return status;
96 status =
bus_write(bus,ADDR_24LC64,eePattern,calcSize+2);
97 if(status !=
NO_ERROR)
return status;
99 if(status !=
NO_ERROR)
return status;
101 }
while(addressCounter < (address + size));
114 if (eeprom->
version != EEPROM_VERSION)
133 status = EEPROM_Valid(&eeprom);
138 *number = eeprom.unique_number;
152 status = EEPROM_Valid(&eeprom);
157 if(eeprom.calib_valid !=
sizeof(eeprom.touch_calib))
161 memcpy(calib,&eeprom.touch_calib,
sizeof(eeprom.touch_calib));
175 status = EEPROM_Valid(&eeprom);
181 memcpy(mac,&eeprom.mac_address,
sizeof(eeprom.mac_address));
196 status = EEPROM_Valid(&eeprom);
204 eeprom.calib_valid =
sizeof(eeprom.touch_calib);
205 memcpy(&eeprom.touch_calib,calib,
sizeof(eeprom.touch_calib));
209 eeprom.calib_valid = 0;
221 if (!number || !macAddr)
226 memset(&eeprom, 0x0,
sizeof(eeprom));
229 eeprom.
version = EEPROM_VERSION;
230 eeprom.calib_valid = 0;
231 eeprom.unique_number = number;
232 memcpy(&eeprom.mac_address, macAddr,
sizeof(eeprom.mac_address));
status_e bus_release(const struct heivs_bus_t *bus)
Release exclusive access to the bus.
status_e EEPROM_FirstInit(uint8_t number, uint8_t *macAddr)
First initialisation of EEPROM.
EEPROM has no touchscreen calibration data.
void delay_wait_ms(uint32_t ms)
Wait for at least that time.
#define MAGIC_NUMBER
Structure of the eeprom.
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dest, int n, size_t n)
EEPROM is empty or has failed.
ARMEBS4 eeprom access functions.
status_e bus_write(const struct heivs_bus_t *bus, uint32_t address, const void *data, size_t len)
Write data to the bus.
status_e bus_init(const struct heivs_bus_t *bus)
initialize the bus
static status_e EEPROM_Write(uint16_t address, const void *src, size_t size)
Write data in EEPROM for a given size.
const struct heivs_bus_t bus_i2c[BSP_I2C_BUS_COUNT]
All i2c busses.
status_e EEPROM_Calib_Write(const uint8_t calib[24])
Write the touch calbration to EEPROM.
status_e EEPROM_Calib_Read(uint8_t calib[24])
Returns the touch calbration from EEPROM.
status_e EEPROM_ReadMacAddress(uint8_t *mac)
Returns the mac address.
status_e bus_get(const struct heivs_bus_t *bus)
Get exclusive access to the bus.
uint32_t magic
Magic number.
uint32_t version
Version of data.
static status_e EEPROM_Read(uint16_t address, void *dst, size_t size)
Read data from EEPROM for a given size.
status_e bus_writeread(const struct heivs_bus_t *bus, uint32_t address, const void *src, size_t src_len, void *dst, size_t dst_len, size_t *rlen)
Combined write and read data.
status_e EEPROM_ReadUniqueNumber(uint8_t *number)
Returns the unique number from the EEPROM.