1、IIC協議的誕生
IIC協議最早1982年由飛利浦公司設計開發,是一種兩線制(SDA + SCL)的串行通行方式,提供了主從機之間通行的一種方案,在今天也是被廣泛的應用在很多的產品設備上。
一個使用IIC協議進行通信的設備,它既可以作為主機又可以作為從機(支持多主多從),并且它是一種半雙工的通信方式。
IIC可以支持的通信速率范圍較大,可以很好的滿足多種設備的不同的通信速度的要求,它支持的速率有如下幾個:
1)普通模式(100kHz即100kbps)
2)快速模式(Fm)(400kHz)
3)快速模式+(Fs+)(1MHz)
4)高速模式(Hs)(3.4MHz)
5)超高速模式(UFm)(5MHz)
2、IIC總線的術語說明
3、SDL 線和 SCL線
IIC設備有兩條接口線:串行數據 SDA 線和串行時鐘 SCL 線。
連接到IIC總線上的設備通過這兩根線互相傳遞信息,SDA 和 SCL 都是雙向線,可以互相之間進行信息的交互,但是是一種同步半雙工的通信方式,同一時刻只能有一個方向進行數據的操作,不能同時進行。
IIC設備上的兩根通信線一般示意如下:
4、IIC總線協議
4.1、IIC總線的起始信號
IIC總線發送啟動信號的時序如圖:
發送啟動信號時,時鐘線SCL需要穩定的保持在高電位,SDA由高電位變化為低電位。啟動信號發送完成之后就可以進行數據的發送了。
如果在一次通信過程中,有兩臺以上的設備同時發出了起始信號,都希望獲得總線控制權的話,那么第一個發出起始信號的設備將獲得總線控制權,作為主設備開始傳輸數據。
注意:起始信號由主機負責產生。
4.2、停止信號
IIC總線發送停止信號的時序如圖:
停止信號是在時鐘線SCL為高電位的時候,數據線SDA由低電平變化為高電平。停止信號一般是在通信完成之后或者通信失敗退出之后發送的。
注意:停止信號由主機負責產生。
4.3、數據傳輸與有效性
IIC數據傳輸的協議如下:
數據的傳輸是在發送完成了啟動信號之后便可以進行數據的傳輸了。
IIC協議要求在時鐘信號SCL為高電位的期間,數據線SDA上的數據要保持穩定,不能發生變化(上圖中1的位置)。只有在時鐘信號SCL電位變低的時候,數據線SDA上的電平狀態才能發生跳變。
每一個數據的bit位傳輸需要一個時鐘脈沖,一次傳輸最多是8bit。
一個完整的傳輸過程的通信時序如圖:
通信開始時,最開始發送的都是地址幀。比如,一個7Bit的地址,首先發出的是最高位,即讀寫位(1-讀,0-寫),用于指示是讀操作還是寫操作。
幀的第9位是 **應答位(ACK/NACK)** 。所有幀(數據或地址)都是一樣的。一旦發送幀的前8位,接收設備就可以控制數據線SDA。如果接收設備在第9個時鐘脈沖沒有將SDA線拉低進行應答,則可能是接收設備沒有接收到數據,或者出現錯誤。在這種情況下,主機需要決定該做什么樣的處理(一般考慮重發或者退出)。
注意:SCL時鐘信號由主機負責產生。數據的發送是高位先發的!
4.4、總線的仲裁
IIC總線支持多個主機同時在總線上發送數據,但是同一時刻只能有一個主機傳送數據。因此必須要通過某些手段來決定哪個主機獲得總線的控制權,其它的沒有獲得主機控制權的設備就只能進行等待,直到獲得總線控制權才能進行數據的傳輸。
IIC總線仲裁的方式有兩種:時鐘同步、仲裁。
4.4.1、時鐘同步
時鐘同步是通過時鐘線SCL來實現的。在時鐘信號SCL由高到低的切換過程中,IIC器件會開始數自身的低電平周期。當主器件的時鐘信號變為低電平的時候,它會使SCL線保持這個電平狀態直到達到高電平。假如這個時候有另外一個器件的時鐘依然是處于低電平的周期,這個時鐘的低到高的變化不會改變SCL線的狀態。
因此,SCL線被有著最長的低電平周期的器件占有總線的控制權,而這個時候低電平周期短的器件會進入高電平的等待狀態,直到當前的主器件釋放總線控制權,自身能夠獲得總線控制權才會改變這些狀態。
時鐘同步的時序示意圖如下:
4.4.2、仲裁
仲裁和同步一樣,都是為了解決多主機情況下的總線控制沖突。仲裁的過程與從機無關。
只有在總線空閑的時候主機才可以啟動傳輸。兩個主機可能在比較短的時間內在總線上同時產生一個有效的起始信號,這種情況下需要仲裁來決定由哪個主機占有總線控制權來完成數據傳輸。
仲裁是逐位進行,在每一位數據的仲裁期間,當時鐘線SCL為高電平時,每個主機都檢查數據總線SDA上的電平是否和自己要發送的相同。
這個過程需要持續很多位。理論上講,如果兩個主機所傳輸的內容完全相同,那么他們能夠成功傳輸而不出現錯誤。但是,如果一個主機發送高電平但檢測到SDA總線上的電平為低時,則認為自己仲裁失敗并關閉自己的SDA數據線上的數據傳輸,而另一個主機則繼續完成自己的傳輸。
IIC總線仲裁的時序示意圖如下:
5、IIC通信的流程
每個I2C設備都通過唯一的器件地址進行識別,根據設備功能,他們既可以是發送器也可作為接收器。通信的流程如下:
1)IIC從機檢測到IIC總線上的起始信號之后,就開始從總線上接收地址,之后會把從總線接收到的地址和自身的器件地址(通過軟件編程)進行比較,一旦兩個地址相同,IIC從機將發送一個確認應答(ACK),并響應總線的后續命令;
2)發送或接收數據;
3)發送或接收完成之后,在收到應答信號ACK之后結束數據的傳輸。
此外,如果軟件開啟了廣播呼叫,則IIC從機始終對一個廣播地址 (0x00)發送確認應答。I2C模塊始終支持7位和10位的地址。
5.1、有關地址幀的發送
7 位地址的 IIC 通訊流程
7Bit地址的通信中,開始信號之后的第一幀是地址幀+讀寫位,剛好是8Bit的數據,直接發送,等待從設備應答之后便可以進行數據的通信。
10 位地址的 IIC 通訊流程(主機發送)
對于10-bit地的址設備,需要使用兩個幀來傳輸10Bit的slave地址。
第一個幀的前5個bit固定為b11110xx,后接slave地址的高2位,第8位仍然是讀寫(R/W)位,接著是一個ACK位,由于總線上可能有多個10 Bit 從設備地址的高2bit相同,因此這個ACK可能由多有slave設備返回。
第二個幀緊接著第一幀發送,包含slave地址的低8位(7:0),接著該地址的slave回復一個ACK(或NACK)。
注意:10-bit地址的設備和7-bit地址的設備在總線中是可以并存的,因為7-bit地址的高5位不可能是b11110。
10 位地址的 I2C 通訊流程(主機接收)
-
SDA
+關注
關注
0文章
124瀏覽量
28137 -
SCL
+關注
關注
1文章
239瀏覽量
17083 -
IIC協議
+關注
關注
0文章
16瀏覽量
3931 -
串行通行
+關注
關注
0文章
2瀏覽量
1113
發布評論請先 登錄
相關推薦
評論