
On 28/04/2022 13.11, Eugen Hristev wrote:
According to at24c32 datasheet:
RANDOM READ: A random read requires a “dummy” byte write sequence to load in the dataword address. Once the device address word and data word address are clocked in and acknowledged by the EEPROM, the microcontroller must generate another start condition.
BYTE WRITE: A write operation requires two 8-bit data word addresses following the device address word and acknowledgment. Upon receipt of this address, the EEPROM will again respond with a zero and then clock in the first 8-bit data word.
From this, my understanding is that dataword is 1 byte, and when reading the offset is just 1 byte.
Yes, you read data byte by byte, but that doesn't mean all those bytes can be addressed using a single byte...
drivers/misc/i2c_eeprom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c index 89a450d0f8..c8c67cf028 100644 --- a/drivers/misc/i2c_eeprom.c +++ b/drivers/misc/i2c_eeprom.c @@ -230,7 +230,7 @@ static const struct i2c_eeprom_drv_data atmel24c32_data = { .size = 4096, .pagesize = 32, .addr_offset_mask = 0,
- .offset_len = 2,
- .offset_len = 1,
};
But this can't be correct, because how could one then possibly address all 4096 bytes? Note that some eeproms larger than 256 bytes exist but still use a 1-byte address; that's because they then respond to multiple i2c addresses - that's what the "addr_offset_mask" is about.
Something else must be going on in your case, I think. Are you sure the device tree is correct, i.e. that the eeprom is actually that one and not one that does indeed use 1-byte addressing? I got curious and downloaded the "SAM9X60-EK Board Design Files" from https://www.microchip.com/en-us/development-tool/DT100126#Documentation, inside which one finds mention of a "MCHP MEMORY SERIAL EEPROM 2Kb I2C 24AA025E48T-I/OT SOT-23-6", and 2Kb == 256 byte.
If you have the physical board handy, I'd try to locate the eeprom and see what's printed on it.
Rasmus