I2C匯流排協議詳解

2022-09-03 02:00:11 字數 2612 閱讀 6207

今天花了半天時間學習i2c匯流排協議,算是弄得比較透徹,拿出來和大家分享一下。

·i2c匯流排特點

·i2c匯流排三種狀態

·i2c匯流排必要知識點

·i2c匯流排寫過程

·i2c匯流排讀過程

一、i2c匯流排特點  

在講之前呢我為大家畫了一幅圖。

從圖看呢,比較簡陋,但是麻雀雖小五臟俱全,想表達的都可以在圖中看出來。

從圖中我們可以看出呢,i2c匯流排的特點呢是:

2.每顆i2c晶元呢都可以作為主機和從機,但一次通行中只允許存在乙個主機。

兩點特點是不是有點少啊,沒事兒,在了解後面的知識點後,自己總結吧,主要講後面內容呢。

二、i2c匯流排的三種狀態

i2c匯流排存在三種狀態:

1.空閒

2.工作開始

3.工作停止

先說空閒狀態:當scl與sda同時為高電平時,為空閒態,說白了,就啥也不幹。如下圖:

再說說開始工作狀態,此時scl為高,而sda出現下降沿,如下圖:

最後就是停止工作狀態,此時scl為高,sda出現上公升沿,如下圖:

三、i2c匯流排必要知識點

除了要知道上面的三種狀態,還需要知道下面五點內容,方可理解最後的讀寫過程。要來了,接招:

1.i2c匯流排協議要求1個位元組位寬為8位(8bit)

2.從機位址位寬為7bit,但上面說了啊乙個位元組要8bit,不著急,還有1個bit的位寬用來存放主機是用來寫(0),還是用來讀(1),加起來剛好8bit。比如0100101(位址位)0(讀寫位,此處為寫),可以看出讀寫位為最低位。

3.每顆i2c晶元都有各自的位址,互相之間有可能相同,有可能不同。相同時呢,就是要實現乙個主機同時對多個從機進行資料交換。為了使各個i2c晶元之間更加靈活,每顆i2c晶元都有固定的4位位址,以及3位可程式設計位址,當4位固定位址相同時,用軟體編輯後3位,使之相同,所以最多可以有8臺(2的三次方)從機可以同時與主機通訊。

4.乙個位元組傳輸完畢之後,主機將sda拉高,主機i2c晶元就不再幹活了,等待從機反饋(ack acknowledge),這時從機i2c晶元開始對傳輸過程做判定,判定讀取成功時,將sda拉低,以表示我完成啦,你繼續吧。主機得到這個訊息之後,就會進行下一步既定的操作。如果從機讀取失敗,那麼sda將不會變化。此時主機就會知道,哦,沒發成功,接下來是繼續重新傳輸一遍還是終止操作,這個由寫好的程式來定。 到這裡大家會不會想到這樣會有乙個bug,那就是只要sda一直不變,那主機就一直不幹活了?當然主機也不是傻子(其實應該是程式猿也不是傻子),那就等乙個時間唄,一定時間內,我收不到訊號拉低,那就認為你出問題了。這個時間就是半個scl週期。

從這張圖可以看出,一整個流程應該是9個時鐘週期,在第九個週期的高過程,必須完成ack。每位資料對應乙個high,在這半個週期內,要求sda上的資料是穩定的,不能發生改變,為啥?用類似建立時間保持時間來理解。

四、i2c匯流排寫過程

寫過程如下:

1.主機傳送從機位址(7bit)+0(0是寫),所有從機都會接收到這個資訊,但是只有位址匹配的從機反饋乙個ack(0),並準備後面的接收工作,其它位址不對的從機,'早點洗洗睡吧,沒咱啥事兒了'。

2.主機收到這個ack,開始傳送記憶體位址(8bit),所有位址匹配的從機(前面說過,乙個主機可以匹配多個從機,只要那從機位址相同就行)接收這個8bit的記憶體位址,在吩咐下去之後,給主機乙個反饋ack(0),'我ok啦'。

3.主機收到這個ack,開始傳送資料給從機,乙個位元組8bit,從機接收完成,給主機反饋ack(0)。

4.主機收到這個ack,是繼續傳送資料,還是傳送終止訊號,取決於資料是否傳送完畢。

五、i2c匯流排讀過程

讀過程如下:

1.主機傳送從機位址(7bit)+0(0是寫),這裡為啥又是寫呢?首先,主機得找到這些從機呀,當然要將從機位址寫給各個從機了。所有從機都會接收到這個資訊,但是只有位址匹配的從機反饋乙個ack(0),並準備後面的接收工作,其它位址不對的從機,'誒......早點洗洗睡吧,又沒咱啥事兒了'。

2.主機接收到這個ack,開始傳送8bit的記憶體位址給從機,'把這個位址找到,把貨給我取出來備著,我一會兒要從你這裡提貨啊!'。從機找好這些位址後,反饋乙個ack(0)給主機。

3.主機收到這個ack,再發一次從機位址(7bit),只不過這次最後乙個換成1(讀)了。從機收到並返回ack(0)。

4.主機收到這個ack,做好了接收從機資訊的準備,這個時候從機資訊到了,主機接收完資訊後不對從機傳送反饋(畢竟人家是老大啊,老大拿好了還要給小嘍嘍打個報告?)直接發起終止訊號,心疼從機3秒鐘。

好了,到這裡就講完了,繼續心疼從機3秒.......

補充:i2c通訊協議允許暫停功能,就是在主機傳輸資料時,從機需要進行乙個優先順序高的事件時,從機通過拉低scl,迫使主機等待,等到處理完緊急事件後,從機釋放scl,主機繼續傳輸。

I2C匯流排協議詳解

1.1 i2c匯流排知識 1.1.1 i2c匯流排物理拓撲結構 i2c 匯流排在物理連線上非常簡單,分別由sda 序列資料線 和scl 序列時鐘線 及上拉電阻組成。通訊原理是通過對scl和sda線高低電平時序的控制,來 產生i2c匯流排協議所需要的訊號進行資料的傳遞。在匯流排空閒狀態時,這兩根線一般...

I2C匯流排協議詳解

1.1 i2c匯流排知識 1.1.1 i2c匯流排物理拓撲結構 i2c 匯流排在物理連線上非常簡單,分別由sda 序列資料線 和scl 序列時鐘線 及上拉電阻組成。通訊原理是通過對scl和sda線高低電平時序的控制,來 產生i2c匯流排協議所需要的訊號進行資料的傳遞。在匯流排空閒狀態時,這兩根線一般...

I2C匯流排協議詳解

1.1 i2c匯流排知識 1.1.1 i2c匯流排物理拓撲結構 i2c 匯流排在物理連線上非常簡單,分別由sda 序列資料線 和scl 序列時鐘線 及上拉電阻組成。通訊原理是通過對scl和sda線高低電平時序的控制,來 產生i2c匯流排協議所需要的訊號進行資料的傳遞。在匯流排空閒狀態時,這兩根線一般...