1. 程式人生 > >面試你該如何回答---->IIC匯流排協議?

面試你該如何回答---->IIC匯流排協議?

IIC即Inter-Integrated Circuit(積體電路匯流排)

面試的時候主要會遇到的IIC問題如下

  • 介紹一下你瞭解的I2C?

I2C匯流排是飛利浦(PHLIPS)公司推出的一種序列匯流排,用於連線微控制器及其外圍裝置, I2C序列匯流排有兩根雙向訊號線。一根是資料線SDA,另一根是時鐘線SCL。 它僅通過兩根訊號線就可以完成對所有掛載在I2C總線上的從器件進行操作。這樣的好處是可以大大的節省我們微處理器的IO口資源。

  • I2C到底可以掛載多少個器件呢?

答:IIC協議規定,在啟動匯流排後第1位元組的高7位是從節點的定址地址,其中高四位為器件型別識別符,接著三位為片選,最後一位為讀寫位,當為1時為讀操作,為0時為寫操作,所以具體掛載多少個器件由I2C地址決定,7位定址地址減去1個廣播地址0x00不用,所以有2^7=128 - 1 = 127,那就是127個地址, 所以理論上可以掛127個從器件。

  • I2C如何同時掛載多個同一種器件(地址相同的器件)?

答:理論上是不會這樣設計的,如果一定要這樣做的話,可以通過硬體上設計,控制器件是否掛載匯流排來實現(方法可用一個開關電路切斷器件SDA或者SCL是否接入匯流排來實現)

  • I2C匯流排的主機與從機之間是如何通訊的呢?

I2C匯流排的主機與從機之間的通訊主要和I2C的時序有關。在通訊開始的時候SCL與SDA都置為高電平,此時為匯流排空閒時間。當SCL為高電平期間SDA的電平被拉低,標誌這匯流排的啟動。當SCL為高電平期間SDA的電平被拉高,標誌這匯流排的終止。在進行資料傳送時,SCL為高電平期間,SDA上的資料必須保持穩定,只有在SCL的訊號為低電平時,SDA上的高電平才允許變化。所以只要我們根據晶片手冊正確的寫好IIC的時序,按時序傳送器件地址(不同的器件的地址不同)以及資料,就可以使主機與從機之間通訊。

  • I2C匯流排的仲裁你知道嗎?

總線上可能掛接有多個器件,有時會發生兩個或多個主器件同時想佔用匯流排的情況,這種情況叫做匯流排競爭。I2C匯流排具有多主控能力,可以對發生在SDA線上的匯流排競爭進行仲裁,其仲裁原則是這樣的:當多個主器件同時想佔用匯流排時,如果某個主器件傳送高電平,而另一個主器件傳送低電平,則傳送電平與此時SDA匯流排電平不符的那個器件將自動關閉其輸出級。匯流排競爭的仲裁是在兩個層次上進行的。首先是地址位的比較,如果主器件定址同一個從器件,則進入資料位的比較,從而確保了競爭仲裁的可靠性。由於是利用I2C總線上的資訊進行仲裁,因此不會造成資訊的丟失。

  • I2C時鐘訊號(SCL)的同步問題

在I2C總線上傳送資訊時的時鐘同步訊號是由掛接在SCL線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘訊號下跳為低電平,將使SCL線一直保持低電平,使SCL線上的所有器件開始低電平期。此時,低電平週期短的器件的時鐘由低至高的跳變並不能影響SCL線的狀態,於是這些器件將進入高電平等待的狀態。當所有器件的時鐘訊號都上跳為高電平時,低電平期結束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其後,第一個結束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產生一個同步時鐘。可見,時鐘低電平時間由時鐘低電平期最長的器件確定,而時鐘高電平時間由時鐘高電平期最短的器件確定。

  • I2C匯流排的其他注意點

1、進行資料傳送時,在SCL為高電平期間,SDA線上電平必須保持穩定,只有SCL為低時,才允許SDA線上電平改變狀態。並且每個位元組傳送時都是高位在前。

2、對於應答訊號,ACK=0時為有效應答位,說明從機已經成功接收到該位元組,若為1則說明接受不成功。

3、如果從機需要延遲下一個資料位元組開始傳送的時間,可以通過把SCL電平拉低並保持來強制主機進入等待狀態。

4、主機完成一次通訊後還想繼續佔用匯流排在進行一次通訊,而又不釋放匯流排,就要利用重啟動訊號Sr。它既作為前一次資料傳輸的結束,又作為後一次傳輸的開始。

5、匯流排衝突時,按“低電平優先”的仲裁原則,把匯流排判給在資料線上先發送低電平的主器件。

6、在特殊情況下,若需禁止所有發生在I2C總線上的通訊,可採用封鎖或關閉匯流排,具體操作為在總線上的任一器件將SCL鎖定在低電平即可。

7、SDA仲裁和SCL時鐘同步處理過程沒有先後關係,而是同時進行的。