Pico RGB Keypad i2c pullup error

@thibault Is the soldering on your Pico good?

Well I believe so. the micro python example runs perfectly. I have the issue only with the CircuitPython one.
I soldered it today and all looks fine but if you know a way to check them to be 100% sure I’ll do it.

EDIT: I tried with another pico and have the same error :(

Yeah, I’m getting the same now too. You can disable that warning but it requires rebuilding CircuitPython, which I’m currently trying to do… I’ll get back to you when I’ve got it sorted, hopefully…

I’m running into the same issue. Tried with 2 different Picos. The soldering is good and the Pimoroni Micropython example works. Any idea?

Hi, I’m one of the CircuitPython core developers.

We had a discussion about using the internal pullups for I2C in CircuitPython in this proposed CircuitPython PR: RP2040: Add support for using internal i2c pullups. The internal pullups are 50k-80k, which are really too high to be adequate I2C pullups. MicroPython does enable the internal pullups for I2C as a backstop, and CircuitPython does not. All Adafruit I2C breakouts include pullups.

The original motivation to use the internal pullups was the Keybow board. But that reason is now moot, I believe, due to a board redesign mentioned in this comment in the PR: RP2040: Add support for using internal i2c pullups by Gadgetoid · Pull Request #4488 · adafruit/circuitpython · GitHub. So the PR mentioned above was closed and not merged.

@otherguy is seeing the issue on their RGB Keypad.

I just wanted to chime in and say I’m also facing this issue with the RGB Keypad. I’ve tried it on two different Picos, one with presoldered headers and one that I soldered myself. Both throw this error.

@danhalbert is this something that could be fixed by forking the repo, merging the changes in PR #4488 and rebuilding the UF2 file from that?

Hi, I’ve had some success.

TL;DR: I added my own pullups and it all works, but it’s messy.

I’m getting the same error about the pullup, and searching around on Github for the error message, I found the PR where the wording was changed.

The code that checks the pullups looks like it compares the value of the SDA and SCL pullups and fails if they aren’t the same, so I guess that means with the keypad they aren’t the same.

Now, I’m only just about good enough at electronics to be dangerous, but I could only find one obvious resistor on the board, so my uneducated guess is that the board might only be pulling up the SDA line and there must be some sort of weak pullup in the Pico already for SCL but for some reason it’s not enough for CircuitPython to register that both lines are pulled up.

I stuck the Pico on a breadboard and jumpered across to the keypad on GP4/GP5 (I2C for the buttons) and GP17/GP18/GP19 (SPI for the pixels), plus a few power (VBUS along to VREF) and a couple of ground pins. I then put a pair of 3k (no maths involved - that’s all I had laying around) pullup resistors of my own on the breadboard, attached to GP4/GP5 and +3V3.

The wildestpixel demo code works just fine now for me.

So I guess the next question is what we do about it because breaking the Pico out on to a breadboard to put extra pullups in kinda defeats the neatness of the RGB Keypad. If I’m right, is this a hardware problem, or do we need the Pico’s internal pullups handled in circuitpython?

I just added 2 resistors on the RGB keypad itself, since there are free pads. I added the resistors between normal digital pins and SCL/SDA and enabled the pins in code. This works fine and takes about 3 seconds to solder.

I also emailed Pimoroni about this but got no real answer yet, apart from the fact that the RGB keypad should have pullup resistors!

On my RGB keypad, the resistance is infinite if I measure it without a Pico plugged in.

1 Like

A bit more testing later, and it seems that it fails whichever pullup I remove - the keypad needs both pullups in place to work correctly.

@otherguy I’ll follow your lead and add the pullups to the extra row of pads.

Also consider that plenty of people DON’T have this issue. I think there must be a hardware issue on our RGB Keypads.

Hi all,

This is something we’re looking into, please could anyone who hasn’t already send a ticket to support@ with their order number so we can arrange a replacement and if you’re in the UK a return of the faulty one as well?

Cheers :)


The replacement works perfectly, thanks @Matt.

Some 3D printed key covers and a bit of tweaking and it’s doing exactly what I wanted it for:

1 Like

Same issue with “one” of mine. One works fine in both Circuit Python and Micro Python. The other one works fine in Micro Python, runs the demo just fine, but gives the i2c pullup error in Circuit Python.

Can somebody point me to what resistor(s) to check, location wise on the board?
And, what value would work if I was too add my own?

I soldered two 4.7 K resistors on, one on GP4 to 3.3v and one on GP5 to 3.3v. Working now. =)

Not sure if I should attempt to revive a dead thread. I’ve been having this same issue and it didn’t resolve with adding the resistors. Any idea if I’m doing something wrong?

I suspect its an issue with your soldering. Mine are soldered in the exact same place and it cured the error message for me.
Last I heard from Pimoroni was they removed all the defective ones from stock so they couldn’t be sold. And put checks in place so the component error wouldn’t happen again.

mine hasnt been used yet! or soldered ,so does that mean i need to solder it .

It depends on a couple of things. There were just a few that got the wrong pullup resistors on them. The wrong reel got loaded to the pick and place by accident.
It yours has the correct resistors you won’t get that error message.

Plus, it only errors if you use Circuit Python. No error message in Micro python.
I do believe the recommended image is Circuit Python.

Mine got put aside when I started some other PICO tinkering, and i just never got back to it. Might be time to have another go and actually put it to some good use.

1 Like

I have one here with the wrong pullups on it that I didn’t modify. Pimoroni had sent me a replacement so I just put it aside and left it stock.
The Pimoroni Micro python examples run just fine on it.
In Circuit Python I get the following error.

Traceback (most recent call last):
  File "<stdin>", line 16, in <module>
  File "/lib/pmk/platform/rgbkeypadbase.py", line 22, in __init__
RuntimeError: No pull up found on SDA or SCL; check your wiring

I also have one with the correct pullups on it, didn’t need to be modified. It works fine in Micro python and Circuit Python, no pull up error message.
I also have one with the wrong pull ups on it, that was modified, I added my own pull ups. It runs fine in Micro Python and Circuit Python.
All three of these were tested with the latest current versions of the respective uf2 files.

1 Like