I am working with an ESP8266 and an ICM-20948 IMU chip. According to the datasheet, the IMU chip works on up to 3.6V VDD, but I/O voltage only goes up to 1.95V.

I thought about using resistors for stepping down 3.3V->1.8V for one way. However the ESP only recognizes a HIGH voltage level after 2.5V, so I cannot directly connect the other way and I need some sort of level shifter.

The connection is a 400 kHz I²C bus. I've heard that at this frequency, resistors should not be used for level shifting. Is this true, should I rather use a 1.8V regulator, and MOSFETs for the level shifting? The final PCB will be in a small handheld device, so I want to keep component count low for a small footprint.

  • \$\begingroup\$ The ESP8266 is a 3.3V microcontroller with 3.3V I/O. I wonder why you are seeing only 1.95V on its I/O. \$\endgroup\$
    – ocrdu
    Sep 22, 2020 at 8:50
  • \$\begingroup\$ @ocrdu The 1.95V I/O is the maximum IO voltage for the IMU chip according to the datasheet, not for the ESP. \$\endgroup\$
    – Twometer
    Sep 22, 2020 at 8:52

1 Answer 1


For I2C bus level translation, you can't simply use resistors. You need a FET based translator or a chip that basically does the same, to allow translation between 3.3V and 1.8V devices, and pull-ups on each side to the respective supplies. You also need a 1.8V regulator to power the 1.8V VDDIO. You might as well use the 1.8V for the VDD too. Regulator can be powered from 3.3V.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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