6 Replies Latest reply on Nov 14, 2011 2:33 AM by udayan.umapathi

    pull up resistor for 3.3V I2C system


       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.





        • 1. Re: pull up resistor for 3.3V I2C system

           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,



          • 2. Re: pull up resistor for 3.3V I2C system

            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.





            • 3. Re: pull up resistor for 3.3V I2C system

               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,



              • 4. Re: pull up resistor for 3.3V I2C system

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



                • 5. Re: pull up resistor for 3.3V I2C system

                  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.

                  • 6. Re: pull up resistor for 3.3V I2C system

                    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