It’s common for I2C systems to have both standard and fast devices on the same bus.
For I2C systems, the speed and power consumption both depend on the values of pullup resistors: the values of them should be low enough to secure the fast charge of the bus capacitance.
But the low values increase power consumption, the low values can also present too heavy a load for the transmitter.
The variable topology of the bus can make the situation somewhat more complicated.
Hence when your system is power-restricted and you need to use several I2C chips at different I2C modes, you have to compromise between these chips. Or you can use the adaptable pullup, which is shown in Figure 1.
Figure 1. | The adaptable pullup where a closed transistor connects additional resistors R5 and R6 in parallel to the main pullup resistors R1 and R2. |
The circuit is rather simple: a closed transistor connects additional resistors R5 and R6 in parallel to the main pullup resistors R1 and R2.
The connection can be controlled by GPIO for example, as shown in Figure 1, and should be done before the fast data exchange takes place.
Another solution is shown in Figure 2, which represents one-half of the whole circuit (the second half for SDA is omitted for brevity). The circuit uses an analog switch (for instance, TS5A3159 of TI) to disconnect the “fast” part of the bus. While it’s disconnected, the resistor R5 provides a high (idle) voltage level on the bus. Note that the capacitance of the switch, which can be large enough (20 to 100 pF), should be taken into account.
Figure 2. | Alternative adaptable pullup solution that uses an analog switch to disconnect the “fast” part of the bus. |