pull up resistor for 3.3V I2C system

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

 My I2C communications need to be pulled up to 3.3V, but I don't know what size pull up resistor I should be using.  I've read other forum posts that suggest 2.7k ohm or 4.7k ohm, but that only seem to allow the high to be at 3.3V and the low to be at 3.0V.  Is that normal?   I'm using a CY8C27443 PSoC1 and the bus capacitance is 30pF if that helps at all. 

   

If I could get an answer ASAP it would be greatly appreciated.

   

 

   

K

0 Likes
6 Replies
pushekm_21
Employee
Employee
10 likes received 5 likes given First like received

 I did not get what do you mean by leaving the low at 3.0V. Can you please elaborate on this. 

   

 

   

Maximum and minimum value of pull up resistance entirely depends on the bus capacitance. You can refer to the I2C spec available at the following link: http://www.nxp.com/documents/other/39340011.pdf - page 32 for the maximum and minimum rise time specifications. Optimum value of pull up resistor will also depend on the mode you want to use - Standard or Fast mode.

   

 

   

A rough calculation for standard mode gives a maximum value of 6.67K. You can calculate the exact value based on the mode required.

   

 

   

Best regards,

   

Pushek

0 Likes
Anonymous
Not applicable

I have an oscilloscope, when I attach it to either the data line or even the clock line and have data sent through it, it reveals logic high at 3.3V and logic low at 3.0V, I'm not sure how else to explain it.  My understanding is that logic low is supposed to be closer to 0 volts and as I've stated previously from other searching, a 4.7k ohm resistor should be fine.  I didn't see any parameters in the I2CHW user module, or anywhere else, that would allow me to change the reference of logic zero.  I don't really think that's where I'd find the problem anyway since my PWM module is working perfectly (3.3 high, 0 low).  Below is the info for my I2C comms, please someone help me here:

   

 

   

Vcc: 3.3 volts

   

   

chip: CY8C27443

   

user mod: I2CHW

   

mode: 400kHz fast mode

   

max bus capacitance: 10pF

   

pull-up resistor: 4.7k ohm

   

 

   

And before anyone asks, yes I have my o-scope set to a proper sampling rate.

   

   

K

0 Likes
pushekm_21
Employee
Employee
10 likes received 5 likes given First like received

 Do you have any series resistor connected connected on the I2C lines? Also, when does the logic 0 comes as 3.0V? When PSoC1 is writing any data on the bus or when master is writing data?

   

 

   

Best regards,

   

Pushek

0 Likes
Anonymous
Not applicable

This article should help you clear the air on the pull-up resistors issue.

   

dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors.html

0 Likes
Anonymous
Not applicable

Disonnect every thing from the two I2C lines and let the program rrun in a loop, see if the voltage level and waveform is simliar to that above web page. If that is close to the correct one, then it is the external circuit that causing the problem. if the voltage is still wrong, see if you can use other set of pins to try again.

0 Likes
Anonymous
Not applicable

This could possible also be due to drive mode of the I2C pin. What is the driver mode of the I2C pins? 

   

For I2C operation it is generally recommended to have the drive mode set to "Open Drain Drive Low", which means when a 1 written to the dat register, the IO state is open drain and pulled up using external pull up, when a low is written to the dat register, the IO state is pulled low with a strong drive to ground.

   

See this link for more info, http://www.cypress.com/?rID=39496

0 Likes