<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

            0引言

          本文引用地址:http://www.ex-cimer.com/article/82352.htm

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

            1 I2C總線基本原理

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

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

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

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

                 

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

                 

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

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

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

                 

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

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

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

            對AT24C02讀操作的初始化方式和寫操作時一樣,僅把R/W位置為1。圖6所示為AT24C02隨機(jī)地址讀時序圖。隨機(jī)讀操作允許主器件對寄存器的任意字節(jié)進(jìn)行讀操作,主器件首先通過發(fā)送起始信號、從器件地址和它想讀取的字節(jié)數(shù)據(jù)的地址執(zhí)行一個偽寫操作。在AT24C02應(yīng)答之后,主器件重新發(fā)送起始信號和從器件地址,此時R/W位置1,AT24C02響應(yīng)并發(fā)送應(yīng)答信號,然后輸出所要求的一個8位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號但產(chǎn)生一個停止信號。

                  
           
            3 I2C-Master Core工作原理

            基于NiosⅡ的IP核應(yīng)用非常簡便,因此越發(fā)受到青睞。Altera公司已經(jīng)提供了一些通用的IP核可供使用,但沒有提供I2C核。文獻(xiàn)[3]提供了免費(fèi)的I2C-Master Core,經(jīng)筆者的應(yīng)用與長時間測試,證明該Mas-ter Core使用方便可靠,工作穩(wěn)定。該Master Core的內(nèi)部結(jié)構(gòu)如圖7所示,主要由時鐘發(fā)生器、字節(jié)命令控制器、比特命令發(fā)生器和數(shù)據(jù)移位寄存器4個模塊組成。其他模塊是一些相關(guān)接口和臨時數(shù)據(jù)存儲器。
           
                

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


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

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

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

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

            數(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ì)使用提供了一種簡單快捷的方法。

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


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

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();