Electrical – good practice approach to powering down peripheral devices (SPI, I2C, UART) which use significant power

efficiencyi2cpowerspiuart

I'm trying to limit the power usage of a system which uses a number of sensors and transceivers on SPI, I2C, and UART buses. I can't easily design around the sensors in use, so selecting devices with explicit shutdown modes or low quiescent current is unfortunately not an option. Some of the devices (an ESP8266 for example) offer low-power modes which are sufficient, but others do not.

The devices are varied in function: voltage/current/power sensing, temperature and humidity sensing, MEMS, transceivers.

In a question discussing unpowered I2C devices, I understand that there are some difficulties with switching off these devices entirely, due to potential parasitic effects on the bus.

One option I looked at is to insert a bidirectional galvanic isolator at the SDA pin of each I2C device that I wish to unpower, though I have concerns about propagation delay – would I need to drive the clock pin through another channel to ensure a delay match? This could quickly become expensive to implement, too, since the isolator ICs aren't the cheapest of ICs.

This still leaves me without much information on potential parasitic effects on SPI and UART buses from unpowered devices. Do these have similar problems? I'm also unsure as to the best way to actually disconnect the device from the power – is a single N-channel MOSFET inline with the device's Vcc (or equivalent) pin appropriate?

Best Answer

I would use an analog multiplexer as shown below:

Using an analog mpx to isolate a device

Use the select line to connect the master side (on the left) to the device (on the right) when it is powered up; select the dummy lines (which can go nowhere) to connect to the master and then power the device down.

The multiplexer will provide isolation.

The device may need a pullup (high value, it is not there for any reason except to put a valid level on the pins) on SDA and SCL.