iic系列問題

面試的時候主要會遇到的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時鐘同步處理過程沒有先後關係,而是同時進行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章