iic系列問題

2021-07-25 03:16:25 字數 1930 閱讀 5464

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

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

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

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

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

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

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

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

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

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

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

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

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

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

iic連續寫三個位址 IIC波形問題分享

各位好,最近在除錯iic的時候遇到了sda波形有半高電平的狀態,下面分享一下解決的方法。1.測試方法 通過iic將資料0xef寫入eeprom中的0x01位址。整個操作過程如下且通過示波器測試波形 通訊引數 起始訊號 寫0xa0 從機回ack 寫0x01 從機回ack 寫0xef 從機回ack st...

IIC通訊的若干問題

iic 匯流排是一種序列資料匯流排,只有二根訊號線,通常我們為了方便把iic裝置分為主裝置和從裝置,基本上誰控制時鐘線 即控制scl的電平高低變換 誰就是主裝置。為了避免匯流排訊號的混亂,要求各裝置連線到匯流排的輸出端時必須是漏極開路 od 輸出或集電極開路 oc 輸出。匯流排空閒時,因各裝置都是開...

CC3200系列教程之IIC主機 注意點

汗,本來是想寫iic教程的,結果發現iic好像沒有什麼要寫的東西,看看官方的例程,基本的iic也就出來,難道要我再造輪子?於是想寫一下注意點。一般iic都是用於感測器的通訊的,發現官方的板子自帶的溫度感測器是smbus通訊協議的,smbus是可以用iic通訊,但是有點小區別,具體的區別自己可以goo...