轉:http://archive.cnblogs.com/a/2011464/
測了幾個好使的OV7670的SCCB(其實就是I2C) 讀寫的波形(數字模式),反正也不能浪費了,在此以記之,供以后參考。
1. 幾個基本概念
A) 在數據傳輸階段,SDA的變化只能在SCK為低電平的時候,如果在SCK高電平的時候有SDA的變化,則可能表示的是I2C的Start或者Stop
B) Start:當SCK為高時,SDA從高跳變到低表示I2C總線的Start
C) Stop:當SCK為高時,SDA從低跳變到高表示總線的Stop
D)ACK:每次傳輸8個bit以后,接收方都會有一個回應,如果為低表示ACK,表示OK,如果為高表示NACK,但不表示就有問題,比如Master接收Slave的數據的過程中不想接收了,就可以發送NACK
E) 地址 Address:在尋址段,在7位格式的地址中,發送的8位數據前七位為地址,如下圖中的0x42, 最后一位表示此次發起的是讀還是寫,讀為高電平,寫為低電平。
F) 子地址 SubAddress:這個東東在I2C的規范里面其實是沒有的,不過很多廠家都喜歡整這個,其實就是地址段后面的一個或者兩個自己的數據(一般使用寫入R/W=0)。比如俺們以前的BB沒有這個概率,現在新的BB有了這個概念,還支持8位和16位。

- 一個寫時序
下面是一個寫的地址段,加兩個數據段的波形,先發送芯片ID,0x42和R/W=0, 然后發送兩個寫入的數據:0x32,0xb6。
- 一個寫加一個讀
先寫一個地址段,0x42,然后寫入(RW=0)subaddress 0x0B。然后重新啟動一次傳輸,發送地址段,0x42, 讀取之前寫入的subaddress里面的值,讀出的值為0x76,因為Master此時為receiver,要終止傳輸了,所以Master給Salve的回應為NACK。也就是SCCB規范里面的一個2-phase write加一個2-phase read.
4.最后來一個總線上沒有設備的波形,上拉很弱