1. 程式人生 > >IIC詳解,包括原理、過程,最後一步步教你實現IIC

IIC詳解,包括原理、過程,最後一步步教你實現IIC

IIC詳解

1、I2C匯流排具有兩根雙向訊號線,一根是資料線SDA,另一根是時鐘線SCL  

2、IIC總線上可以掛很多裝置:多個主裝置,多個從裝置(外圍 裝置)。上圖中主裝置是兩個微控制器,剩下的都是從裝置。 

3、多主機會產生匯流排裁決問題。當多個主機同時想佔用匯流排時,企圖啟動匯流排傳輸資料,就叫做匯流排競爭。I2C通過匯流排仲裁,以決定哪臺主機控制匯流排

4、上拉電阻一般在4.7k~10k之間           5、每個接到I2C總線上的器件都有唯一的地址。主機與其它器件間的資料傳輸可以是由主機發送資料到其它器件,這時主機 即為傳送器,總線上收資料的器件則為接收器。

6、I2C匯流排的資料傳送:      (1)、資料位的有效性規定:           

      (2)、起始與終止訊號:SCL為高期間,              SDA : 由高到低,起始訊號              SDA:由低到高,終止訊號             

7、起始訊號和終止訊號都是由主機發送的。在起始訊號產生之後,匯流排就處於被佔用的狀態,在終止訊號產生之後,匯流排就處於空閒狀態。

8、連線到I2C總線上的器件,若具有I2C匯流排的硬體介面,則很容易檢測到起始和終止訊號。

9、每當傳送器傳輸完一個位元組的資料之後,傳送端會等待一定的時間,等接收方的應答訊號。接收端通過拉低SDA資料線,給傳送端傳送一個應答訊號,以提醒傳送端我這邊已經接受完成,資料可以繼續傳輸,接下來,傳送端就可以繼續傳送資料了。

10、資料傳送格式:主機發送給從機              

11、I2C模擬方式 的特殊情況:       

12、匯流排定址:        (1)、主機向從機發送8位資料,這8位資料是在起始訊號之後傳送的第一個位元組,後面的位元組都是資料,不再是定址,除非又重新來一個起始訊號。                     (2)、主機給從機發送第一個位元組(匯流排定址那個位元組),若是讀命令,則從機接收到該 命令之後,主動往主機發送資料。            (3)、主機發送地址時,總線上的每個從機都將這7位地址碼與自己的地址進行比較,若相同,則認為自己正在被主機定址,根據R/T位將自己確定為傳送器和接收器

     (4)、從機地址的確定:第0位是讀寫位。(如對於24C02這塊儲存器,它若作為從機,那麼它的地址中7~4位是固定的,更改不了,第3~1位是可以更改的,每一位根據硬體的管教連線來確定,連線高電平那就是1,低電平就是0)             

13、在起始訊號後必須傳送一個從機的地址(7位),第8位是資料的傳送方向位(R/T),用“0”表示主機發送資料(T),“1”表示主機接收資料(R)。

14、每次資料傳送總是由主機產生的終止訊號來結束。但是,若主機希望繼續佔用匯流排進行新的資料傳送,則可以不產生終止訊號,馬上再次發出起始訊號對另一從機進行定址。

15、在匯流排的一次資料傳輸中,可以有一下幾種組合方式:

       (1)、主機向從機發送資料,資料傳送方向在整個傳遞過程中不變:         

        (2)、主機在第一個位元組後,立即從從機讀資料(傳輸方向不變):                 

         (3)、在傳送過程中,當需要改變傳遞方向時,起始訊號和從機地址都被重複一次產生一次,但兩次讀/寫方向位正好相反                  

16、時序:        

注:主機做的都是程式設計控制,從機做的都是自主控制,也可以說是硬體控制,如主機給應答訊號是程式設計控制,但是從機給應答訊號是硬體控制,我們只需要檢查在SDA為高期間,SCL保持低電平一些時間,即可判定從機給了主機應答訊號。

---------------------

本文來自 shaguahaha 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/shaguahaha/article/details/70766665?utm_source=copy