I'm debugging a single I2C master (Raspberry Pi Compute Module) connected to a single slave (a TLV320AIC23B audio codec on separate board)

They are connected by 3" jumper wires (4 wires SDA, SCL, PWR, GND). There are 4k7 pull up resistors on the master side.

About 20% of the time the slave doesn't successfully pull the line low for ACK and I can observe the following pulse in the scope:

enter image description here

And up close:

enter image description here

Does anyone know what would cause a condition like this?

When I add 220 Ohm series resistors to SCL and SDA at the slave side, the problem goes away completely, but trying to understand why.

  • 1
    \$\begingroup\$ In the past, I had similar problems with the internal I²C hardware of the Pi. Sometimes, it controlled SDA push-pull instead of open-drain. That problem went away with an update of the boot files. github.com/raspberrypi/firmware/tree/master/boot \$\endgroup\$ – Janka Sep 20 '18 at 16:04
  • \$\begingroup\$ @Janka, that is interesting. do you recall how long ago it was? \$\endgroup\$ – Owen Osborn Sep 20 '18 at 16:08
  • \$\begingroup\$ Two years or so. It came up with a kernel update from 3.10.28 to 4.9. \$\endgroup\$ – Janka Sep 20 '18 at 16:09
  • \$\begingroup\$ hmm, already at 4.14 here \$\endgroup\$ – Owen Osborn Sep 20 '18 at 16:19
  • \$\begingroup\$ Doesn't matter, because the boot files may still be outdated. It was that what introduced the problem. It's still a wild guess, though. But updating the boot files is a matter of minutes and worth a try. \$\endgroup\$ – Janka Sep 20 '18 at 16:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.