Qwiic EEPROM design flaw

The Qwiic EEPROM module has some design flaws. One is debatable and one is really a design mistake:

  1. I would argue, it would be better for the WP pin to be pulled-up to 3V3 by default, because then, if you disconnect the WP wire, you achieved read-only, and if you want to write to the memory, just pull the pin to GND. This would make more sense, in my opinion. (I ended up soldering a 4k7 resistor over the WP solder jumper, thereby inverting the signal to a pull-up, which I then could selectively overwrite from my microcontroller if needed.)

  2. The 100k pull-ups on the address lines are outright wrong. Consulting the datasheet there can be seen that there could be up to 50µA flowing into A0, A1, A2. This leads to a significant voltage drop over the 100k resistor. When I tried to change the address by cutting the jumper to GND and brigding the jumper to the 100k resistor, I ended up with only 1.3V at the address pin, which is in an undefined voltage span of the digital input. In my case it was still interpreted as LOW an therefore the address did not change:

I estimated the internal pull-down resistor of the EEPROM (which is also mentioned in the datasheet but without exact value) to be 66kOhms. I think you should redesign the resistors R2, R6 and R7 to be not larger than 10k (they could even be omitted entirely). In my case I just soldered a piece of wire across the three footpints which works wonderfully:

So i have now either a hard pull to GND or a hard pull to 3V3, depending on the solder jumpers E0, E1 and E2.

Hope this helps anyone else struggeling with setting the address of the EEPROM.

Thanks for sharing - You can create a github ‘issue’ to alert the engineers here :slight_smile:

I opened an issue here, as i thought it more fitting because it’s a hardware issue.

I just noticed the long blob of solder near the headers; I’m almost ceryain that is your issue

Did you solder that or is that how it came?

This is not how it came. It came with three 100k resistors in the place of the solder blob.

This is my fix for the above mentioned issue. As the 100k resistors are too big i just replaced them with 0 ohm (a.k.a. a piece of wire and some solder). In principle, there is no point having those resistors there at all (therefore the blob). The only purpose they are serving is to prevent a short circuit on the supply, if someone would accidentally bridge the solder jumpers from top to bottom. So I would argue that those resistors have their place in the design, but are too big by a factor of 10.

Got it, thanks for clarifying — that makes sense. If the blob is intentional and just replacing the address pull resistors with effectively 0 Ω, then yes, the issue is really the resistor value/design choice rather than an assembly defect.

I agree the series/protection argument is probably why they’re there, especially with configurable jumpers involved. But if the datasheet input leakage can get anywhere near the level you mentioned, 100k is not a very robust value for defining the address pins. Something in the lower range would give much better margin while still limiting damage in the “oops, bridged the wrong pads” case. Definitely worth keeping in the hardware issue so engineering can review it for a revision.