0
\$\begingroup\$

My Environment:

  • STM32L476RG
  • RTOS: Zephyr 2.1.0-rc
  • I2C device: AQM0802 (character display 8x2)
  • I2C device: MLX90632 (FIR thermometer) with 1k pullup resistors

Problem

I am trying to use the AQM0802 and MLX90632 on the same I2C bus. However, I found that the AQM0802 does not work with the 1k ohm resistors mounted on the MLX90632 board.

The AQM 0802 board works with 2.2k and 4.7k ohm.

Trial

I found the following datasheet. http://www.ti.com/lit/an/slva689/slva689.pdf

In Figure 1 of the above PDF, there are two pullup resistors before and after the repeater hub.

I came up with an idea to use different pullup resistors:

  • A. 1k ohm: before the I2C HUB
  • B. 4.7k ohm: after the I2C HUB

Attached is the circuit. The circuit

Question

Is this a possible solution for the problem? I wonder whether there is any problem using this circuit (breakdown of the I2C devices, for example).

\$\endgroup\$
2
  • 1
    \$\begingroup\$ very related: I2C pull-up resistors on evaluation modules and breakout boards. (1) A straightforward way to solve your problem is to hook-up the boards in parallel and remove the offending 1k resistors. (2) Your approach with a level shifter and different resistor values on either side should work. \$\endgroup\$ Feb 11, 2020 at 3:04
  • \$\begingroup\$ Thank you for the link and the comment. I understand more about this. I am thiking removing the resistor as a last resort. For the while, I may try and check my approach. \$\endgroup\$ Feb 11, 2020 at 3:42

2 Answers 2

1
\$\begingroup\$

A repeater hub could work, if it it isolates the pull-ups. Otherwise it does not work. Basically if you don't want to remove pull-ups, you could use an I2C switch/multiplexer to isolate the devices so only one of them is on the bus at one given moment. Or you can use two separate I2C buses, one for each device. But basically, 1 kohm pull-ups on a 3.3V device is just on the maximum side, and adding 4k7 in parallel makes the current over 3mA limit for standard mode devices. It should still be within limits for fast mode devices, but many devices don't have strong enough drivers for that to work. I would just remove or change the 1k pullups.

\$\endgroup\$
2
  • \$\begingroup\$ Thank you very much for replies of both of you (Justme and User323693). \$\endgroup\$ Feb 11, 2020 at 8:34
  • \$\begingroup\$ I have tried using a repeater hub. It seems it is working fine (at a shorter period of time). For other methods, I will consider depending on what I want to do. Thank you for both of you. \$\endgroup\$ Feb 14, 2020 at 5:23
1
\$\begingroup\$

Check whether this is possible:
1. Remove the pullups on one board and connect both I2C slaves direktly to the MCU.
2. If, for some reason it has to be on both the boards, then go for a higher value, a 10kOhms as well on both the boards.
3. Observe the timing on a scope, if you have access to. if needed, lower the resistor value slightly.
The Hub can be avoided.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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