IIC通訊協議分析

2021-10-05 21:01:31 字數 2199 閱讀 1501

iic(iic,inter-integrated circuit),兩線式序列匯流排,用於mcu和外設間的通訊。 iic只需兩根線:資料線sda和時鐘線scl。以半雙工方式實現mcu和外設之間資料傳輸,速度可達400kbps。

多主機i2c匯流排結構

注意sda和scl兩根匯流排需要上拉,使匯流排處於空閒狀態。

2.2 iic協議

a.空閒狀態

協議規定,sda和scl同時為高電平時,匯流排處於空閒狀態。上拉電阻保證電平處於高電平。

起始訊號和停止訊號

起始訊號:scl為高電平時,sda電平發生高到低的跳變

停止訊號:scl為高電平時,sda電平發生低到高的跳變

b.應答訊號

傳送器每傳送完乙個位元組(8個脈衝),在第9個脈衝間釋放匯流排,接收器返回乙個ack訊號,協議規定,低電平為有效應答,高電平為無效應答。

c.資料有效性

協議對有效資料進行了規定:即時鐘訊號為高電平期間,資料必須保持穩定,時鐘訊號低電平期間,資料線上的電平才允許變化。也就是說,資料在時鐘訊號到來前必須準備好,並保持到時鐘訊號的下降沿之後。

d.資料傳輸

i2c為同步傳輸,時鐘控制資料位的傳輸,邊沿觸發。

驅動程式

直接引用實驗中的**。測試沒問題。

起始訊號

1.

//產生iic起始訊號

2.void

iic_start

(void)3.

停止訊號

1.

//產生iic停止訊號

2.void

iic_stop

(void)3.

有效應答

1.

//產生ack應答

2.void

iic_ack

(void)3.

無效應答

1.

//不產生ack應答

2.void

iic_nack

(void)3.

傳送單位元組

1.

//iic傳送乙個位元組

2.//返回從機有無應答

3.//1,有應答

4.//0,無應答

5.void

iic_send_byte

(u8 txd)

6.20.

}

接收單位元組

1.

//讀1個位元組,ack=1時,傳送ack,ack=0,傳送nack

2. u8 iic_read_byte

(unsigned

char ack)

3.15.if(

!ack)

16.iic_nack()

;//傳送nack

17.else

18.iic_ack()

;//傳送ack

19.return receive;

20.}

三、怎麼背iic

上面的程式親身驗證過,可以用的(第二節非原創,摘錄乙個牛人,很久之前找到了,不知道原創的鏈結了)。

1.iic由scl和sda組成。

2.根據iic的時序要求,要實現六個功能子函式,包括啟動函式,停止函式,應答函式,非應答函式,位元組傳送函式,位元組接受函式。

3.再深入就是背時序了。啟動,停止,應答,非應答是主動傳送的過程相對來說比較簡單,

啟動就是先將scl拉高,延時一下,然後將sda拉低,延時一下;

停止也是先將scl拉高,延時一下,不過接下來將sda拉低,延時一下;

應答是將scl拉高,在拉高期間將sda保持低電平,非應答則是將sda拉高。

傳送和接收位元組都是從高位開始的,先將scl拉高,然後傳送或者接收。

IIC 通訊協議

原文 i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止...

IIC 通訊協議

i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止訊號。...

IIC 通訊協議

簡要過程 主機傳送起始位,這會通知匯流排上的所有裝置傳輸開始了,接下來主機傳送裝置位址 讀 寫訊號,與這一位址匹配的從裝置將成為從機並與主機進行傳輸,而其它從裝置將會退出此次通訊。主機匹配到從機後,主機傳送它所要讀取或寫入的從機的內部暫存器位址 然後傳送資料 資料傳送完畢後,傳送停止位。詳細過程 簡...