i2c簡易時序圖
啟動信號:
SCL為高電平的時候,SDA由高電平向低電平跳變。結(jié)束信號:SCL為高電平的時候,SDA由低電平向高電平跳變。
應(yīng)答信號:
I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個字節(jié),就在時鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個應(yīng)答信號。應(yīng)答信號為低電平時,規(guī)定為有效應(yīng)答位(ACK簡稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號為高電平時,規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功,對于反饋有效應(yīng)答位ACK的要求是,接收器在第9個時鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時鐘的高電平期間為穩(wěn)定的低電平。如果接收器是主控器,則在它收到最后一個字節(jié)后,發(fā)送一個NACK信號,以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個停止信號P。
寫時序:
開始信號:主機(jī)+從設(shè)備地址+寫命令,從機(jī)應(yīng)答,應(yīng)答成功,表示有這個設(shè)備,然后主機(jī)+設(shè)備內(nèi)部寄存器地址,此時不用再加寫命令控制字,從機(jī)應(yīng)答,應(yīng)答成功,表示設(shè)備內(nèi)有這個地址,主機(jī)寫入數(shù)據(jù),從機(jī)應(yīng)答,是否繼續(xù)發(fā)送,不發(fā)送的話,發(fā)送停止信號P。
讀時序:
要想讀設(shè)備,首先要知道將要所讀取設(shè)備的地址告訴從設(shè)備,從設(shè)備才能將數(shù)據(jù)放到(發(fā)送)SDA上使主設(shè)備讀取,從設(shè)備將數(shù)據(jù)放入SDA上的過程,由硬件主動完成,不用人為的寫入。所以首先先寫入從機(jī)地址,然后+寫控制命令,從機(jī)應(yīng)答,應(yīng)答成功,表示有這個設(shè)備,然后寫入內(nèi)部寄存器地址,此時不用再加寫命令控制字,從機(jī)應(yīng)答,應(yīng)答成功,表示設(shè)備內(nèi)有這個地址。然后主機(jī)繼續(xù)發(fā)出:寫入從機(jī)地址,然后+讀命令,從機(jī)應(yīng)答,應(yīng)答成功,此時便可以讀取數(shù)據(jù)了,從設(shè)備已經(jīng)將數(shù)據(jù)放入到SDA上了。地址跟設(shè)備已經(jīng)驗(yàn)證了,不用再進(jìn)行驗(yàn)證。
啟動信號與停止信號的時序圖如下圖所示:

數(shù)據(jù)位發(fā)送:
在I2C總線上傳送的每一位數(shù)據(jù)都有一個時鐘脈沖相對應(yīng)(或同步控制),即在SCL串行時鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。進(jìn)行數(shù)據(jù)傳送時,在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。邏輯0的電平為低電壓,而邏輯1則為高電平。時序如下圖所示

應(yīng)答信號時序圖如下圖所示:

當(dāng)進(jìn)行一次寫時序的時候,SDA上的數(shù)據(jù)變化的時序圖如下:

當(dāng)進(jìn)行一次讀的時候,SDA上的數(shù)據(jù)變化的時序圖如下:

i2c協(xié)議中的數(shù)據(jù)傳輸時序圖如下:

電子發(fā)燒友App




































評論