i2c with different pull ups

Thread Starter

skybox

Joined Mar 2, 2009
68
Hi guys,

I have a microprocessor that I want to interface with another device via I2c. The PCB board with the microprocessor is using using 10k pullups on a 3.3V line on the i2c bus while the device I am interfacing with also has 10k pullups connected to 5V. My question is, would this even work? The device I am interfacing with has a uP running off of 5V. Even if I removed the 10k pullups connected to the 5V supply on the other device, would a uP running off of 5V think of a 3.3V input signal as "high"?

Any suggestions would be apprecicated.

 

Thread Starter

skybox

Joined Mar 2, 2009
68
Hi,

Ive tried this and it is not working. I think I will need to use a level shifter of some sort to translate my 3.3V logic into 5V logic that the other device is expecting, even with the 5V pullups removed.
 

Papabravo

Joined Feb 24, 2006
21,225
Be careful. If the I2C were unidirectional then a level shifter might be a possible solution. Since SDA is bidirectional you will need a level shifting transceiver AND logic to implement the bus turnaround for the ACK pulse. I can tell you from bitter experience that this will challenge your skills as a logic and system designer.
 

tom66

Joined May 9, 2009
2,595
Does you MCU have 5V tolerant IOs? If so, you can just connect the pull-ups to 5V and be done with it. Because I²C is open collector. I did this in one of my projects, both micros on the bus were 3.3V but I wanted to allow people to interface with their 5V micros and sensors.
 

Thread Starter

skybox

Joined Mar 2, 2009
68
Thanks for the reply guys.

Doing more research, I might not need a level shifter. I am using a dsPic33f series and it does have 5V tolerant pins.

So what I will try is remove the pullups that connect to 3.3 and reinsert the 5V pullups on the other end.

I will let you guys know.

Thanks!
 
Top