⑴ iic匯流排實現雙機通信,求接線圖和原理
IIC匯流排在沒有總裁模式的前提下,只能實現主從通信。也就是主機可以隨時向從機發送數據,但只能等主機訪問才能從機才能應答。這個是標准IIC協議。不知道符不符合你對雙機通信的要求。電路圖很簡單,只用連上2條上,上拉個電阻就可以啦。IIC通信的原理參考飛利浦的標准,兩線特定的狀態實現數據傳輸開始,應答,結束等等,多看看時序圖就了解啦。
但是大多數的51單片機不帶硬體IIC模塊,我們可以用軟體來模擬。我只寫過主機的模擬IIC程序,從機的沒寫過。從機程序51實現難度很大,也不實用。機制問題,從機響應如不能用中斷實現,只能一直讓程序在查詢,實現起來沒什麼意義。如果你的51帶管腳電平變化中斷,可以去嘗試下。
⑵ I2C通信協議的原理是什麼,時序圖是怎樣的
作 者:■ 西安電子科技大學 鄭旭陽 李兵兵 黃新平
摘要:介紹模擬I2C匯流排的多主節點通信原理,並提出一種新的實現方法。這種採用延時接收比較來實現仲裁的方法,可使不具有I2C介面的普通微控制器(MCU)能夠實現模擬I2C匯流排的多主通信,同時對I2C匯流排的推廣起到了積極作用。
關鍵詞:模擬I2C匯流排 仲裁 多主通信
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」與發送應答位和非應答位時序圖是相同的。
圖2表示了一個完整的數據傳送過程。在I2C匯流排發送起始信號後,發送從機的7位定址地址和1位表示這次操作性質的讀寫位,在有應答信號後開始傳送數據,直到發送停止信號。數據是以位元組為單位的。發送節點每發送1個位元組就要檢測SDA線上有沒有收到應答信號,有則繼續發送,否則將停止發送數據。
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線上的數據。因此在仲裁過程中數據沒有丟失。