Skip to content

Commit

Permalink
Merge pull request #1 from lynxD/master
Browse files Browse the repository at this point in the history
  • Loading branch information
henriheimann authored Feb 19, 2024
2 parents ee4009b + 40c09f5 commit dbdf5a1
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
9 changes: 6 additions & 3 deletions eeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ static uint8_t get_mem_address_size(eeprom_handle_t *handle)
{
switch (handle->addressing_type){
case EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW:
case EEPROM_ADDRESSING_TYPE_8BIT_3BIT_OVERFLOW:
return 1;
default:
return 2;
Expand All @@ -16,6 +17,7 @@ static uint16_t get_mem_address(eeprom_handle_t *handle, uint16_t address)
{
switch (handle->addressing_type){
case EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW:
case EEPROM_ADDRESSING_TYPE_8BIT_3BIT_OVERFLOW:
return address & 0xff;
default:
return address;
Expand All @@ -28,8 +30,9 @@ static uint8_t build_dev_address(eeprom_handle_t *handle, uint16_t read_write_me

if (handle->addressing_type == EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW) {
address_overflow = ((read_write_memory_address >> 8) & 0x1) << 1u;
}else if (handle->addressing_type == EEPROM_ADDRESSING_TYPE_8BIT_3BIT_OVERFLOW) {
address_overflow = ((read_write_memory_address >> 8) & 0x3) << 1u;
}

return (handle->device_address << 1u) | address_overflow;
}

Expand Down Expand Up @@ -61,7 +64,7 @@ bool eeprom_write_byte(eeprom_handle_t *handle, uint16_t address, uint8_t value)

bool eeprom_write_bytes(eeprom_handle_t *handle, uint16_t address, uint8_t *source, size_t count)
{
assert(address + count <= handle->max_address);
assert(address + count <= handle->max_address + 1);

uint16_t current_address = address;
uint8_t *source_ptr = source;
Expand Down Expand Up @@ -92,7 +95,7 @@ bool eeprom_write_bytes(eeprom_handle_t *handle, uint16_t address, uint8_t *sour

bool eeprom_read_bytes(eeprom_handle_t *handle, uint16_t address, uint8_t *dest, size_t count)
{
assert(address + count <= handle->max_address);
assert(address + count <= handle->max_address + 1);

return HAL_I2C_Mem_Read(handle->i2c_handle, build_dev_address(handle, address), get_mem_address(handle, address),
get_mem_address_size(handle), dest, count, EEPROM_I2C_TIMEOUT) == HAL_OK;
Expand Down
7 changes: 6 additions & 1 deletion eeprom.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,25 @@

typedef enum {
EEPROM_ADDRESSING_TYPE_16BIT,
EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW
EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW,
EEPROM_ADDRESSING_TYPE_8BIT_3BIT_OVERFLOW,
} eeprom_addressing_type_t;

#define EEPROM_24LC32A_ADDRESS 0x50
#define EEPROM_CAV24C04_ADDRESS 0x50
#define EEPROM_M24C16_ADDRESS 0x50

#define EEPROM_24LC32A_MAX_ADDRESS 0x7FFF
#define EEPROM_CAV24C04_MAX_ADDRESS 0x0FFF
#define EEPROM_M24C16_MAX_ADDRESS 0x07FF

#define EEPROM_24LC32A_PAGE_SIZE 32
#define EEPROM_CAV24C04_PAGE_SIZE 16
#define EEPROM_M24C16_PAGE_SIZE 16

#define EEPROM_24LC32A_ADDRESSING_TYPE EEPROM_ADDRESSING_TYPE_16BIT
#define EEPROM_CAV24C04_ADDRESSING_TYPE EEPROM_ADDRESSING_TYPE_8BIT_1BIT_OVERFLOW
#define EEPROM_M24C16_ADDRESSING_TYPE EEPROM_ADDRESSING_TYPE_8BIT_3BIT_OVERFLOW

/**
* The timeout used in all I2C transmits.
Expand Down

0 comments on commit dbdf5a1

Please sign in to comment.