IIC協議


參考文章:簡單的I2C協議理解http://blog.csdn.net/zmq5411/article/details/6085740

 

文中以EEPROM為例,且以master角度闡述。

一. 技術性能:

工作速率有100K和400K兩種;

支持多機通訊;

支持多主控模塊,但同一時刻只允許有一個主控;

由數據線SDA和時鍾SCL構成的串行總線;

每個電路和模塊都有唯一的地址;

每個器件可以使用獨立電源

 

二. 基本工作原理:

以啟動信號START來掌管總線,以停止信號STOP來釋放總線;當SCL為高時,SDA下跳為起始信號,上跳為停止信號。

啟動信號START后緊接着發送一個地址字節,其中7位為地址碼,1位為讀/寫控制位,R/W位為0表示寫數據,R/W為1表示讀數據;

當被控器件檢測到收到的地址與自己的地址相同時,在第9個時鍾期間反饋應答信號;

每個數據字節在傳送時都是高位(MSB)在前;

 

寫通訊過程:

1. 主控在檢測到總線空閑的狀況下,首先發送一個START信號掌管總線;

2. 發送一個地址字節(包括7位地址碼和一位R/W);

3. 當被控器件檢測到主控發送的地址與自己的地址相同時發送一個應答信號(ACK);

4. 主控收到ACK后開始發送第一個數據字節;

5. 被控器收到數據字節后發送一個ACK表示繼續傳送數據,發送NACK表示傳送數據結束;

6. 主控發送完全部數據后,發送一個停止位STOP,結束整個通訊並且釋放總線;

 

 

讀通訊過程:

  1. 主控在檢測到總線空閑的狀況下,首先發送一個START信號掌管總線;
  2. 發送一個地址字節(包括7位地址碼和一位R/W,最后1bit為0,表示寫),將地址寫入地址計數器;
  3. 當被控器件檢測到主控發送的地址與自己的地址相同時發送一個應答信號(ACK);
  4. 主控收到ACK后緊接着發送一個start狀態,然后重復第一個地址字節(device code)最后1bit為'1',代表讀。
  5. 釋放數據總線,開始接收第一個數據字節;
  6. 主控收到數據后發送ACK表示繼續傳送數據,發送NACK表示傳送數據結束;

 

M24C16-R

A dummy Write is first performed to load the address into this address counter (as shown in Figure 10) but without sending a Stop condition. Then, the bus master sends another Start condition, and repeats the device select code, with the RW bit set to 1. The device acknowledges this, and outputs the contents of the addressed byte. The bus master must not acknowledge the byte, and terminates the transfer with a Stop condition.

 

RTC

四. 總線信號時序分析

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。

 

五. 尋址約定

地址的分配方法有兩種:

1. 含CPU的智能器件,地址由軟件初始化時定義,但不能與其它的器件有沖突;

2. 不含CPU的非智能器件,由廠家在器件內部固化,不可改變。

 

高7位為地址碼,其分為兩部分:

1. 高4位屬於固定地址不可改變,由廠家固化的統一地址;

2. 低三位為引腳設定地址,可以由外部引腳來設定(並非所有器件都可以設定,M24C16-R將b3-b1作為地址的高3位。);

這是由用戶自己設置的,通常的作法如EEPROM這些器件是由外部IC的3個引腳所組合電平決定的(用常用的名字如A0,A1,A2)。這也就是尋址碼。

這就是為什么同一IIC總線上同一型號的IC只能最多共掛8片同種類芯片的原因了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM