Attached is a scope capture of a write to the ADV7180 video switcher. We write out the
address and 2 bytes of data and all of the starts and stops appear to be ok
(the highlighted parts and the start,stop, ack, etc are all function of the
scope we have we an I2C analyzer on it, but you can see the waveforms as well)
except the last little bit of the last byte (the 3rd byte '00') . the clock
line is supposed to go high I believe in the transaction, after the 'ack' or
stop bit and it doesn't. So the next write of 40 to write another set of data
to the video part doesn't get the proper start sequence...so anything else
written to it fails.
Everything looks ok with the clocking of the data, so I don't know why the
I2C controller isn't releasing the clock to high....did it not see a
proper 'stop' from the video chip?
If we do an address 40 transaction to
set the internal switch to analog port #2 (I think the default is port #1) by
writing 40, then data 00 for setup, then data 01 to switch to Port #2, is there
a finite set of time we have to wait before writing another command to the
part, or is there something with writing to addres 40, that we then have to
write something else before accessing address 40 again ?
It's odd that every initial address 40 we write, everything is ok on the I2C
bus the master and slave do their thing, but any subsequent write to address 40
after the first good one bombs almost all of the time.
I looked at timing and it doesn't appear that that ADV7180 needs anything
special. Basically we want to set up the video part to square up the pixels, and then
just switch between analog input 1 and analog input 2; That's all the part is
Maybe we need to set up the part to do square pixels separately from switch the
port (I.e. 2 separate I2C transactions?)