i2c協議的特點是什么,老司機帶你深入了解
時間:2018-04-20作者:華清遠見
I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根線(一根數據線SDA,一根時鐘線SCL)即可在連接于總線上的器件之間傳送信息。 在I2C總線中, 各部分器件如下: 主機初始化發送,產生時鐘信號和終止發送的器件 從器件被主機尋址的器件 發送器發送數據到總線的器件 接收器從總線接收數據的器件 多主機同時有多于一個主機嘗試控制總線但不破壞報文 仲裁是一個在有多個主機同時嘗試控制總線,但只允許其中一個控制總線并使報文不被破壞的過程 同步兩個或多個器件同步時鐘信號的過程 主機用于啟動總線傳送數據,并產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恒定的,而取決于此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然后主動發送數據至從器件,最后由主機終止數據傳送;如果主機要接收從器件的數據,首先由主機尋址從器件.然后主機接收從器件發送的數據,最后由主機終止接收過程。在這種情況下.主機負責產生定時時鐘和終止數據傳送。 I2C協議有如下幾個特點: 1.在硬件上,I2C總線只需要一根數據線和一根時鐘線兩根線,總線接口已經集成在芯片內部,不需要特殊的接口電路,而且片上接口電路的濾波器可以濾去總線數據上的毛刺.因此I2C總線簡化了硬件電路PCB布線,降低了系統成本,提高了系統可靠性。因為I2C芯片除了這兩根線和少量中斷線,與系統再沒有連接的線,用戶常用I2C可以很容易形成標準化和模塊化,便于重復利用。 2.發送到SDA 線上的每個字節必須為8 位,每次傳輸可以發送的字節數量不受限制。每個字節后必須跟一個響應位。首先傳輸的是數據的最高位(MSB),如果從機要完成一些其他功能后(例如一個內部中斷服務程序)才能接收或發送下一個完整的數據字節,可以使時鐘線SCL 保持低電平,迫使主機進入等待狀態,當從機準備好接收下一個數據字節并釋放時鐘線SCL 后數據傳輸繼續。 3. I2C總線是一個真正的多主機總線,如果兩個或多個主機同時初始化數據傳輸,可以通過沖突檢測和仲裁防止數據破壞,每個連接到總線上的器件都有唯一的地址,任何器件既可以作為主機也可以作為從機,但同一時刻只允許有一個主機。數據傳輸和地址設定由軟件設定,非常靈活。總線上的器件增加和刪除不影響其他器件正常工作。 4. I2C總線上的每一個設備都可以作為主設備或者從設備,而且每一個設備都會對應一個唯一的地址(可以從I2C器件的數據手冊得知),主從設備之間就通過這個地址來確定與哪個器件進行通信,在通常的應用中,我們把CPU帶I2C總線接口的模塊作為主設備,把掛接在總線上的其他設備都作為從設備。 I2C協議規定,總線上數據的傳輸必須以一個起始信號作為開始條件,以一個結束信號作為傳輸的停止條件。起始和結束信號總是由主設備產生。總線在空閑狀態時,SCL和SDA都保持著高電平,當SCL為高電平而SDA由高到低的跳變,表示產生一個起始條件;當SCL為高而SDA由低到高的跳變,表示產生一個停止條件。在起始條件產生后,總線處于忙狀態,由本次數據傳輸的主從設備獨占,其他I2C器件無法訪問總線;而在停止條件產生后,本次數據傳輸的主從設備將釋放總線,總線再次處于空閑狀態。 I2C的通訊都由主機發起,clk為高電平時,sda從高到低; 從器件發現這樣一組信號,就認為主機要開始操作自己了,做好接收的準備工作。主機發送了開始位后,把clk拉低,只有clk拉低,sda才可以做高低變化; 當clk被拉高時,從器件就會去讀取sda的高低電平值;clk再次被拉低時,從器件認為此位已讀取完畢,認為是有效位,等待clk再次拉高,讀取下一位。 主機發送完8位后,第9位是校驗位,讀取到低電平為有效;主設備把clk拉低,sdaio換成輸入模式(上拉電阻,默認高電平)讀取第9位,clk再次拉高,讀取從設備發來的校驗位。 如圖所示時序圖
對I2C總線的操作實際就是主從設備之間的讀寫操作。大致可分為以下三種操作情況: 第一種,主設備往從設備中寫數據。數據傳輸格式如下:
第二種,主設備從從設備中讀數據。數據傳輸格式如下:
第三種,主設備往從設備中寫數據,然后重啟起始條件,緊接著從從設備中讀取數據;或者是主設備從從設備中讀數據,然后重啟起始條件,緊接著主設備往從設備中寫數據。數據傳輸格式如下:
第三種操作在單個主設備系統中,重復的開啟起始條件機制要比用STOP終止傳輸后又再次開啟總線更有效率。 相關資訊
發表評論
|