1. 程式人生 > >IIC專題(一)——基礎知識準備

IIC專題(一)——基礎知識準備

這幾天看到原子哥 STM32 的 IIC 了,打算認真紮實的把 IIC 好好學一學,鞏固加強一下。以前在學校也弄過,但很多地方理解的不夠深刻,做事,學知識,不能淺嘗輒止,而要紮紮實實,搞明白原理,不斷實踐,不斷總結,才能有所提高,有所得。後續計劃從51,STM32,iTop4412 額Linux下來實現 IIC 驅動,結合工作中的需求,從不同外設來實現。

1.IIC簡介:

IIC 即 Inter-Integrated Circuit(積體電路匯流排),這種匯流排型別是由飛利浦半導體公司在八十年代初設計出來的,主要是用來連線整體電路(ICS) ,IIC 是一種多向控制匯流排,也就是說多個晶片可以連線到同一匯流排結構下,同時每個晶片都可以作為實時資料傳輸的控制源。這種方式簡化了訊號傳輸匯流排介面。

IIC 最初為音訊和視訊裝置開發,如今主要在伺服器管理中使用,其中包括單個元件狀態的通訊。例如管理員可對各個元件進行查詢,以管理系統的配置或掌握元件的功能狀態,如電源和系統風扇。可隨時監控記憶體、硬碟、網路、系統溫度等多個引數,增加了系統的安全性,方便了管理。

IIC 的主要構成只有兩個雙向的訊號線,一個是資料線 SDA,一個是時鐘線 SCL。

2.IIC的 特點:

  1. 具有多機功能,該模組既可以做主裝置也可以做為從裝置;

  2. IIC 主裝置功能,主要產生時鐘,產生起始訊號和停止訊號;

  3. IIC 從裝置功能,可程式設計的 IIC 地址檢測,每個電路和模組都有唯一的地址,停止位檢測;

  4. 序列8位雙向資料,支援不同速率的通訊速度,標準速度(最高速度 100kHZ ),快速(最高 400kHZ ),和高速模式(3.4 Mbps);

  5. 連線到相同匯流排的IC 數量只受到匯流排的最大電容 400pF 限制;

  6. 支援多主控模組,但同一時刻只允許有一個主控;

  7. SCL:上升沿將資料輸入到每個EEPROM器件中;下降沿驅動EEPROM器件輸出資料。(邊沿觸發)SDA:雙向資料線,為OD門,與其它任意數量的OD與OC門成”線與”關係。

  8. 匯流排的長度可高達25英尺(762cm),並且能夠以10Kbps的最大傳輸速率支援40個元件;

  9. IIC自動定址、高低速裝置同步和仲裁等功能的高效能序列匯流排,為半雙工通訊方式。

3.IO輸出結構

這裡寫圖片描述

每一個I2C匯流排器件內部的 SDA、SCL 引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩衝連在一起。其中輸出為漏極開路的場效電晶體,輸入緩衝為一隻高輸入阻抗的同相器,這種電路具有兩個特點:

(1)由於 SDA、SCL 為漏極開路結構(OD),只能輸出“0”,不能輸出“1”,因此它們必須接有上拉電阻,阻值的大小常為 1k8, 4k7 and 10k ,但1k8 時效能最好;當匯流排空閒時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使匯流排的訊號變低,即各器件的SDA及SCL都是線”與”關係。

(2)引腳在輸出訊號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致,為”時鐘同步”和”匯流排仲裁”提供了硬體基礎。

SCL線的時鐘同步:SCL由於具有線“與”的邏輯功能,即只要有一個節點傳送低電平時,總線上就表現為低電平。當所有的節點都發送高電平時,匯流排才能表現為高電平。正是由於線“與”邏輯功能的原理,當多個節點同時傳送時鐘訊號時,在總線上表現的是統一的時鐘訊號。

SDA線的仲裁:SDA線的仲裁也是建立在匯流排具有線“與”邏輯功能的原理上的。節點在傳送1位資料後,比較總線上所呈現的資料與自己傳送的是否一致。是,繼續傳送;否則,退出競爭。SDA線的仲裁可以保證I2C匯流排系統在多個主節點同時企圖控制匯流排時通訊正常進行並且資料不丟失。匯流排系統通過仲裁只允許一個主節點可以繼續佔據匯流排。

