i2c簡(jiǎn)易時(shí)序圖
啟動(dòng)信號(hào):
SCL為高電平的時(shí)候,SDA由高電平向低電平跳變。結(jié)束信號(hào):SCL為高電平的時(shí)候,SDA由低電平向高電平跳變。
應(yīng)答信號(hào):
I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號(hào)。應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位(ACK簡(jiǎn)稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功,對(duì)于反饋有效應(yīng)答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。如果接收器是主控器,則在它收到最后一個(gè)字節(jié)后,發(fā)送一個(gè)NACK信號(hào),以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個(gè)停止信號(hào)P。
寫時(shí)序:
開始信號(hào):主機(jī)+從設(shè)備地址+寫命令,從機(jī)應(yīng)答,應(yīng)答成功,表示有這個(gè)設(shè)備,然后主機(jī)+設(shè)備內(nèi)部寄存器地址,此時(shí)不用再加寫命令控制字,從機(jī)應(yīng)答,應(yīng)答成功,表示設(shè)備內(nèi)有這個(gè)地址,主機(jī)寫入數(shù)據(jù),從機(jī)應(yīng)答,是否繼續(xù)發(fā)送,不發(fā)送的話,發(fā)送停止信號(hào)P。
讀時(shí)序:
要想讀設(shè)備,首先要知道將要所讀取設(shè)備的地址告訴從設(shè)備,從設(shè)備才能將數(shù)據(jù)放到(發(fā)送)SDA上使主設(shè)備讀取,從設(shè)備將數(shù)據(jù)放入SDA上的過(guò)程,由硬件主動(dòng)完成,不用人為的寫入。所以首先先寫入從機(jī)地址,然后+寫控制命令,從機(jī)應(yīng)答,應(yīng)答成功,表示有這個(gè)設(shè)備,然后寫入內(nèi)部寄存器地址,此時(shí)不用再加寫命令控制字,從機(jī)應(yīng)答,應(yīng)答成功,表示設(shè)備內(nèi)有這個(gè)地址。然后主機(jī)繼續(xù)發(fā)出:寫入從機(jī)地址,然后+讀命令,從機(jī)應(yīng)答,應(yīng)答成功,此時(shí)便可以讀取數(shù)據(jù)了,從設(shè)備已經(jīng)將數(shù)據(jù)放入到SDA上了。地址跟設(shè)備已經(jīng)驗(yàn)證了,不用再進(jìn)行驗(yàn)證。
啟動(dòng)信號(hào)與停止信號(hào)的時(shí)序圖如下圖所示:
數(shù)據(jù)位發(fā)送:
在I2C總線上傳送的每一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng)(或同步控制),即在SCL串行時(shí)鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。進(jìn)行數(shù)據(jù)傳送時(shí),在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。邏輯0的電平為低電壓,而邏輯1則為高電平。時(shí)序如下圖所示
應(yīng)答信號(hào)時(shí)序圖如下圖所示:
當(dāng)進(jìn)行一次寫時(shí)序的時(shí)候,SDA上的數(shù)據(jù)變化的時(shí)序圖如下:
當(dāng)進(jìn)行一次讀的時(shí)候,SDA上的數(shù)據(jù)變化的時(shí)序圖如下:
i2c協(xié)議中的數(shù)據(jù)傳輸時(shí)序圖如下:
評(píng)論
查看更多