SCL:上升沿將數(shù)據(jù)輸入到每個(gè)EEPROM器件中;下降沿驅(qū)動(dòng)EEPROM器件輸出數(shù)據(jù)。(邊沿觸發(fā))
SDA:雙向數(shù)據(jù)線,為OD門,與其它任意數(shù)量的OD與OC門成"線與"關(guān)系。
一、協(xié)議
1.空閑狀態(tài) I2C總線總線的SDA和SCL兩條信號線同時(shí)處于高電平時(shí),規(guī)定為總線的空閑狀態(tài)。此時(shí)各個(gè)器件的輸出級場效應(yīng)管均處在截止?fàn)顟B(tài),即釋放總線, 由兩條信號線各自的上拉電阻把電平拉高。
2.起始位與停止位的定義:
起始信號:當(dāng)SCL為高期間,SDA由高到低的跳變;啟動(dòng)信號是一種電平跳變時(shí)序信號,而不是一個(gè)電平信號。
停止信號:當(dāng)SCL為高期間,SDA由低到高的跳變;停止信號也是一種電平跳變時(shí)序信號,而不是一個(gè)電平信號。
3.ACK
發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號。應(yīng)答信號為低電平,表示接收器已經(jīng)成功地接收了該字節(jié);
應(yīng)答信號為高電平時(shí),規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功。對于反饋有效應(yīng)答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖
之前的低電平期間將SDA線拉低,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。如果接收器是主控器,則在它收到最后一個(gè)字節(jié)后,發(fā)送一個(gè)NACK信號,
以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個(gè)停止信號P。
4.數(shù)據(jù)的有效性:
I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。
5.數(shù)據(jù)的傳送:
在I2C總線上傳送的每一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對應(yīng)(或同步控制),即在SCL串行時(shí)鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。數(shù)據(jù)位的傳輸是邊沿觸發(fā)。
一個(gè)字節(jié)的數(shù)據(jù)在發(fā)送過程中是先傳輸高位(MSB),再傳輸?shù)臀唬↙SB).
1.設(shè)備尋址
主設(shè)備發(fā)送起始位,這會(huì)通知總線上的所有設(shè)備傳輸開始了,接下來主機(jī)發(fā)送設(shè)備地址,與這一地址匹配的slave將會(huì)發(fā)送一個(gè)應(yīng)答,再強(qiáng)調(diào)一下,如果地址匹配,從機(jī)
會(huì)在設(shè)備地址發(fā)送后發(fā)送一個(gè)應(yīng)答,這樣主設(shè)備就尋址到了對就該設(shè)備地址的從設(shè)備。
2.延時(shí)處理
如果從機(jī)沒有準(zhǔn)備好,就會(huì)把SCL拉低。
主設(shè)備寫數(shù)據(jù)到從機(jī):(寫一個(gè)寄存器地址)
1、主設(shè)備發(fā)送起始位;
2、主設(shè)備發(fā)送8位的從機(jī)地址(其中最低位是讀寫控制位(0:寫,1:讀)此時(shí)是寫,高7位是從機(jī)地址位)
3、從機(jī)應(yīng)答
4、主設(shè)備發(fā)送8位的從機(jī)寄存器地址
5、從機(jī)應(yīng)答
6、主設(shè)備發(fā)送數(shù)據(jù)
7、從機(jī)應(yīng)答
8、發(fā)送停止位
注:(1)步驟6和步驟7可以重復(fù)。
(2)應(yīng)答信號是低電平
主設(shè)備讀取從機(jī)數(shù)據(jù):(一個(gè)寄存器地址)
1、主設(shè)備發(fā)送起始位;
2、主設(shè)備發(fā)送8位的從機(jī)地址(其中最低位是讀寫控制位(0:寫,1:讀),高7位是從機(jī)地址位),此時(shí)是寫
3、從機(jī)應(yīng)答
4、主設(shè)備發(fā)送8位的從機(jī)寄存器地址
5、從機(jī)應(yīng)答
6、主設(shè)備發(fā)送停止位
7、主設(shè)備發(fā)送起始位
8、主設(shè)備發(fā)送8位的從機(jī)地址(其中最低位是讀寫控制位(0:寫,1:讀),高7位是從機(jī)地址位),此時(shí)是讀
9、從機(jī)應(yīng)答
10、從機(jī)發(fā)送數(shù)據(jù)
11、主機(jī)應(yīng)答(NACK)
12、從機(jī)釋放總線,主機(jī)發(fā)送停止位。
主設(shè)備讀從機(jī)多個(gè)地址:
1、起始位
2、主設(shè)備發(fā)送從機(jī)地址寫
3、主設(shè)備發(fā)送從機(jī)寄存器地址1
4、主設(shè)備發(fā)送從機(jī)地址讀
5、讀數(shù)據(jù)1(注意:從步驟5到步驟6是沒停止)
6、起始位
7、主設(shè)備發(fā)送從機(jī)寄存器地址2
8、主設(shè)備發(fā)送從機(jī)地址讀
9、讀數(shù)據(jù)2
10、起始位
停止位
在I2C總線上傳輸?shù)臄?shù)據(jù)都是8bit位為單位的,所以當(dāng)主機(jī)要往從機(jī)寫數(shù)據(jù)時(shí)時(shí)序如下:
1、發(fā)送start信號
2、發(fā)送7位地址+1個(gè)讀寫位0(0表示寫,1表示讀)
3、從機(jī)收到地址后,發(fā)送ACK應(yīng)答信號
4、主機(jī)收到應(yīng)答信號后發(fā)送要寫的8位數(shù)據(jù)
5、若從機(jī)收到主機(jī)發(fā)送的數(shù)據(jù),發(fā)送ACK應(yīng)答信號
6、如果主機(jī)要繼續(xù)寫,那么回到步驟4,如果寫完了那么發(fā)送stop信號,終止通信
當(dāng)主機(jī)要從從機(jī)讀取數(shù)據(jù)時(shí)時(shí)序如下:
發(fā)送start信號
1、發(fā)送7位地址+1個(gè)讀寫位1(0表示寫,1表示讀)
2、從機(jī)收到地址后,發(fā)送ACK應(yīng)答信號
3、主機(jī)收到應(yīng)答信號后等待接收從機(jī)的數(shù)據(jù)
4、從機(jī)發(fā)送主機(jī)要讀取的數(shù)據(jù)
5、若主機(jī)收到從機(jī)發(fā)送的數(shù)據(jù),發(fā)送ACK應(yīng)答信號
6、如果主機(jī)要繼續(xù)讀,那么回到步驟4,如果讀完了那么發(fā)送stop信號,終止通信
-
I2C
+關(guān)注
關(guān)注
28文章
1484瀏覽量
123616 -
I2C總線
+關(guān)注
關(guān)注
8文章
390瀏覽量
60916
發(fā)布評論請先 登錄
相關(guān)推薦
評論