0
\$\begingroup\$

I am connecting an SCD41 CO2 sensor to a Raspberry Pi Zero 2 W. To keep the 3.3V current draw low, I would like to power it at 5V (peak current is 205 mA at 3.3V vs. 137 mA at 5V). A TXS0108E module works as a level shifter for the I2C interface, but a TXS0102 module does not. With the TXS0102, the SCD41 acknowledges the addresses it receives, but it does not acknowledge the data that follows. Looking at the datasheets for the level shifters, I don't see what difference could be causing this or how to fix it. Any suggestions?

Scope captures are as follows. SCL and SCD on 5V side is sometimes clean: enter image description here Other times it is strange: enter image description here

SCL on both sides: enter image description here SDA on both sides: enter image description here

The TXS0102 module is this one (CJMCU-0102). It has decoupling capacitors on both sides and a 10k pulldown for output enable (which I tied to VA). VA is 3.3V; VB is 5V.

\$\endgroup\$
2
  • \$\begingroup\$ I don't see anything obvious from the datasheets, either. You're probably going to have to provide more information -- schematics and scope captures of the I2C clock and data on both the 3.3 V and 5 V bus. \$\endgroup\$
    – Null
    Dec 16, 2021 at 15:49
  • \$\begingroup\$ I've added scope captures. \$\endgroup\$
    – stardt
    Dec 16, 2021 at 16:44

1 Answer 1

0
\$\begingroup\$

Indeed, it is interesting that one of them works and one does not.

Especially since the TXS0102 should work as it is even intended for that, and TXS0108 should not work as it seems to be unsuitable for I2C bus.

By looking at the scope captures, both the rising and falling edge look very slow. I would expect the falling edge to be very sharp compared to the rising edge, as the falling edge needs to be faster than 300ns. Which was fixed by changing from 1x to 10x. Now the glitches caused by rise time acceleration are clearly visible.

However, unless you specifically need edge time accelerators on your bus, I would not use either of these two chips just for simple voltage translation.

So the TXS0102 should work, but it depends on your external circuitry if it works or not. The TXS0108 should not even work, but again, it depends on your external circuitry. What matters are the bus capacitances, bus voltages, external pull-ups, chip drive strength, and even bus length. You need to look the bus with an oscilloscope to see why it fails to work.

Both translator chips seem to require or cause faster transitions on bus than typically found on I2C bus. These level converter chips contain active circuitry in them, to accelerate logic signal edges. In fact the accelerated edge time may be less than what is allowed on an I2C bus.

However, what explains the difference in their operation is their internal structure. The 0108 has both rise and fall time accelerator, while the 0102 only has a rise time accelerator. When a transition edge is detected, the chips will momentarily drive the bus hard to the same state to make the transition faster, but this is not allowed by I2C, and it can cause problems, unless the chip does it in a way that is specifically compatible with I2C.

The 0108 has 40kohm pull-ups when idle, and 4k during rise time acceleration, and accelerates both rising and falling edges.

The 0102 has only 10k pull-ups and accelerates only rising edge.

So there is enough of internal differences between the chips.

\$\endgroup\$
7
  • \$\begingroup\$ The product details for the [ti.com/product/TXS0108E](TXS0108E) include I2C in the list of applications, so I thought it would be suitable. Thanks, I saw the difference in the pull-ups but not the falling edge acceleration. \$\endgroup\$
    – stardt
    Dec 16, 2021 at 17:23
  • \$\begingroup\$ @stardt Interesting, it does read on product page, but not on datasheet. It might be suitable, but nowhere is said under what conditions - I'd need to see your schematics for what there is on I2C bus. The waveform looks very slowly rising and falling. In any case, the TSX0108E has a 300 to 500 ohm pass gate series resistance - that's quite a lot in series for a I2C bus. Typically, that hight a value is not used. And remember, modules you buy may contain other components than just a chip, so chip datasheet may be useless. \$\endgroup\$
    – Justme
    Dec 16, 2021 at 17:44
  • \$\begingroup\$ The 0108 only has decoupling caps. The 0102 has decoupling caps and a 10k pulldown on OE. There is nothing extra the bus - a direct connection from the raspberry pi to the TXS module and then a direct connection to the SCD41 on the other side. \$\endgroup\$
    – stardt
    Dec 16, 2021 at 17:56
  • \$\begingroup\$ @stardt Yes, I understand there is direct connection, but you need to know if there are pull-up resistors and what value they are on Raspberry Pi and your SCD41 module. I don't know which PCB modules you are using and their pull-up values, if you only link to a chip datasheet. \$\endgroup\$
    – Justme
    Dec 16, 2021 at 18:01
  • \$\begingroup\$ The Raspberry pi has 1.8k pull-up resistors on the I2C lines. The SCD41 module has nothing extra; it is truly the chip by itself (without pull-up resistors). \$\endgroup\$
    – stardt
    Dec 16, 2021 at 18:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.