a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 手機與無線通信 > 設計應用 > 模擬I2C總線多主節點通信原理及實現方法

模擬I2C總線多主節點通信原理及實現方法

作者: 時間:2010-12-14 來源:網絡 收藏

摘要 介紹的多主,并提出一種新的。這種采用延時接收比較來仲裁的,可使不具有接口的普通微控制器(MCU)能夠的多主,同時對I2C的推廣起到了積極作用。

本文引用地址:http://www.j9360.com/article/156877.htm

  I2C總線(Inter IC BUS)是PHILIPS公司推出的雙向兩線串行標準。由于它具有接口少、通信效率高等優點,現已得到廣泛的應用[1~3]。它除了可以進行簡單的單主通信外,還可以應用在多主的通信系統中。在多主節點通信系統中,如果兩個或者更多的主節點同時啟動數據傳輸,總線具有沖突檢測和仲裁功能,保證通信正常進行并防止數據破壞。現在許多微控制器(MCU)都具有I2C總線接口,能方便地進行I2C總線設計。對于沒有I2C總線接口的MCU,可以采用兩條I/O接口線進行[2,3]。目前,一些介紹模擬I2C的資料主要講的是在單主節點系統中進行的通信,這使得模擬I2C總線的應用具有一定的局限性。本文根據總線仲裁的思想,提出一種多主節點通信的思想及實現流程。

  1 I2C總線系統簡介[1~3]

  I2C總線系統是由SCL(串行時鐘)和SDA(串行數據)兩根總線構成的。該總線有嚴格的時序要求,總線工作時,由串行時鐘線SCL傳送時鐘脈沖,由串行數據線SDA傳送數據。總線協議規定,各主節點進行通信時都要有起始、結束、發送數據和應答信號。這些信號都是通信過程中的基本單元。總線傳送的每1幀數據均是1個字節,每當發送完1個字節后,接收節點就相應給一應答信號。協議規定,在啟動總線后的第1個字節的高7位是對從節點的尋址地址,第8位為方向位(“0”表示主節點對從節點的寫操作;“1”表示主節點對從節點的讀操作),其余的字節為操作數據。圖1列出I2C總線上幾個基本信號的時序。

  圖1中包括起始信號、停止信號、應答信號、非應答信號以及傳輸數據“0”和數據“1”的時序。起始信號就是在SCL線為高時SDA線從高變化到低;停止信號就是在SCL線為高時SDA線從低變化到高;應答信號是在SCL為高時SDA為低;非應答信號相反,是在SCL為高時SDA為高。傳輸數據“0”和數據“1”與發送應答位和非應答位時序圖是相同的。


  圖1 I2C總線上基本信號的時序

  圖2表示了一個完整的數據傳送過程。在I2C總線發送起始信號后,發送從機的7位尋址地址和1位表示這次操作性質的讀寫位,在有應答信號后開始傳送數據,直到發送停止信號。數據是以字節為單位的。發送節點每發送1個字節就要檢測SDA線上有沒有收到應答信號,有則繼續發送,否則將停止發送數據。


  圖2 一次完整的數據傳送過程

  2 I2C總線的仲裁

  在多主的通信系統中。總線上有多個節點,它們都有自己的尋址地址,可以作為從節點被別的節點訪問,同時它們都可以作為主節點向其他的節點發送控制字節和傳送數據。但是如果有兩個或兩個以上的節點都向總線上發送啟動信號并開始傳送數據,這樣就形成了沖突。要解決這種沖突,就要進行仲裁的判決,這就是I2C總線上的仲裁。

  I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。SCL同步是由于總線具有線“與”的邏輯功能,即只要有一個節點發送低電平時,總線上就表現為低電平。當所有的節點都發送高電平時,總線才能表現為高電平。正是由于線“與”邏輯功能的,當多個節點同時發送時鐘信號時,在總線上表現的是統一的時鐘信號。這就是SCL的同步

  SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節點在發送1位數據后,比較總線上所呈現的數據與自己發送的是否一致。是,繼續發送;否則,退出競爭。圖3中給出了兩個節點在總線上的仲裁過程。SDA線的仲裁可以保證I2C總線系統在多個主節點同時企圖控制總線時通信正常進行并且數據不丟失。總線系統通過仲裁只允許一個主節點可以繼續占據總線[1]。

  圖3是以兩個節點為例的仲裁過程。DATA1和DATA2分別是主節點向總線所發送的數據信號,SDA為總線上所呈現的數據信號,SCL是總線上所呈現的時鐘信號。當主節點1、2同時發送起始信號時,兩個主節點都發送了高電平信號。這時總線上呈現的信號為高電平,兩個主節點都檢測到總線上的信號與自己發送的信號相同,繼續發送數據。第2個時鐘周期,2個主節點都發送低電平信號,在總線上呈現的信號為低電平,仍繼續發送數據。在第3個時鐘周期,主節點1發送高電平信號,而主節點2發送低電平信號。根據總線的線“與”的邏輯功能,總線上的信號為低電平,這時主節點1檢測到總線上的數據和自己所發送的數據不一樣,就斷開數據的輸出級,轉為從機接收狀態。這樣主節點2就贏得了總線,而且數據沒有丟失,即總線的數據與主節點2所發送的數據一樣,而主節點1在轉為從節點后繼續接收數據,同樣也沒有丟掉SDA線上的數據。因此在仲裁過程中數據沒有丟失。


  圖3 兩個主節點的仲裁過程

  3 多主通信的原理及其實現流程

  多主通信就是在總線上有多個節點。這些節點既可以作為主節點訪問其他的節點,也可以作為從節點被其他節點訪問。當有多個節點同時企圖占用總線時,就需要總線的仲裁。對于模擬I2C總線系統,怎樣實現總線的仲裁是現在研究模擬I2C總線系統的難點。文獻[4]提出在系統中增加1根BUSY線,在占用總線之前先檢測BUSY線,看總線是否被占用。若總線空閑,則設置BUSY線并向總線上傳送數據;否則,接收數據,直到總線空閑時才占有總線。這種實現多主通信的有兩個缺點:① 因為I2C最大的優點就是接口少、效率高,這樣做不僅增加了使用資源而且減少了I2C總線的優勢;② 當主節點數比較多時,等待時間比較長,效率不高。本設計根據總線的仲裁原理,提出一種基于延時比較的仲裁方法。當主節點想要占用總線時,先檢測總線上是否空閑,如果總線是空閑的就發送數據。在發送數據的同時,將總線上的數據接收并與發送的數據進行比較。如果不同,說明總線上同時還存在其他節點,于是就退出;否則,一直到發送完數據。這種方法既體現了I2C總線的高效性,同時還具有良好的擴展性。


  圖4 多主通信流程

  圖4給出了基于延時比較的多主通信流程,其中MCU作為從節點部分的流程在圖5中給出。在節點發送起始信號之前先要檢測一下總線上是否為空閑狀態(BUSY是否為0)。這里使用的檢測方法是,持續檢測一段時間看總線上的電平是否一直為高,若是說明總線上為閑狀態,否則說明有其他的節點正在使用總線,要等一段時間再發送。當總線空閑時,發送起始信號,接著發送要訪問的從節點的地址字節。每發送1位數據就接收比較1次,看發送和接收的是否一致,若是則繼續,否則跳出到從節點的接收狀態。如果沒有產生沖突,MCU作為主節點繼續發送數據,直到任務結束,然后發送停止信號并返回。如果數據不一樣,MCU將跳轉到從節點狀態。由于在跳轉到從節點接收狀態的過程中累加器(ACC)和工作寄存器(Ri)的數據沒有發生變化,所以數據沒有丟失,作為從節點可以繼續接收總線上的數據。這樣整個通信的過程沒有中斷,數據也沒有丟失。


  圖5 從節點部分的流程


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