# Arduino and Raspberry Pi - 5V/3.3V I2C

This topic have been covered in various places, but I still think it hasn't been thoroughly explained anywhere. Doing google search on connecting Arduino to Raspberry Pi via i2c gives for example, this page.

While apparently this should work, there is a factual error there: on arduino side, pins used for i2c do have internal pull ups, and they are activated by `Wire` library.

Digging further, I've found following information:

However, it turns out that these are weak (high-resistance) pull-ups; the Pi has strong pull-ups which dominate those on the Arduino, making direct connection safe.

What does safe mean? And how weaker are those pullups compared to raspberry pi ones?

Let's check:

• rpi i2c pullup: 1K8
• arduino i2c pullup: 20K-50K from datasheet (if I'm looking correctly, I'm using ATmega8), though the above page states 10K.

What can I make of those values? My (intuition rather than) basic knowledge hints me something along the lines:

If the i2c is floating, it means the 5V is connected with 3.3V and there are only those pullups along the way, so:

• calculate voltage drop between 5 and 3.3: 1.7V.
• calculate voltage drop across rpi pullup proportionally to voltage drop across arduino pullup: 1800 / 30000 = 0.06, meaning 0.102V across rpi pullup and 1.598 across arduino pullup, so the actual pulled up voltage is gonna be 3.3V + 0.102V = 5V - 1.598V = 3.402V?

Though I'm pretty sure I'm doing some terrible math here and someone is gonna have good laugh:)

So, my question is not whether it's safe (as it's been proved), but rather why is it safe considering the internet resources are inaccurate on this matter.

• 1. And your question is? I have done this and it works. 2. What makes you think the Arduino pullups are enabled? Even if they were, I²C would not work reliably. 3. I haven't checked your calculation, but even if you put 3.402V it wouldn't matter. It only becomes an issue if the voltage exceeds a diode voltage drop. Jan 14, 2015 at 3:19
• Well, my question is to find out why is it safe, cause it's been tested and proven, yet always backed by some erroneous/informal claims. The pullups are enabled, check 'twi_init' helper function in Wire library source. Jan 14, 2015 at 6:10
• You math seems correct. Try calculation the amount of current. It will be in the micro-amps. Combined with the low voltage, you get a few micro-watt in power. Not enough to do any kind of damage. I think that is how they came to the conclusion it's safe. Jan 14, 2015 at 12:35