I have a microcontroller (LPC1768FBD100) and am using I2C to configure a 3 port eithernet switch (KSZ8863RLLI). I’ve made about 100 boards so far and they have all worked well, except one. For some reason switch configuration (performed over the I2C interface) is failing. While probing the control signals with an oscilloscope, it all of a sudden sprung to life. On closer inspection it appears that adding the capacitance of the probe (15pF) to the clock line is enough to get it all working.
If I understand the I2C bus correctly, officially you don’t need a minimum value of line capacitance for it to work, but is there some kind of rule of thumb minimum capacitance value for reliable operation?
=======Specs/Notes=======
I2C clock speed = 370kHz.
I2C pull up resistors = 4k7.
Pull up’s are located near the microcontroller.
I2C Clock Length = 91mm.
I2C Data Length = 78mm.
There are no nearby sources of noise that may be interfering with the clock and both traces are running adjacent to a continuous ground plane.
=======Testing=======
Tried reducing clock speed to 100kHz, didn’t work.
Tried 1k, 4k7, 10k, 47k pull up resistances. None worked
Tried adding 8pF of grounding capacitance to the 4k7 clock pullup, didn’t work.
Tried adding 16pF of grounding capacitance to the 4k7 clock pullup, system works and boots reliably.
When I check the clock and data signal lines, there are no signs of ringing. Though, I guess there could potentially be some ringing which the 15pF of probe capacitance is concealing.
=========UPDATED INFO=========
We are using the hardware implementation of I2C built into the LPC1768FBD100
I don't think it is a mechanical issue. I have reflowed all the joins and when I probe the line, I am doing so on a test point, not a solder connection.
Regarding noise and cross talk, my gut is telling me that isn't the issue as the traces are not that long (~80mm), are running adjacent to a continuous ground plane and i'm using pull ups of 4k7. I could be wrong though.
Waveforms. Notations added to each screenshot.
I2C Traces. Routing is not mine. I inherited this from another engineer.