什麼是I2C協議?

I2C協議是單片機與其它芯片常用的通訊協議,由於只需要兩根線,所以很好使用。

一. I2C協議技術性能:
    工作速率有100K和400K兩種;
    支持多機通訊;
    支持多主控模塊,但同一時刻只允許有一個主控;     
    由數據線SDA和時鐘SCL構成的串行總線;
    每個電路和模塊都有唯一的地址;                   
    每個器件可以使用獨立電源

二. I2C協議基本工作原理:
    以啓動信號START來掌管總線,以停止信號STOP來釋放總線;
    每次通訊以START開始,以STOP結束;
    啓動信號START後緊接着發送一個地址字節,其中7位爲被控器件的地址碼,一位爲讀/寫控制位R/W,R. /W位爲0表示由主控向被控器件寫數據,R/W爲1表示由主控向被控器件讀數據;
    當被控器件檢測到收到的地址與自己的地址相同時,在第9個時鐘期間反饋應答信號;
    每個數據字節在傳送時都是高位(MSB)在前;

寫通訊過程:
    1. 主控在檢測到總線空閒的狀況下,首先發送一個START信號掌管總線;
    2. 發送一個地址字節(包括7位地址碼和一位R/W);
    3. 當被控器件檢測到主控發送的地址與自己的地址相同時發送一個應答信號(ACK);
    4. 主控收到ACK後開始發送第一個數據字節;
    5. 被控器收到數據字節後發送一個ACK表示繼續傳送數據,發送NACK表示傳送數據結束;
    6. 主控發送完全部數據後,發送一個停止位STOP,結束整個通訊並且釋放總線;

I2C協議讀通訊過程:
    1. 主控在檢測到總線空閒的狀況下,首先發送一個START信號掌管總線;
    2. 發送一個地址字節(包括7位地址碼和一位R/W);
    3. 當被控器件檢測到主控發送的地址與自己的地址相同時發送一個應答信號(ACK);
    4. 主控收到ACK後釋放數據總線,開始接收第一個數據字節;
    5. 主控收到數據後發送ACK表示繼續傳送數據,發送NACK表示傳送數據結束;
    6. 主控發送完全部數據後,發送一個停止位STOP,結束整個通訊並且釋放總線;

四. I2C協議總線信號時序分析
    1. 總線空閒狀態
    SDA和SCL兩條信號線都處於高電平,即總線上所有的器件都釋放總線,兩條信號線各自的上拉電阻把電平拉高;
    2. 啓動信號START
    時鐘信號SCL保持高電平,數據信號SDA的電平被拉低(即負跳變)。啓動信號必須是跳變信號,而且在建立該信號前必修保證總線處於空閒狀態;
    3. 停止信號STOP
    時鐘信號SCL保持高電平,數據線被釋放,使得SDA返回高電平(即正跳變),停止信號也必須是跳變信號。
    4. 數據傳送
    SCL線呈現高電平期間,SDA線上的電平必須保持穩定,低電平表示0(此時的線電壓爲地電壓),高電平表示1(此時的電壓由元器件的VDD決定)。只有在SCL線爲低電平期間,SDA上的電平允許變化。
    5. 應答信號ACK
    I2C總線的數據都是以字節(8位)的方式傳送的,發送器件每發送一個字節之後,在時鐘的第9個脈衝期間釋放數據總線,由接收器發送一個ACK(把數據總線的電平拉低)來表示數據成功接收。
    6. 無應答信號NACK
    在時鐘的第9個脈衝期間發送器釋放數據總線,接收器不拉低數據總線表示一個NACK,NACK有兩種用途:
    a. 一般表示接收器未成功接收數據字節;
    b. 當接收器是主控器時,它收到最後一個字節後,應發送一個NACK信號,以通知被控發送器結束數據發送,並釋放總線,以便主控接收器發送一個停止信號STOP。

五. I2C協議尋址約定
    地址的分配方法有兩種:
    1. 含CPU的智能器件,地址由軟件初始化時定義,但不能與其它的器件有衝突;
    2. 不含CPU的非智能器件,由廠家在器件內部固化,不可改變。

    高7位爲地址碼,其分爲兩部分:
    1. 高4位屬於固定地址不可改變,由廠家固化的統一地址;
    2. 低三位爲引腳設定地址,可以由外部引腳來設定(並非所有器件都可以設定);

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