This module is designed to enable long range I2C communications which extends the cable length from several meters to about 50 meters. It is ideal for applications that need to run over long wires such as the CAT5e Ethernet cable that is commonly used to make connections between rooms. Operating with any I2C master, slave or bus buffer is the primary advantage of this module. NXP P82B715 I2C bus extender IC is used as the main component on this module. The module has four pull-up resistors on board: two on the unbuffered bus side and another two on the buffered bus side. Additionally, there are two LEDs indicates the SCL and SDA activities on the bus. Both the LEDs are driven by transistors which draw negligibly small current from the SCL and SDA lines.
- Multi-drop distribution of I2C-bus signals using low cost twisted-pair cables
- Dual, bidirectional, unity voltage gain buffer with no external directional control required
- Compatible with I2C-bus and its derivatives SMBus, PMBus, DDC, etc.
- Supply voltage range 3V to 12V
- Clock speeds to at least 100 kHz and 400 kHz when other system delays permit
- 4-pin interlock connectors onboard
- 4-pin interlock cables included in the package
- Compact size
- VCC: 3-12V power supply
- SCL_CABLE: Buffered SCL Bus (Open drain)
- SDA_CABLE: Buffered SDA Bus (Open drain)
- SCL_BUS: Unbuffered SCL Bus (Open drain)
- SDA_BUS: Unbuffered SDA Bus (Open drain)
- GND: Common ground
Typical Application Schematics
Arduino Point Wiring Scheme
The main problem with the long cable I2C communication is the rising time problem. Because the I2C standard limits the current on SCL/SDA lines to 3mA, the pull-up resistors on SCL/SDA lines have to be big enough so that VCC/Rpull-up is less than 3mA. This results in slow rising-time if the stray capacitance of the cable is sufficiently large.
In the following experiment, an I2C RTC module is connected to an Arduino Duemilanove. The Arduino Duemilanove is programmed to read the Real-Time Clock data from the RTC module via I2C bus. The waveform is captured with an oscilloscope connected to the SCL and SDA lines.
When a 30cm cable is used,
Though there is some distortion on rising edge, the waveform is good and the communication is fine.
When a 1-meter cable is used,
The distortion on the rising edge is getting worse as the cable is longer (larger cable capacitance). But as the peak voltage is still high enough to be recognized as logic HIGH by the node, the communication is still under tolerance.
As the cable gets longer, the rising time also get longer. Finally, we will reach a point that the peak voltage of the rising-edge is lower than VIH of the node. At this point, the communication starts to have problems.
When a 5-meter cable is used,
In this case, the communication is corrupted due to the low peak voltage.
When a 20-meter cable is used,
Again, the communication is corrupted due to the low peak voltage.
In the following experiments, two MOD-000015 modules are added on each side of the cable.
When a 1-meter cable is used, 235 ohms pull-up resistors on buffered bus,
When a 5-meter cable is used, 235 ohms pull-up resistors on buffered bus,
When a 20-meter cable is used, 235 ohms pull-up resistors on buffered bus,
When a 20-meter cable is used, 157 ohms pull-up resistors on buffered bus,
By adding two MOD-000015 modules between the two nodes, the communication is still fine even the length of the cable is extended to 20 meters. The length of the cable could still be much longer if smaller pull-up resistor is used on the buffered bus.
For details of choosing proper resistor values for buffer/unbuffered bus, please refer to the datasheet of P82B715 from NXP.