I'm using a scope to debug I2C (bit banging) by letting it capture the signal. I think that the output should be good, but the scope's decoder gives the following:
where there is a question mark after the second byte (I'm doing a multiple-byte read here). Does anyone know what that question mark might mean? Is it an error?
Thanks
— EDIT 1
Add scaled out capture.
— EDIT 2
Having taken @Michael Karas's advice, I have now used another probe for Ch1. Indeed, the old probe was bad and under compensated! However, the decoder still gives a question mark.
Best Answer
Taking a close look at your waveform (now that it is clean with a good scope probe) it can be analyzed as shown below:
The most highly likely cause of the ? in the RIGOL I2C decoder is due to the I2C protocol getting all screwed up.
The first part of the protocol looks very reasonable. Later on it gets pretty messed up and is surely what has led to the problem. I would recommend that a very careful look be taken at the following three areas. Once those are fixed things may start to improve.
Note A. The process of injecting the repeated start looks extremely suspect. It should not require the extra transitions on SDA to get the repeated start to work.
Note B. The transition zone of going from output of the read mode Slave Address to getting ready to read in data has suspect extra transitions on SDA.
Note C. The whole character of the clocking of SCL from this point on is very suspect. The timing of the clock should try to maintain the look of the previous three bytes of the clock timing. As a matter of fact if the previous three bytes of clocking could be tweaked to give closer to a 50% duty cycle it may be an improvement as well.