4.IIC總線上器件的連線

系統中的所有外圍器件都具有一個7位的”從器件專用地址碼”,其中高4位為器件型別,由生產廠家制定,低3位為器件引腳定義地址,由使用者定義。

這裡寫圖片描述

對於 10 位地址格式,必須傳送兩個位元組。前五位用來指定採用的是 10 位地址格式,傳送的第一個位元組中包括用於指定 10 位地址的 5 位以及地址的 兩個 MSb 和 1 個 R/W 位。第二個位元組是其餘的 8 位地址。

這裡寫圖片描述

主控器件通過地址碼建立多機通訊的機制,因此 I2C 匯流排省去了外圍器件的片選線,這樣無論總線上掛接多少個器件,其系統仍然為簡約的二線結構。終端掛載在總線上,有主端和從端之分,主端必須是帶有 CPU 的邏輯模組,在同一總線上同一時刻使能有一個主端,可以有多個從端,從端的數量受地址空間和匯流排的最大電容 400pF 的限制。

這裡寫圖片描述

當多個主機試圖去控制匯流排時,通過仲裁可以使得只有一個主機獲得匯流排控制權,並且它傳輸的資訊不被破壞。

相關概念介紹:

名稱 解釋
主機 初始化傳送,產生時鐘訊號和終止傳送的器件
從機 被主機定址的器件
傳送器 傳送資料到匯流排的器件
接收器 從匯流排接收資料的器件
仲裁 一個在有多個主機同時嘗試控制匯流排,只允許其中一個控制匯流排並使報文不被破壞
同步 兩個或多個器件同步時鐘訊號的過程

資料格式說明:

格式 表示
無資料 SCL=1,SDA=1
開始位(Start) 當SCL=1時,SDA由1向0跳變
停止位(Stop) 當SCL=1時,SDA由0向1跳變
資料位 當SCL由0向1跳變時,由傳送方控制SDA,此時SDA為有效資料,不可隨意改變SDA;當SCL保持為0時,SDA上的資料可隨意改變;
地址位 定義同資料位,但只由Master發給Slave
應答位(ACK) 當傳送方傳送完8位時,傳送方釋放SDA,由接收方控制SDA,且SDA=0
非應答位(NACK) 當傳送方傳送完8位時,傳送方釋放SDA,由接收方控制SDA,且SDA=1
單位元組傳送 開始位,8位地址位(含1位讀寫位),應答,8位資料,應答,停止位
一串位元組傳送 開始位,8位地址位(含1位讀寫位),應答,8位資料,應答,8位資料,應答,……,8位資料,應答,停止位

5.I2C協議

(1)空閒狀態

I2C匯流排匯流排的SDA和SCL**兩條訊號線同時處於高電平時,規定為匯流排的空閒狀態。此時各個器件的輸出級場效電晶體均處在截止狀態,即釋放匯流排,由兩條訊號線各自的上拉電阻把電平拉高。**

(2)起始訊號與停止訊號

起始訊號:SCL為高期間,SDA由高到低的跳變;啟動訊號是一種電平跳變時序訊號,而不是一個電平訊號。

停止訊號:SCL為高期間,SDA由低到高的跳變;停止訊號也是一種電平跳變時序訊號,而不是一個電平訊號。

這裡寫圖片描述

(3)應答訊號ACK

傳送器每傳送一個位元組,就在時鐘脈衝9期間釋放資料線,由接收器反饋一個應答訊號應答訊號為低電平時,規定為有效應答位(ACK簡稱應答位),表示接收器已經成功地接收了該位元組;應答訊號為高電平時,規定為非應答位(NACK),一般表示接收器接收該位元組沒有成功。

對於反饋有效應答位ACK的要求是,接收器在第9個時鐘脈衝之前的低電平期間將SDA線拉低,並且確保在該時鐘的高電平期間為穩定的低電平。 如果接收器是主控器,則在它收到最後一個位元組後,傳送一個NACK訊號,以通知被控傳送器結束資料傳送,並釋放SDA線,以便主控接收器傳送一個停止訊號P。

這裡寫圖片描述

(4)資料有效性

I2C匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。

