新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Nios II的I2C總線接口的實(shí)現(xiàn)

基于Nios II的I2C總線接口的實(shí)現(xiàn)

作者:馬金嶺,劉桂敏,李洪波,李玉光 時(shí)間:2008-05-09 來源:《電子工程師》 收藏

  0引言

本文引用地址:http://www.butianyuan.cn/article/82352.htm

  (Inter-Integrated Circuit)總線是一種由Phil-ips公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。由于總線僅用兩根信號(hào)線,并支持多主控工作方式,所以總線在電子產(chǎn)品設(shè)備中應(yīng)用非常普遍。文獻(xiàn)[1]使用Ⅱ的PIO接口模擬I2C時(shí)序完成對(duì)接口芯片的讀寫,而目前基于Ⅱ的IP核越發(fā)豐富?;诖?,本文使用免費(fèi)的IP核--I2C-Master Core,實(shí)現(xiàn)了對(duì)I2C接口芯片的讀寫操作,擴(kuò)充了一種新的設(shè)計(jì)方法。本文首先介紹了I2C總線結(jié)構(gòu)和工作原理,然后詳細(xì)說明了基于Ⅱ的I2C-Master Core的使用方法,最后給出了的編程代碼。

  1 I2C總線基本原理

  I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、進(jìn)行雙向傳送,最高傳送速度100 kbit/s。

  I2C總線在傳送數(shù)據(jù)的過程中共有4種基本類型信號(hào),分別是:開始信號(hào)、數(shù)據(jù)傳輸信號(hào)、應(yīng)答信號(hào)和結(jié)束信號(hào)。

  a)開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。所有的命令都必須在開始條件以后進(jìn)行。

  b)結(jié)束信號(hào):SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。所有的操作都必須在停止條件以前結(jié)束??偩€開始和停止數(shù)據(jù)傳送的時(shí)序如圖1所示。

       

  c)數(shù)據(jù)傳輸信號(hào):在開始條件以后,時(shí)鐘信號(hào)SCL的高電平周期期問,當(dāng)數(shù)據(jù)線穩(wěn)定時(shí),數(shù)據(jù)線SDA的狀態(tài)表示數(shù)據(jù)有效,即數(shù)據(jù)可以被讀走,開始進(jìn)行讀操作。在時(shí)鐘信號(hào)SCL的低電平周期期間,數(shù)據(jù)線上數(shù)據(jù)才允許改變。每位數(shù)據(jù)需要一個(gè)時(shí)鐘脈沖。I2C總線的數(shù)據(jù)位傳送時(shí)序如圖2所示。

       

  d)應(yīng)答信號(hào):接收數(shù)據(jù)的從器件收到8 bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的主控器件發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。這要求主器件必須產(chǎn)生一個(gè)與確認(rèn)位相應(yīng)的額外時(shí)鐘脈沖(第9個(gè)脈沖)。若主控器件確認(rèn)失敗,主控器件必須發(fā)送一個(gè)數(shù)據(jù)結(jié)束信號(hào)給從器件。這時(shí)從器件必須使SDA線保持高電平,使主控器件能產(chǎn)生停止條件??偩€的應(yīng)答信號(hào)時(shí)序見圖3。
 
           

  2 I2C接口芯片AT24C01/02工作原理

  AT24CXX系列芯片是采用I2C總線標(biāo)準(zhǔn)的常用的串行EEROM芯片。本文以AT24C02為例介紹。AT24C02具有256×8(2 k)bit的存儲(chǔ)容量,即總共32頁,每頁有8字節(jié)的容量。每次寫入數(shù)據(jù)是從主器件發(fā)送來的片內(nèi)選擇地址開始寫人,如果寫到頁末尾,主器件還在繼續(xù)發(fā)送的話,不會(huì)自動(dòng)轉(zhuǎn)到下一頁,而是從該頁的頭地址開始繼續(xù)寫入,覆蓋該頁的原有數(shù)據(jù),而造成數(shù)據(jù)丟失。AT24C02工作于從器件方式,它的地址由外圍的3個(gè)引腳A2、A1、A0決定,如圖4所示。在I2C總線上總共可以連接8個(gè)AT24C02接口芯片,每個(gè)器件硬件地址與控制寄存器的地址內(nèi)容保持一致,就能夠自由地與主控器件進(jìn)行數(shù)據(jù)傳輸。

       

  1)器件字節(jié)寫操作

  在字節(jié)寫模式下,發(fā)送器件寫控制字,控制字包括4位固定器件碼,3位片選碼,以及一位低電平的寫控制位。主器件在收到從器件產(chǎn)生應(yīng)答信號(hào)后,主器件發(fā)送一個(gè)8位字節(jié)地址寫入AT24C02。主器件在收到從器件的另一個(gè)應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。AT24C02再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中,AT24C02不再應(yīng)答主器件的任何請(qǐng)求。時(shí)序見圖5。

        
 
  2)器件隨機(jī)地址讀操作

  對(duì)AT24C02讀操作的初始化方式和寫操作時(shí)一樣,僅把R/W位置為1。圖6所示為AT24C02隨機(jī)地址讀時(shí)序圖。隨機(jī)讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作,主器件首先通過發(fā)送起始信號(hào)、從器件地址和它想讀取的字節(jié)數(shù)據(jù)的地址執(zhí)行一個(gè)偽寫操作。在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)。

        
 
  3 I2C-Master Core工作原理

  基于NiosⅡ的IP核應(yīng)用非常簡(jiǎn)便,因此越發(fā)受到青睞。Altera公司已經(jīng)提供了一些通用的IP核可供使用,但沒有提供I2C核。文獻(xiàn)[3]提供了免費(fèi)的I2C-Master Core,經(jīng)筆者的應(yī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ǔ)器。
 
      

  時(shí)鐘發(fā)生器主要是產(chǎn)生SCL信號(hào),該時(shí)鐘的頻率可由預(yù)分頻寄存器設(shè)置,控制子計(jì)算公式如下:
      


  例如:SCL頻率為100kHz,NiosⅡ工作頻率為50 MHz,則預(yù)分頻=99,PRERlo=99,PRERhi=0。

        
 
  字節(jié)命令控制器在字節(jié)級(jí)連接命令寄存器、狀態(tài)寄存器和比特命令控制器。通過將表2所示命令寄存器相應(yīng)的比特位置1,可以產(chǎn)生I2C接口的開始、結(jié)束、確認(rèn)等信號(hào),以及讀寫控制。這些有效控制通過字節(jié)命令控制器轉(zhuǎn)送到比特命令控制器,使其發(fā)生作用,在信號(hào)產(chǎn)生后,這些比特位自動(dòng)清0。

  NiosⅡ向發(fā)送寄存器寫數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)輸出,讀接收寄存器獲取從器件輸出的數(shù)據(jù)。數(shù)據(jù)的讀寫是否完成可通過中斷或查詢方式得知。如采用中斷方式,狀態(tài)寄存器中的IF狀態(tài)位置1;如采用查詢方式,數(shù)據(jù)處理過程中,狀態(tài)位TIP置1,處理完畢后置1。

  4應(yīng)用實(shí)例

  筆者在NiosⅡIDE7.1環(huán)境下編寫了使用該Mas-ter Core的代碼,現(xiàn)把部分主程序代碼列出。

  1)IP-Master Core初始化

  完成對(duì)預(yù)分頻器的設(shè)置,確定SCL時(shí)鐘頻率;控制寄存器中I2C-Master Core使能位置1,使其工作。
 
  

  2)查詢確認(rèn)信號(hào)

  數(shù)據(jù)收發(fā)是否完成,通過查詢TIP狀態(tài)位來確定。

  

  3)寫字節(jié)操作

  單字節(jié)寫入按圖5操作流程:
 
  

  4)隨即地址讀操作

  隨即地址讀字節(jié)按圖6流程操作:
 
  

  以上是使用I2C-Master Core的關(guān)鍵代碼,若向地址0xS0寫入0x5A,再將其讀出,可按下面寫法:
  
  

  若操作正確,DATA的值應(yīng)該位為0x5A。

  5結(jié)束語

本文探討了使用免費(fèi)I2C-Master Core的方法,方便地實(shí)現(xiàn)了基于Nios Ⅱ的I2C接口芯片的開發(fā),為I2C的電子工程設(shè)計(jì)使用提供了一種簡(jiǎn)單快捷的方法。

分頻器相關(guān)文章:分頻器原理


關(guān)鍵詞: Nios I2C 總線接口 C語言

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