In my design I have a controller which is interfaced to the processor (or SoC) using I2C. The processor has internal pull ups for I2C lines so I don't need to put external pull ups.
The voltage rail for controller is on regardless of the state of processor (on or off).
The voltage rail for the processor is on when the system is on.
The issue is when the system is off the I2C lines of controller are in undefined state and it consumes more power. This issue is not observed when the system is on and the I2C lines are in a valid state.
If I put pull ups outside powered by an always on rail then I see a leakage on the pull up resistors to the processor I2C pins – possibly leakage through clamping diodes for the processor pins.
How can I isolate the I2C lines of processor and controller without causing leakage and undefined state?
I2C lines for controller and processor work at 1.8 V.
(I can't comment yet - not enough points, so this is more of a comment than an answer.) Please clarify the power supply conditions for the SoC and the controller when both are on and when "the system is off."
- When "on," are they both operating at the same voltage (what voltages)?
- And when the system is "off", you mean the SoC is off and the controller is on? From your comment that the I2C lines are in an undefined state, that appears to be the case (the SoC supply is off, so the I2C lines are no longer pulled up).
The leakage you are seeing is from the controller supply to the SoC I2C pins' ESD diodes to the SoC supply. If you check, the SoC supply is probably not at ground but is pulled up a little by the external pullups you added.
By "it consumes more power," are you referring only to the current in the pullup resistors or also to supply current of the controller IC? CMOS input logic needs to be driven at a supply or ground level to avoid drawing current (crowbar current or shoot-through current) that occurs when the input is somewhere between the supply and ground voltages.
Here's an option that might avoid an isolator:
Add external pull down resistors on the I2C lines to ground. Make these weak, on the order of 100kohm. If the SoC is not powered, then this will be sufficient to ensure the lines are pulled to ground and the leakage in the controller input logic will be avoided. And when the SoC is on, there will be additional leakage current through these, e.g. 3.3V/100k x 2 = 66uA. If that is negligible in your power budget then this might be a decent solution.