I am using a Teensy 4.0 and an MCP23016 Port Expander (only I2C device) on my PCB.
- I have 4k7 pullups to 3V3 on SDA & SCK.
- SCK track is 77.9 mm long, 0.254 wide.
- SDA 64.3 mm long, 0.254 wide.
- I have 33 pF & 3k3 on the CLK pin.
The circuit works, but unreliably. As soon as a scope probe is connected to the SCK pin it is reliable.
I added as a mod a 4700 pF cap to the SCK pin and that works reliably, too.
What I don't understand is why, as there is no minimum capacitance only a maximum.
On another board of the same type I have 100 pF & 3k3 for the CLK RC as that was all I could find, this one works without the 4700 pF cap or scope probe.
Another strange observation is that we were testing for any relationship between temperature and reliability, so we had a hot air gun on minimum heat (~35 C) pointing at the port ex and when scoping the SDA pin we could see that the I2C message was changing. Move warm air away and it goes back to normal. Warm air back on and changing I2C messages again. This was very repeatable.
Took board off and visually inspected it and all pins were soldered well, no dry joints. It was a bit fluxy, so was cleaned several times with Flux-off. Still has the same issue.
The second board with the 100 pF cap for the CLK RC does show the same warm air effect but less often.
Why does the warm air make a difference?
I know I need to examine the I2C messages against the datasheet to make sure we're not on the edge of timings, and compare with and without the 4700 pF to see what effect it is having. Also slowing the speed down could help.
Any ideas what's going on?