即:資料在SCL的上升沿到來之前就需準備好。並在在下降沿到來之前必須穩定。

這裡寫圖片描述

資料傳輸:先發送起始位,再發一個8bit資料:前7bit表示從地址,第8bit表示讀或者寫。0 write是處理器往IIC從裝置發1 read是IIC從裝置往處理器發。第9個時鐘週期回覆響應訊號。

這裡寫圖片描述

(5)資料的傳送

IIC 資料從最高位(MSB)開始傳輸,傳送到SDA線上的資料必須是8位的,每一個被傳送的位元組後面都必須跟隨一位應答位(即一幀共有9位),傳送器傳送完 LSB 之後,應當釋放 SDA 線(拉高 SDA,輸出電晶體截止) ,以等待接收器產生應答位。在 IIC 總線上傳送的每一位資料都有一個時鐘脈衝相對應(或同步控制),即在SCL序列時鐘的配合下,在SDA上逐位地序列傳送每一位資料資料位的傳輸是邊沿觸發。

典型時序:

這裡寫圖片描述

完整的資料傳送:

這裡寫圖片描述

eg:傳輸 1011 0110

這裡寫圖片描述

應答位的時鐘脈衝仍由主機產生,而應答位的資料狀態則遵循“誰接收誰產生”的原則,即總是由接收器產生應答位。主機向從機發送資料時,應答位由從機產生;主機從從機接收資料時,應答位由主機產生。

在切換資料的傳輸方向時,可以不必先產生停止條件再開始下次傳輸,而是直接再一次產生開始條件。I2C 匯流排在已經處於忙的狀態下,再一次直接產生起始條件的情況被稱為重複起始條件。

6.讀寫資料過程

寫通訊過程:

1. 主控在檢測到匯流排空閒的狀況下,首先發送一個START訊號掌管匯流排; 

2. 傳送一個地址位元組(包括7位地址碼和一位R/W);

3. 當被控器件檢測到主控傳送的地址與自己的地址相同時傳送一個應答訊號(ACK);

4. 主控收到ACK後開始傳送第一個資料位元組;

5. 被控器收到資料位元組後傳送一個ACK表示繼續傳送資料,傳送NACK表示傳送資料結束;

6. 主控傳送完全部資料後,傳送一個停止位STOP,結束整個通訊並且釋放匯流排;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

當寫資料的時候,Master每傳送完8個數據位,Slave裝置如果還有空間接受下一個位元組應該回答“ACK”,Slave裝置如果沒有空間接受更多的位元組應該回答“NACK”,Master當收到“NACK”或者一定時間之後沒收到任何資料將視為超時,此時Master放棄資料傳送,傳送“Stop”。

讀通訊過程:

1. 主控在檢測到匯流排空閒的狀況下,首先發送一個START訊號掌管匯流排;

2. 傳送一個地址位元組(包括7位地址碼和一位R/W);

3. 當被控器件檢測到主控傳送的地址與自己的地址相同時傳送一個應答訊號(ACK);

4. 主控收到ACK後釋放資料匯流排,開始接收第一個資料位元組;

5. 主控收到資料後傳送ACK表示繼續傳送資料,傳送NACK表示傳送資料結束;

6. 主控傳送完全部資料後,傳送一個停止位STOP,結束整個通訊並且釋放匯流排;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

當讀資料的時候,Slave 裝置每傳送完 8 個數據位,如果 Master 希望繼續讀下一個位元組,Master 應該回答“ACK”以提示Slave準備下一個數據,如果Master不希望讀取更多位元組,Master應該回答“NACK”以提示Slave裝置準備接收Stop訊號。

主控器向被控器傳送的資訊種類有:啟動訊號、停止訊號、7位地址碼、讀/寫控制位、10位地址碼、資料位元組、重啟動訊號、應答訊號、時鐘脈衝。

被控器向主控器傳送的資訊種類有:應答訊號、資料位元組、時鐘低電平。

注:SCL一直由Master控制,SDA依照資料傳送的方向,讀資料時由Slave控制SDA,寫資料時由Master控制SDA。當 8 位資料傳送完畢之後,應答位或者否應答位的SDA控制權與資料位傳送時相反。

註明:以上大部分資料均來自網路總結,參考處註明。

參考: