I am working on some simple code that uses i2c, and I notice while watching the bus on an oscilloscope that there is a quick pulse high on SDA in between data packets. This pulse happens in between the first 9-bit packet that sends address+r/w+ack and the first 9-bit data+ack packets, hence the title of 'tenth' SCL. But while this quick SDA pulse happens, SCL is on that slightly extended low region between packets, which seems like an undefined situation.
It doesn't seem to corrupt the data, but it also doesn't fit into the definition of a START, STOP, or REPEATED START condition, so I'm just curious if that's something that I need to be worried about or if it's some sort of artifact that has no effect on anything. My intuition is that since it happens during a low SCL it's ignored and meaningless.
gerdes1723:
I am working on some simple code that uses i2c, and I notice while watching the bus on an oscilloscope that there is a quick pulse high on SDA in between data packets. This pulse happens in between the first 9-bit packet that sends address+r/w+ack and the first 9-bit data+ack packets, hence the title of 'tenth' SCL. But while this quick SDA pulse happens, SCL is on that slightly extended low region between packets, which seems like an undefined situation.
It doesn't seem to corrupt the data, but it also doesn't fit into the definition of a START, STOP, or REPEATED START condition, so I'm just curious if that's something that I need to be worried about or if it's some sort of artifact that has no effect on anything. My intuition is that since it happens during a low SCL it's ignored and meaningless.
What you are seeing is the the transmitter handing off the SDA line to the receiver for the ACK signal.
In this example the Arduino is communicating with a DS1307 RTCC. It is setting the internal register address to zero. the RED highlighted ACK SDA handoff shows where the SDA line was being controlled by the Arduino, sending a Write CMD, then the SDA line was released (high) by the Arduino, and then Driven Low by the RTCC to Acknowledge the I2C address 0x68 + Write.
You can see the Arduino Stopped driving SDA right when the SCL line went LOW, The RTCC took a few uS to drive it low. This created the 'glitch'. Since the clock was low it wasn't actually a glitch. the SDA line is allow to change while the SCL line is low, If SDA changes while SCL is high you get either a Stop or Start condition.
You can also see after the Green ACK by SLV that SDA went High while SCL was low. That 'glitch' was the RTCC releasing SDA after the ACK, but before the Arduino started the next byte (0x00). It started driving SDA low for the 7th (msb) bit of 0x00. The dwell time between the RTCC releasing and the Arduino driving is ignored because SCL was low, and I2C timing is governed byt SCL.
My bad this was a case of my work computer not displaying images properly, I can see the image on my personal computer. Thanks for your detailed reply this clears everything up nicely.