0引言
I2C(Inter-Integrated Circuit)總線(xiàn)是一種由Phil-ips公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其外圍設(shè)備。由于I2C總線(xiàn)僅用兩根信號(hào)線(xiàn),并支持多主控工作方式,所以I2C總線(xiàn)在電子產(chǎn)品設(shè)備中應(yīng)用非常普遍。文獻(xiàn)[1]使用NiosⅡ的PIO接口模擬I2C時(shí)序完成對(duì)接口芯片的讀寫(xiě),而目前基于NiosⅡ的IP核越發(fā)豐富;诖,本文使用免費(fèi)的IP核--I2C-Master Core,實(shí)現(xiàn)了對(duì)I2C接口芯片的讀寫(xiě)操作,擴(kuò)充了一種新的設(shè)計(jì)方法。本文首先介紹了I2C總線(xiàn)結(jié)構(gòu)和工作原理,然后詳細(xì)說(shuō)明了基于NiosⅡ的I2C-Master Core的使用方法,最后給出了C語(yǔ)言的編程代碼。
1 I2C總線(xiàn)基本原理
I2C總線(xiàn)是由數(shù)據(jù)線(xiàn)SDA和時(shí)鐘SCL構(gòu)成的串行總線(xiàn),可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、進(jìn)行雙向傳送,最高傳送速度100 kbit/s。
I2C總線(xiàn)在傳送數(shù)據(jù)的過(guò)程中共有4種基本類(lèi)型信號(hào),分別是:開(kāi)始信號(hào)、數(shù)據(jù)傳輸信號(hào)、應(yīng)答信號(hào)和結(jié)束信號(hào)。
a)開(kāi)始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開(kāi)始傳送數(shù)據(jù)。所有的命令都必須在開(kāi)始條件以后進(jìn)行。
b)結(jié)束信號(hào):SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。所有的操作都必須在停止條件以前結(jié)束。總線(xiàn)開(kāi)始和停止數(shù)據(jù)傳送的時(shí)序如圖1所示。
![]() |
c)數(shù)據(jù)傳輸信號(hào):在開(kāi)始條件以后,時(shí)鐘信號(hào)SCL的高電平周期期問(wèn),當(dāng)數(shù)據(jù)線(xiàn)穩(wěn)定時(shí),數(shù)據(jù)線(xiàn)SDA的狀態(tài)表示數(shù)據(jù)有效,即數(shù)據(jù)可以被讀走,開(kāi)始進(jìn)行讀操作。在時(shí)鐘信號(hào)SCL的低電平周期期間,數(shù)據(jù)線(xiàn)上數(shù)據(jù)才允許改變。每位數(shù)據(jù)需要一個(gè)時(shí)鐘脈沖。I2C總線(xiàn)的數(shù)據(jù)位傳送時(shí)序如圖2所示。
![]() |
![]() |
AT24CXX系列芯片是采用I2C總線(xiàn)標(biāo)準(zhǔn)的常用的串行EEROM芯片。本文以AT24C02為例介紹。AT24C02具有256×8(2 k)bit的存儲(chǔ)容量,即總共32頁(yè),每頁(yè)有8字節(jié)的容量。每次寫(xiě)入數(shù)據(jù)是從主器件發(fā)送來(lái)的片內(nèi)選擇地址開(kāi)始寫(xiě)人,如果寫(xiě)到頁(yè)末尾,主器件還在繼續(xù)發(fā)送的話(huà),不會(huì)自動(dòng)轉(zhuǎn)到下一頁(yè),而是從該頁(yè)的頭地址開(kāi)始繼續(xù)寫(xiě)入,覆蓋該頁(yè)的原有數(shù)據(jù),而造成數(shù)據(jù)丟失。AT24C02工作于從器件方式,它的地址由外圍的3個(gè)引腳A2、A1、A0決定,如圖4所示。在I2C總線(xiàn)上總共可以連接8個(gè)AT24C02接口芯片,每個(gè)器件硬件地址與控制寄存器的地址內(nèi)容保持一致,就能夠自由地與主控器件進(jìn)行數(shù)據(jù)傳輸。
![]() |
在字節(jié)寫(xiě)模式下,發(fā)送器件寫(xiě)控制字,控制字包括4位固定器件碼,3位片選碼,以及一位低電平的寫(xiě)控制位。主器件在收到從器件產(chǎn)生應(yīng)答信號(hào)后,主器件發(fā)送一個(gè)8位字節(jié)地址寫(xiě)入AT24C02。主器件在收到從器件的另一個(gè)應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。AT24C02再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后開(kāi)始內(nèi)部數(shù)據(jù)的擦寫(xiě),在內(nèi)部擦寫(xiě)過(guò)程中,AT24C02不再應(yīng)答主器件的任何請(qǐng)求。時(shí)序見(jiàn)圖5。
![]() |
對(duì)AT24C02讀操作的初始化方式和寫(xiě)操作時(shí)一樣,僅把R/W位置為1。圖6所示為AT24C02隨機(jī)地址讀時(shí)序圖。隨機(jī)讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作,主器件首先通過(guò)發(fā)送起始信號(hào)、從器件地址和它想讀取的字節(jié)數(shù)據(jù)的地址執(zhí)行一個(gè)偽寫(xiě)操作。在AT24C02應(yīng)答之后,主器件重新發(fā)送起始信號(hào)和從器件地址,此時(shí)R/W位置1,AT24C02響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出所要求的一個(gè)8位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號(hào)但產(chǎn)生一個(gè)停止信號(hào)。
![]() |
基于NiosⅡ的IP核應(yīng)用非常簡(jiǎn)便,因此越發(fā)受到青睞。Altera公司已經(jīng)提供了一些通用的IP核可供使用,但沒(méi)有提供I2C核。文獻(xiàn)[3]提供了免費(fèi)的I2C-Master Core,經(jīng)筆者的應(yīng)用與長(zhǎng)時(shí)間測(cè)試,證明該Mas-ter Core使用方便可靠,工作穩(wěn)定。該Master Core的內(nèi)部結(jié)構(gòu)如圖7所示,主要由時(shí)鐘發(fā)生器、字節(jié)命令控制器、比特命令發(fā)生器和數(shù)據(jù)移位寄存器4個(gè)模塊組成。其他模塊是一些相關(guān)接口和臨時(shí)數(shù)據(jù)存儲(chǔ)器。











