Sure, changing to a different slave device might look different.
As TDK has mentioned: you are concerned about a pulse which does not matter (it should not have any effect).
As mentioned:
- a signal on SDA can change any time - even with a pulse generated - as long as the SCK is low
- if SCK is high - SDA is not "allowed" to change - you should never see a pulse on SDA when SCK is high
(except for START and STOP bit which is a "violation" of this rule, but with intent)
I have checked again your scope picture: I guess, you are talking about the small spikes on SDA (during the transaction), after the 8th bit, right?
But pretty obvious for me (what I see) and not any issue:
- your pulses on SDA happen always after 8 bits sent (before the 9th bit)
- the 9th bit is turning the direction, so that slave can send the ACK bit
- I2C is Open Drain logic: so, if a master releases the bus, so that a slave can drive now SDA - SDA becomes floating (now an input on master side)
- but because of pull-up - the SDA wants to change to high signal, and it does in your case, for a very short period of time
- now the slave drives SDA towards the master: it sends the ACK - which is a low bit:
the SDA is pulled low, after pull-up tried to pull it high - this is your pulse - there is a tiny period where the SDA signal is floating, it wants to go high, the slave is a bit slow in sending ACK - which is actually a good sign (it avoids a driver conflict) - completely "legal" what you see
The SDA "must" generate such pulses - on the 9th bit (due to Open Drain logic and "speed" of the slave). Changing to a different slave is a different timing: the other guy is now faster on driving SDA as ACK towards the master and the pulse disappears.
As long as you see "pulses" during SCK is low - all is fine. And such pulses are obvious to get on the 9th bit.
Your "pulses" (on scope picture) should not have any effect (and they are possible and based on the nature how I2C works, dependent on the slave device you use...). All fine!