I2C - suddently wrong clock rate

Hi there,

I have a G400S on a board; we’ve been using them for years now.
I’m not sure how this is possible, but now the board’s hardware I2C port is now running slow - one full second per bit. Eight seconds per byte.
This change happened while I was using the board (probing around for EMC issues), no debugger/programer attached - so I know it isn’t a software problem.
I’ve confirmed the same software works fine on other hardware, so I’m reasonably confident it’s a hardware problem.


The blue trace is SCL, and if I zoom in really far I can see a blip to low during the SDA transitions.
So it is working but at this bit rate, it’s completely unusable.
You can see I’ve configured it for 400kHz, and that’s what it’s always done.

Anyone have a theory what could cause this?
My 1.0, 1.8 and 3.3V rails are all fine.
I don’t want to desolder and replace the G400S if I don’t have to.

Thanks,
William

This is probably clock stretching, which is normal.

1 second seems a bit extreme. :slight_smile:

I have tried a chip before that did 200ms. Can’t remember what chip.

Yeah one second is a lot but there is no limit in the specifications. Which is why I am not sure.

Maybe the slave device is in sleep and it needs time to wake up?

Do the other clocks look right?

Looking at this again, I’d say the issue of the clock stretch is coming from the slave device.

Consider that the SDC from the master is a very narrow pulse and the SDA from the slave is a wide pulse, I would assume the slave was the one stretching the clock.

Can you zoom into the clock and show where the rising edge appears in relation to the clock?

1 Like

Thanks all.
Yes Gus and Dave, I’m sure you’re right, one of the many slave devices is the culprit. I disconnected the G400 from the I2C bus and the slowdowns disappeared.
Yes, CPU clock looks okay.

I should have thought of clock stretching, it’s just such an odd failure mode to clock stretch even during the addressing phase.

I’m not longer able to flash my G400; when that’s resolved I’ll return to this thread.

One of my many slave devices was apparently damaged (Microchip EMC2305 fan controller) and was the reason the I2C master was clocking slow. Both hardware and software I2C were affected.
Removing the offending chip resolved the problem.

I located the problem by applying a 1A pull-up with a power supply and identifying the hottest device.
Thanks all;
William

I thought I am the only crazy one to do this. I am happy that I have a friend now :grin:

2 Likes