I want to use a PMIC chip in my project. As any PMIC, it has a couple of outputs: buck Vout, and an LDO out. The PMIC is operated over the I2C bus. The MCU acts as the host device and runs on Vout, so I have the I2C lines from my MCU pulled up to Vout. The LDO output is controllable, in the interest of saving power and not losing quiescent current, I would like to use the LDO output to power another slave device. Here is a block diagram of how I would like to connect the MCU and slave device: This slave device also operates over I2C. I only have one I2C bus, so I can only connect the device on that bus. Assuming the voltage levels are the same on Vout and VLDO, I am not sure the configuration I have will completely turn off the device, since the lines are still remain pulled up to Vout. Is this the right way to implement it? If not, how can I correctly configure it? In case my LDO and Buck outputs are not the same, how can this be connected?
The letter of the I2C spec says that the powered-down device is not supposed to drag down the I2C lines. In practice, this may not be the case, depending on how the chip designer implemented their I2C I/O pads.
I2C is supposed to be open-drain. However, sometimes designers will use a 'pseudo-open-drain', that is, a regular I/O pad that's wired to use output enable to make low / high-Z to form the I2C signal. The problem is, regular I/O pads have protection diodes that will kill the bus when the device is powered off.
Here's a clue: if the part has a Vi(h) spec on the I2C pads of, say, VccIO+0.5V, or they have no special statement about I2C vs. power-off, chances are there are protection diodes on the I2C pads that will be forward-biased by I2C on power-down.
The safest thing to do is to put an isolation switch between the powered-down I2C section and the main section, and disconnect the I2C domains from each other when the LDO is powered off.
You have options for the disconnect. You can use a level shifter with an enable, a signal switch (e.g., USB 2:1 mux like this one: http://www.ti.com/lit/ds/symlink/ts3usb221a.pdf) or even a pair of N-channel FETs for the cheapest solution.
If you can have a separate I2C bus for that peripheral and the PMIC, even better.
You have valid concerns. You may or may not have a problem of back-powering the slave device when Vout is active but Vldo is turned off. Most likely the slave device was designed to work properly in a situation like this and not allow the presence of voltage on the I2C lines create problems when the device is not powered. However, this may not be the case. Check the slave device's documentation.
If you have different voltages for Vout and Vldo, then the best thing to do is to add an I2C level shifter in between. I have a couple of good news for you: the circuit is extremely simple and it should also solve your back-powering problem when Vldo is turned off.
Well, I think there are two main options here: one is to bit-bang one I2C of the I2C interfaces, the other is to split the bus in some way with a part that can isolate the slave device you want to switch off. This could probably be done with a simple CMOS bus switch or an I2C level shifter.