Skip to main content
added 454 characters in body
Source Link
Maple
  • 13.1k
  • 2
  • 26
  • 63

Reusing the SCL for this purpose would enable me to have this behaviour for the lowest cost & complexity.

What?! You need to add some time delay circuit to each slave. Are you saying it would be cheaper and simpler than adding one MOSFET on power rail?

Also, keep in mind that most chips specify maximum I/O voltage relative to VCC. Your I2C pull-ups will feed it to unpowered slaves, pushing them over maximum specified rating. What often happens in this case is that protection diodes pass this voltage to power rails waking up the chip. But since the current is usually insufficient the MCU enters this semi-powered state which sometimes ends up damaging the chip.

The option with one additional wire to EN pins of all LDOs is good solution. The option with one MOSFET to switch power to all slaves is even better solution.

Now, here are couple real solutions.

  • STM8L001 has low power "halt" mode from which it can wake up on interrupts, including I2C interrupts. Furthermore, the I2C module can perform address match and only wake up when this particular slave is addressed. So, you don't have to wake up all of them, only the one you want to communicate with. You don't need any additional components, any additional lines, and the power savings would be probably higher, despite not shutting down the LDOs.

  • Having LDO on each slave is awful overkill. At the distances I2C works power loss in the wires is negligible. So, get rid of all those LDOs. Connect 3.3V power rail with MOSFET. Put I2C pull-ups after MOSFET! When you need to communicate always switch power ON first. Then insert a delay to allow slaves to wake up and configure their I2C. Only then configure and activate your ownmaster I2C. So, with the cost of 1 MOSFET you can save money ofon all LDOs, make sure no power is wasted and safeguard I/O pins from high voltage in powered down state.

  • Finally, you can combine the two solutions above for even more savings. Get rid of LDOs and only power up the slaves when you want to communicate. Make each slave configure I2C address and go to sleep immediately after power-up. Then use I2C interrupt to wake one slave at a time. This way there will be zero power consumption between communications and minimal consumption during communication, since only one slave will be awake at a time.

P.S. In the end, @SamGibson was absolutely right to comment about XY problem. For some reason you focused on "sexiest option", ignoring much cheaper and more efficient ones.

Reusing the SCL for this purpose would enable me to have this behaviour for the lowest cost & complexity.

What?! You need to add some time delay circuit to each slave. Are you saying it would be cheaper and simpler than adding one MOSFET on power rail?

Also, keep in mind that most chips specify maximum I/O voltage relative to VCC. Your I2C pull-ups will feed it to unpowered slaves, pushing them over maximum specified rating. What often happens in this case is that protection diodes pass this voltage to power rails waking up the chip. But since the current is usually insufficient the MCU enters this semi-powered state which sometimes ends up damaging the chip.

The option with one additional wire to EN pins of all LDOs is good solution. The option with one MOSFET to switch power to all slaves is even better solution.

Now, here are couple real solutions.

  • STM8L001 has low power "halt" mode from which it can wake up on interrupts, including I2C interrupts. Furthermore, the I2C module can perform address match and only wake up when this particular slave is addressed. So, you don't have to wake up all of them, only the one you want to communicate with. You don't need any additional components, any additional lines, and the power savings would be probably higher, despite not shutting down the LDOs.

  • Having LDO on each slave is awful overkill. At the distances I2C works power loss in the wires is negligible. So, get rid of all those LDOs. Connect power rail with MOSFET. Put I2C pull-ups after MOSFET! When you need to communicate always switch power ON first. Then insert a delay to allow slaves to wake up and configure their I2C. Only then configure and activate your own I2C. So, with the cost of 1 MOSFET you can save money of all LDOs, make sure no power is wasted and safeguard I/O pins from high voltage in powered down state.

P.S. In the end, @SamGibson was absolutely right to comment about XY problem. For some reason you focused on "sexiest option", ignoring much cheaper and more efficient ones.

Reusing the SCL for this purpose would enable me to have this behaviour for the lowest cost & complexity.

What?! You need to add some time delay circuit to each slave. Are you saying it would be cheaper and simpler than adding one MOSFET on power rail?

Also, keep in mind that most chips specify maximum I/O voltage relative to VCC. Your I2C pull-ups will feed it to unpowered slaves, pushing them over maximum specified rating. What often happens in this case is that protection diodes pass this voltage to power rails waking up the chip. But since the current is usually insufficient the MCU enters this semi-powered state which sometimes ends up damaging the chip.

The option with one additional wire to EN pins of all LDOs is good solution. The option with one MOSFET to switch power to all slaves is even better solution.

Now, here are couple real solutions.

  • STM8L001 has low power "halt" mode from which it can wake up on interrupts, including I2C interrupts. Furthermore, the I2C module can perform address match and only wake up when this particular slave is addressed. So, you don't have to wake up all of them, only the one you want to communicate with. You don't need any additional components, any additional lines, and the power savings would be probably higher, despite not shutting down the LDOs.

  • Having LDO on each slave is awful overkill. At the distances I2C works power loss in the wires is negligible. So, get rid of all those LDOs. Connect 3.3V power rail with MOSFET. Put I2C pull-ups after MOSFET! When you need to communicate always switch power ON first. Then insert a delay to allow slaves to wake up and configure their I2C. Only then configure and activate master I2C. So, with the cost of 1 MOSFET you can save money on all LDOs, make sure no power is wasted and safeguard I/O pins from high voltage in powered down state.

  • Finally, you can combine the two solutions above for even more savings. Get rid of LDOs and only power up the slaves when you want to communicate. Make each slave configure I2C address and go to sleep immediately after power-up. Then use I2C interrupt to wake one slave at a time. This way there will be zero power consumption between communications and minimal consumption during communication, since only one slave will be awake at a time.

P.S. In the end, @SamGibson was absolutely right to comment about XY problem. For some reason you focused on "sexiest option", ignoring much cheaper and more efficient ones.

Source Link
Maple
  • 13.1k
  • 2
  • 26
  • 63

Reusing the SCL for this purpose would enable me to have this behaviour for the lowest cost & complexity.

What?! You need to add some time delay circuit to each slave. Are you saying it would be cheaper and simpler than adding one MOSFET on power rail?

Also, keep in mind that most chips specify maximum I/O voltage relative to VCC. Your I2C pull-ups will feed it to unpowered slaves, pushing them over maximum specified rating. What often happens in this case is that protection diodes pass this voltage to power rails waking up the chip. But since the current is usually insufficient the MCU enters this semi-powered state which sometimes ends up damaging the chip.

The option with one additional wire to EN pins of all LDOs is good solution. The option with one MOSFET to switch power to all slaves is even better solution.

Now, here are couple real solutions.

  • STM8L001 has low power "halt" mode from which it can wake up on interrupts, including I2C interrupts. Furthermore, the I2C module can perform address match and only wake up when this particular slave is addressed. So, you don't have to wake up all of them, only the one you want to communicate with. You don't need any additional components, any additional lines, and the power savings would be probably higher, despite not shutting down the LDOs.

  • Having LDO on each slave is awful overkill. At the distances I2C works power loss in the wires is negligible. So, get rid of all those LDOs. Connect power rail with MOSFET. Put I2C pull-ups after MOSFET! When you need to communicate always switch power ON first. Then insert a delay to allow slaves to wake up and configure their I2C. Only then configure and activate your own I2C. So, with the cost of 1 MOSFET you can save money of all LDOs, make sure no power is wasted and safeguard I/O pins from high voltage in powered down state.

P.S. In the end, @SamGibson was absolutely right to comment about XY problem. For some reason you focused on "sexiest option", ignoring much cheaper and more efficient ones.