Mod Moved Comments To Chat
2 added 270 characters in body
source | link

You should consider adding some bus isolation between each slave and the master. The reason being is that the ESD diodes in the SCL/SDA pins of a slave that is powered down could be interfering with the I2C bus as they leech power from the bus to feed through the internals of the slave. Given the low current imposed by the pullup resistors being the only power source this shouldn't cause any damage to the slave, but it may well cause the I2C bus to be seen as LOW when it shouldn't, causing communication to fail.

You should add a buffer with an "enable" pin of its own between each slave and the bus. My device of choice is the PCA9306 from Texas Instruments. It also means that the slave has its own separate pullup resistors powered by its own 3.3V rail, keeping all the power separate.

You would then have sequences such as:

  1. Power up slave
  2. Give short powerup delay (if needed)
  3. Enable PCA9306
  4. Do I2C transactions
  5. Disable PCA9306
  6. Power off slave

The PCA9306 can also be used to connect 3.3V slaves to a 5V MCU if needed.

schematic

simulate this circuit – Schematic created using CircuitLab

You should consider adding some bus isolation between each slave and the master. The reason being is that the ESD diodes in the SCL/SDA pins of a slave that is powered down could be interfering with the I2C bus as they leech power from the bus to feed through the internals of the slave. Given the low current imposed by the pullup resistors being the only power source this shouldn't cause any damage to the slave, but it may well cause the I2C bus to be seen as LOW when it shouldn't, causing communication to fail.

You should add a buffer with an "enable" pin of its own between each slave and the bus. My device of choice is the PCA9306 from Texas Instruments. It also means that the slave has its own separate pullup resistors powered by its own 3.3V rail, keeping all the power separate.

You would then have sequences such as:

  1. Power up slave
  2. Give short powerup delay (if needed)
  3. Enable PCA9306
  4. Do I2C transactions
  5. Disable PCA9306
  6. Power off slave

The PCA9306 can also be used to connect 3.3V slaves to a 5V MCU if needed.

You should consider adding some bus isolation between each slave and the master. The reason being is that the ESD diodes in the SCL/SDA pins of a slave that is powered down could be interfering with the I2C bus as they leech power from the bus to feed through the internals of the slave. Given the low current imposed by the pullup resistors being the only power source this shouldn't cause any damage to the slave, but it may well cause the I2C bus to be seen as LOW when it shouldn't, causing communication to fail.

You should add a buffer with an "enable" pin of its own between each slave and the bus. My device of choice is the PCA9306 from Texas Instruments. It also means that the slave has its own separate pullup resistors powered by its own 3.3V rail, keeping all the power separate.

You would then have sequences such as:

  1. Power up slave
  2. Give short powerup delay (if needed)
  3. Enable PCA9306
  4. Do I2C transactions
  5. Disable PCA9306
  6. Power off slave

The PCA9306 can also be used to connect 3.3V slaves to a 5V MCU if needed.

schematic

simulate this circuit – Schematic created using CircuitLab

1
source | link

You should consider adding some bus isolation between each slave and the master. The reason being is that the ESD diodes in the SCL/SDA pins of a slave that is powered down could be interfering with the I2C bus as they leech power from the bus to feed through the internals of the slave. Given the low current imposed by the pullup resistors being the only power source this shouldn't cause any damage to the slave, but it may well cause the I2C bus to be seen as LOW when it shouldn't, causing communication to fail.

You should add a buffer with an "enable" pin of its own between each slave and the bus. My device of choice is the PCA9306 from Texas Instruments. It also means that the slave has its own separate pullup resistors powered by its own 3.3V rail, keeping all the power separate.

You would then have sequences such as:

  1. Power up slave
  2. Give short powerup delay (if needed)
  3. Enable PCA9306
  4. Do I2C transactions
  5. Disable PCA9306
  6. Power off slave

The PCA9306 can also be used to connect 3.3V slaves to a 5V MCU if needed.