I am trying to describe the issue I have as clear as possible here: I have two self built development boards around a Silicon Labs EFR32 MCU. The boards are identical, but I encounter two different behaviors when using the boards and I cannot figure out what seems to be wrong. The connection between my I2C pins and the breakout pins looks as follows:enter image description here

The I2c pins are also 5V tolerant going into the MCU. Now I connected my development boards to an MCP23017 GPIO expander and wired it up as described in the datasheet. With the first development board, communication was not problem whether the MCP was powered by 5V or 3.3V. But with the second development board communication was only possible while the MCP was hooked up to 3.3V, hooked up to 5V I just could not communicate. So next I hooked the I2C lines to my oscilloscope and suddenly the communication was no problem even though the MCP was hooked up to 5V. In the end it seemed like the MCP was always communicating, hooked up to 5V, as long as some conductive material was touching the SCL line even if it only was a screwdriver or an unconnected jumper cable.... I verified that all the components were properly soldered on both boards and that they had the expected characteristics. I still cannot make any sense of why my second development board behaves so weird. Maybe someone had a similar issue or might have any idea what the problem might be.

Any comment is greatly appreciated!


The chip cannot be used on a 5V I2C bus when it is powered with 3.3V.

The maximum on any pin is the supply voltage, so when powered with 3.3V, the I2C pins are not 5V tolerant, and the chip is used outside the specifications listed in the datasheet.

As the current is limited by the pull-up resistors, it is possible that there is no permanent damage to the IO expander, as maximum IO pin voltage is VDD+0.6V and maximum IO pin clamping current is 20mA.

Also the IO expander cannot be used on a 3.3V I2C bus when powered with 5V. The minimum logic high voltage is 4V, and 3.3V is not enough.

So the IO expander supply voltage must match the I2C bus voltage, regardless of what voltage levels the MCU supports.

Adding scope probe (or a finger) adds resistance, but also capacitance, so perhaps there is a problem on the pull-ups, either bad soldering or just incorrect value resistor. Check that the pull-up resistor values are reasonable for the I2C speed you are using, and that the rise and fall times are not violated, or other timing parameters.

  • \$\begingroup\$ Hi, thanks for the answer. I am sorry if my explanation was not clear, but the I2C bus was always at 3.3V. The only varying factor was the VDD of the expander. And you are right, according to the datasheet 0.8VDD are the minimum on the data pins which my MCU clearly does not supply. Anyways, the chip always worked and I verified the 3.3V on the datalines. I am using 10k resistors on a 100kHz bus with a single slave. As. mentioned I verified every component to my best knowledge on the board. \$\endgroup\$
    – tlubes
    Sep 14 '20 at 21:38
  • \$\begingroup\$ Yes I thought at first it was 5V bus and wrote it first, but then I re-read and noticed you don't mention the bus voltage at all, so I continued with more general answer. However, one chip might work at 5V on a 3.3V bus and another might not, and anything that is out of specs does not need to work. \$\endgroup\$
    – Justme
    Sep 15 '20 at 9:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.