Correct Design for I2C Address Selector using Jumper Pads

Hi there!

I’ve been messing around with off the shelf components for long enough and finally decided to take the plunge and make some of my own boards. I made a very basic board that I had printed with JLC and now looking to do somehthing a bit more advanced.

I am hooking up an I2C port expander ( MCP23017 ) to a Raspberry Pi CM4 and would like to make the address selectable after the board has been manufactuered. I found a few discussions around I2C selection design but no definitive answers on how to design an I2C address selector.

It seemss to be that the general best practice is to use pull up resistors to keep the address pins high by default and be able to connect them to ground optionally using a solder.

Does the following schematic look correct?

Is there anything else that should be considered?

Am I correct in assuming that the 10k resistor in between ground and +3.3V should be enough to prevent it from shorting?

Any advice is appreciated.

Thank you!

Your questions are not KiCad related so should not be asked here.

Will you have so many I2C devices that you really need a way to change their addresses? Can’t you assign for each of your PCBs one, not changeable address?
I don’t intensive use I2C - maximum one I2C IC at PCB so I always connect all A pins to GND.

In my opinion 10k is correct, but it should be clear form your IC datasheet.

Why not a jumper pins instead of a solder bridge?

If your board is only going to have one MCP23017 then why do you need to change the address of it? Just set all addresses to GND - nice and simple.

If you really want it to selectable then your idea looks sound.

You could also use a 3 way bridge - middle pin to address, pin 1 to GND and pin 3 to 3V3

Apologies if this is not related to KiCad directly. I saw a few dicussions around specific circuit designs on this forum. Is there a specific tag I should be using?

Thanks for your input! I am planning on connecting the Hyperpixel 4 display which uses all the standard GPIO ports, and does not expose a way of selecting the address. So I just wanted to be sure I could change it if needed!

I’m trying to make it as small as possible, so thought the solder jumper could be neat.

Datasheets usually give a recommendation for doing this. Sometimes leaving the pin open is a third option to set the address.

KiCad also has 3-way solder jumpers, and it has normally closed and normally open solder jumpers. the “normally closed” version has a small copper connection in between the tracks that can be cut with a knife.

Another option is two use two resistors. That way you can do the address selection during produduction. Just either mount the pullup or the pull down resistor.

Another consideration is current consumption. 3V3 / 10k = 330 uA and that is a lot of current for battery powered equipment, but negligible for almost any other application.

I’m using another device (Hyperpixel 4) which I can’t control the address of, and it uses i2c as well for the touchscreen controls.

The hyperpixel itself also exposes i2c ports but i’d like to avoid connecting the i2c sockets from the hyperpixel back to my board if i can. :sweat_smile:

If yo want to keep it small, this 3-way jumper is 1.5 square mm, and no resistors needed.

Thanks Paul

That’s a great idea actually. So the PCB itself wouldn’t work out of the box, but requires address selection during assembly which is fine for me.

Good point! Is it as easy as increasing the resistor values? Do you think 100k would work?

This looks great. Thank you!

Personally I have nothing specially against non strictly KiCad discussions and I tend to take part in such, but there is the tendency to limit forum as much as possible to KiCad as this should help people searching the answers for KiCad problems as well as people searching the answers to circuit design should easier find them if circuit discussions would take place at electronic forums.
For me your question was only about setting address pins and resistor values used to it.

Yeah, this was boarder line but @paulvdh offered a valid Kicad solution in the end, so… :wink:

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.