Single Master Multiple Slave I2C bus Issues

In my project I have connected multiple sensor breakout boards to a Arduino-proMIni running at 3.3V and 8Mhz as follows on a fabricated pcb but preserving the original board layouts (so that I can connect them via traces instead of loose wires)

The hardware architecture is as follows:

To save power I am using the digital GPIO Pins to power all the breakout boards that are running on I2C with Vin = 3.3V.

The breakout boards for different sensors have pullup resistances for SDA/SCL lines (pulled up with Vin) and configured as follows:

pullup resistance and .1mm trace lengths

When I power on the board, as long as the external eeprom is ON (but no reads or writes are happening), there is no serial output for the i2c line.

When I turn off the eeprom, the i2c line only works if all others sensors are on. Turning any one or more of the sensors off, gives no serial output for the i2c line.

After researching online I realized that we need to give a dedicated Vdd line to the pullup resistances of the SDA/SCL lines instead of the Vin lines, as turning Vin off will also pull-down the i2c lines.

So I removed the pull-up resistances on all the breakout boards and added 5k pullups to the SDA/SCL pins on the MCU with the Vdd.

Even after doing this the i2c lines only work after the external eeprom is turned off.

As For the other sensors -

The RTC now works only when all other sensors are off. Switching the RTC on is most likely adding a lot of noise in the i2c output because the values changes on the serial monitor change asa it is turned on and come back to normal when turned off.
The capacitive sensor works only when the accelerometer is on.
The current odometer and the accelerometer work without any problems.
Turning the accelerometer still gives no serial output

Can someone please help me figure out why all of this is happening? Can this problem be solved by merely choosing the right pull-up resistances or is it a higher order problem? Is it possible that because I am using a 30cm wire for the Accelerometer, the entire bus capacitance is increasing, adding too much noise in the system when multiple slaves run simultaneously. And hence will it help if I shift the accelerometer on the SPI protocol and decouple it from I2C?

All sensors are running at <100Khz except the eeprom which might be running at 400Khz, because the its data sheet specifies it as the min clock rate when the input voltage is greater than 1.7V.

Can you give a link to the manufacturers page or a datasheet of the EEPROM.
The minimal 400 kHz is probably not in the datasheet. That would be very weird.

You may not power down a device and assume the I2C bus still works.
You found a trick with pullup resistors at the microcontroller, but that will not work in my opinion. Most chips have ESD protection diodes inside which make a current path from SDA and SCL to VCC.

You have to keep all the sensors powered, or you have to do a reset.
Can you measure the current that the sensors use ? Some sensors can be set in sleep mode and use only a few µA in sleep mode.

How much dynamic memory (SRAM) does the sketch have ? It is shown in the bottom part after compiling.

The maximum pulldown current for the I2C bus is specified at 3 mA.
When you have 5 pullup resistors of 5k // 10k // 10k // 4k7 // 4k7, that makes about 1k2 and 2.8 mA pulldown current.

Consider the Arduino chip itself. It has protection diodes on every input pin. Those diodes will conduct any time the pin voltage exceeds the power voltage. The excess voltage is directed to the power supply.

What happens when the power supply to that particular chip is off? The power supply pin is at zero volts. The diodes will conduct any time any input pin is over zero volts. That will prevent any other device on that bus from using the bus as it's dragged down to zero.

You have a mix of devices. Some/most of them have the same kind of protection on their inputs. You cannot power off the chip and leave it attached to the I2C bus.

Either change your whole plan or use a level-shifter circuit at each device which can be turned off. The level shifter can cope with the 'down' level being zero or equal to the 'up' level.

Are you sure that each sensor board can be powered by an output pin? Most boards have caps on their power connections, which can cause trouble when switched. And as you noticed, switching nodes on and off doesn't work properly, for the reasons already explained.

I2C is a serial bus system, i.e. all nodes should line up in a daisy chain. Termination resistors then are placed at both ends of the bus.

Most of those breakout boards have pull-up resistors, linked to Vcc. Those may turn into pull-down instead when you power down the device, messing up the bus.

If you really want to save power it MAY work by connecting both Vcc and GND to GPIO pins (so yes, two per sensor), and then setting those pins to INPUT (high impedance) mode.

I doubt that floating both ground and Vcc will work. That just ties SDA and SCL together with two diodes.

I2C does not have to be a linear bus. It works better as a star.