sparkfun / SparkFun_External_EEPROM_Arduino_Library

An Arduino library for the easy control of external I2C EEPROMs.
Other
54 stars 14 forks source link

Misdetection of 512Kbit breakout board? #33

Open JonNelson opened 7 months ago

JonNelson commented 7 months ago

Subject of the issue

DetectSettings examples appear to mis-identify 512Kbit i2c breakout board.

I recently purchased (1) "SparkFun Qwiic EEPROM Breakout - 512Kbit" ( https://www.sparkfun.com/products/18355 ) After soldering the header on, I hooked it up to an Arduino Uno, installed the Sparkfun External EEPROM library (this one), and gave it a go.

The results:

17:49:47.133 -> Qwiic EEPROM example
17:49:47.133 -> Memory detected!
17:49:47.133 -> Detected number of address bytes: 2
17:49:47.133 -> Detected pageSizeBytes: 128
17:49:47.359 -> Detected page write time (ms): 2
17:49:47.390 -> Detected EEPROM size (bytes): 16 bytes / 128 Bits - 24XX00

My understanding is that I have the "24xx512" (2 address bytes, 128 byte page size). These appear to be correctly detected. However, the detection of the EEPROM size itself comes back what appears to be wrong as can be seen above.

I am powering the device over USB.

Then I tried example 7, which yielded:

17:53:02.652 -> Qwiic EEPROM example
17:53:02.652 -> Memory detected!
17:53:03.005 -> Detected pageSizeBytes: 128
17:53:03.232 -> Detected EEPROM size (bytes): 4096 bytes / 32 kBits - 24XX32
17:53:03.232 -> Checking memory: Good
17:53:03.457 -> I read (should be 200): 200
17:53:03.457 -> I read (should be -366): -366
17:53:03.457 -> I read (should be -7.35): -7.35
17:53:03.490 -> I read: Hi, I am just a simple test string
17:53:03.490 -> Next available EEPROM location: 105

This is detecting an EEPROM size of 4KB (24XX32). Hence my confusion.

The former is using detectMemorySizeBytes and the latter is using getMemorySizeBytes. It's not clear to me what the difference is.

Although unrelated, there is also a compile-time warning:

.../Arduino/libraries/SparkFun_External_EEPROM_Arduino_Library/src/SparkFun_External_EEPROM.cpp: In member function 'int ExternalEEPROM::write(uint32_t, const uint8_t*, uint16_t)':
.../Arduino/libraries/SparkFun_External_EEPROM_Arduino_Library/src/SparkFun_External_EEPROM.cpp:879:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (uint16_t x = 0; x < amtToWrite; x++)
                              ~~^~~~~~~~~~~~
nseidle commented 7 months ago

Sorry about that. The auto-detection routines are currently WIP. For now, assign the memory size and type as shown in example 1.