一.簡(jiǎn)介
I2C(Inter-Integrated Circuit)總線(xiàn)是一種由Philips公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其外圍設備。I2C總線(xiàn)產(chǎn)生于在80年代,最初為音頻和視頻設備開(kāi)發(fā)。由于其簡(jiǎn)單性,如今方泛用于微控制器與各種功能模塊的連接,可以說(shuō)是學(xué)單片機的人,入門(mén)之后,必定要涉及到的。
I2C 總線(xiàn)實(shí)際上已經(jīng)成為一個(gè)國際標準在超過(guò)100 種不同的IC 上實(shí)現,而且得到超過(guò)50 家公司的許可,正因為其簡(jiǎn)單和應用廣泛,因此其功能也越來(lái)不滿(mǎn)足人們的要求,其速度也從原來(lái)的100Kbit/S,增加了快速模式,其速度達400Kbit/S,再后來(lái)也增加了高速模式,其速度更達3.4Mbit/S。
二.功能和特點(diǎn)
I2C總線(xiàn)是一種用于IC器件之間連接的雙向二線(xiàn)制總線(xiàn),所謂總線(xiàn)它上面可以?huà)於嗌倨骷,并且通個(gè)兩根線(xiàn)連接,占用空間非常的小,總線(xiàn)的長(cháng)度可高達25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。它的另一優(yōu)點(diǎn)是多主控,只要能夠進(jìn)行接收和發(fā)送的設備都可以成為主控制器,當然多個(gè)主控不能同一時(shí)間工作。
I2C總線(xiàn)有兩根信號線(xiàn),一根為SDA(數據線(xiàn)),一根為SCL(時(shí)鐘線(xiàn))。任何時(shí)候時(shí)鐘信號都是由主控器件產(chǎn)生。
I2C總線(xiàn)在傳送數據的過(guò)程中,主要有三種控制信號:起始信號,結不信號,應答信號
起始信號:當SCL為高電平時(shí),SDA由高電平轉為低電平時(shí),開(kāi)始傳送數據
結束信號:當SCL為高電平時(shí),SDA由低電平轉為高電平時(shí),結束數據傳送
應答信號:接收數據的器件在接收到8bit數據后,向發(fā)送數據的器件發(fā)出低電平信號,表示已收到數據。這個(gè)信號可以是主控器件發(fā)出,也可以是從動(dòng)器件發(fā)出?傊山邮諗祿钠骷l(fā)出。
這些信號中,起始信號是必需的,結束信號和應答信號,都可以不要。
三.基本操作
下面我們以ATMEL公司的AT24C02來(lái)介紹I2C的基本操作
AT24C02是美國ATMEL公司的低功耗CMOS串行EEPROM,它是內含256×8bit存儲空間,具有工作電壓寬(2.5~5.5V)、擦寫(xiě)次數多(大于10000次)、寫(xiě)入速度快(小于10ms)等特點(diǎn)。他在系統中始終為從動(dòng)器件。
對AT24C02的操作主要有:字節讀,字節寫(xiě),頁(yè)面讀,頁(yè)面寫(xiě)
首先發(fā)送起始信號,如下圖,起始信號后必須是控制字,

控制字格式如下,其中高四位為器件類(lèi)型識別符(不同的芯片類(lèi)型有不同的定義,EEPROM一般應為1010),接著(zhù)三位為片選,也就是三個(gè)地址位,最后一位為讀寫(xiě)控制位,當為1(Input)時(shí)為讀操作,為0(Output)時(shí)為寫(xiě)操作。

控制字后就是相應的操作,讀或寫(xiě),一定不要結束,因為這個(gè)操作還沒(méi)有完成,如果結束就等于放棄操作。
先來(lái)看寫(xiě)操作,寫(xiě)操作分為字節寫(xiě)和頁(yè)面寫(xiě)兩種操作,對于頁(yè)面寫(xiě)根據芯片的一次裝載的字節不同有所不同,AT24C02為8字節,每寫(xiě)一個(gè)字節后,地址自動(dòng)加1。關(guān)于頁(yè)面寫(xiě)的地址、應答和數據傳送的時(shí)序參見(jiàn)圖3,字節寫(xiě)可以看成是只有一個(gè)字節的頁(yè)面寫(xiě),也就是寫(xiě)一個(gè)數據后停止。注意:寫(xiě)一次需要一定時(shí)間,一般為10ms,要等侍這個(gè)操作完成。時(shí)序如下圖:
說(shuō)明:對于A(yíng)T24C02,在控制字后還必須寫(xiě)入地址,這個(gè)地址是以后讀寫(xiě)的起始地址。

讀操作有三種基本操作:當前地址讀、隨機讀和順序讀。三種操作方法類(lèi)似,只是讀的數據個(gè)數不同,可連續讀8個(gè)字節,圖4給出的是順序讀的時(shí)序圖,圖中共讀了四個(gè)數據,需要注意的是當前的地址,如果不是想要的,可以用寫(xiě)操作,重新寫(xiě)入地址。非常重要的是,每讀一個(gè)數據后,必須置低SDA,作為應答,否則,只能讀一個(gè)數據,后面的數據,因為收到不應答信號,AT24C02就會(huì )認為出錯,停止操作。特別提醒的是,當SCL為低電平時(shí),數據是可變的,因些只有SCL為高電平時(shí),才能讀數。
四.例程序(51匯編,測試單片機為AT89C51,12M晶振)

電路連接如圖5,其中A0,A1,A2為地址線(xiàn),本例中全部接地,因此全部為0。由于SCL和SDA為漏極開(kāi)路輸出,所以在使用時(shí),需加上拉電阻。
五 . 結束語(yǔ)
在I2C總線(xiàn)的應用中應注意的事項總結為以下幾點(diǎn) :
1) 嚴格按照時(shí)序圖的要求進(jìn)行操作,
2) 若與口線(xiàn)上帶內部上拉電阻的單片機接口連接,可以不外加上拉電阻。
3) 程序中為配合相應的傳輸速率,在對口線(xiàn)操作的指令后可用NOP指令加一定的延時(shí)。
4) 為了減少意外的干擾信號將EEPROM內的數據改寫(xiě)可用外部寫(xiě)保護引腳(如果有),或者在EEPROM內部沒(méi)有用的空間寫(xiě)入標志字,每次上電時(shí)或復位時(shí)做一次檢測,判斷EEPROM是否被意外改寫(xiě)。 |