- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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