I2C總線協(xié)議及其應(yīng)用
SDA線上的數(shù)據(jù)在時(shí)鐘“高”期間必須是穩(wěn)定的,只有當(dāng)SCL線上的時(shí)鐘信號(hào)為低時(shí),數(shù)據(jù)線上的“高”或“低”狀態(tài)才可以改變。輸出到SDA線上的每個(gè)字節(jié)必須是8位,每次傳輸?shù)淖止?jié)不受限制,每個(gè)字節(jié)必須有一個(gè)應(yīng)答為ACK。如果一接收器件在完成其他功能(如一內(nèi)部中斷)前不能接收另一數(shù)據(jù)的完整字節(jié)時(shí),它可以保持時(shí)鐘線SCL為低,以促使發(fā)送器進(jìn)入等待狀態(tài),當(dāng)接收器械準(zhǔn)備好接受數(shù)據(jù)的其它字節(jié)并釋放時(shí)鐘SCL后,數(shù)據(jù)傳輸繼續(xù)進(jìn)行。I2C數(shù)據(jù)總線傳送時(shí)序如圖4。
圖4:總線據(jù)傳送順序
數(shù)據(jù)傳送具有應(yīng)答是必須的。與應(yīng)答對(duì)應(yīng)的時(shí)鐘脈沖由主控器產(chǎn)生,發(fā)送器在應(yīng)答期間必須下拉SDA線。當(dāng)尋址的被控器件不能應(yīng)答時(shí),數(shù)據(jù)保持為高,接著主控器產(chǎn)生停止條件終止傳輸。在傳輸?shù)倪^(guò)程中,當(dāng)用到主控接收器的情況下,主控接收器必須發(fā)出一數(shù)據(jù)結(jié)束信號(hào)給被控發(fā)送器,被控發(fā)送器必須釋放數(shù)據(jù)線,以允許主控器產(chǎn)生停止條件。合法的數(shù)據(jù)傳輸格式如下:
I2C總線在開(kāi)始條件后的首字節(jié)決定哪個(gè)被控器將被主控器選擇,例外的是“通用訪問(wèn)”地址,它可以尋址所有期間。當(dāng)主控器輸出一地址時(shí),系統(tǒng)中的每一器件都將開(kāi)始條件后的前七位地址和自己地址比較。如果相同,該器件認(rèn)為自己被主控器尋址,而作為被控接收器或被控發(fā)送器則取決于R/W位。
二、I2C總線的應(yīng)用
I2C總線是各種總線中使用信號(hào)線最少,并具有自動(dòng)尋址,多主機(jī)時(shí)鐘同步和仲裁等功能很強(qiáng)的總線。因此,使用I2C設(shè)計(jì)計(jì)算機(jī)系統(tǒng)十分方便、靈活、體積也小,在各類實(shí)際應(yīng)用中得到廣泛應(yīng)用。下面舉兩個(gè)應(yīng)用示例。 1. 伺服控制系統(tǒng)用I2C擴(kuò)展LCD顯示
圖5是一個(gè)伺服系統(tǒng)的結(jié)構(gòu)圖。用8XC752單片機(jī)的PWM輸出經(jīng)放大后驅(qū)動(dòng)電機(jī),電機(jī)的轉(zhuǎn)速有測(cè)速機(jī)測(cè)取并直接送到8XC752片內(nèi)A/D電路。處理后的有關(guān)信息經(jīng)I2C總線送到LCD驅(qū)動(dòng)芯片PCF8577以驅(qū)動(dòng)六十四段LCD顯示板。
圖5:伺服系統(tǒng)結(jié)構(gòu)框圖
2. 通用I/O端口作為I2C總線接口
目前,51、96系列的單片機(jī)應(yīng)用很廣,但是它們都沒(méi)有I2C總線接口,限制了在這些系統(tǒng)中使用具有I2C總線接口的器件。但通過(guò)對(duì)I2C總線時(shí)序的分析知道可以用51單片機(jī)的兩根I/O線來(lái)實(shí)現(xiàn)I2C總線的功能。I2C總線規(guī)定SCL線和SDA線是各設(shè)備對(duì)應(yīng)輸出狀態(tài)相“與”的結(jié)果,任一設(shè)備都可以用輸出低電平的方法延長(zhǎng)SCL低電平時(shí)間,迫使高速設(shè)備進(jìn)入等待狀態(tài),實(shí)現(xiàn)不同速度設(shè)備間的時(shí)鐘同步。因此,即使時(shí)鐘脈沖的高、低電平時(shí)間長(zhǎng)短不一,也能實(shí)現(xiàn)數(shù)據(jù)的可靠傳送,可以用軟件控制I/O口做I2C接口。下面就是用GMS97C2051DE的通用I/O口作為I2C總線接口由軟件控制實(shí)現(xiàn)數(shù)據(jù)傳送的例子,圖6為其連線圖。
圖6:GMS97C2051 擴(kuò)展EEPROM接線圖
評(píng)論