嵌入式stm32 複習(工作用)---IIC通訊協議 原理部分 2020.2.16

看完下面這篇文章,你應該就能懂IIC的原理了!!!

爲什麼要複習IIC通訊協議?

1.在單片機普遍使用的當下,我們大部分人用這些協議(iic,spi,can等)時,剛開始只是只知其表不知其裏,只是達到會使用這個的程度,用完之後如果沒有整理則過段時間就會忘掉,所以寫這篇文章達到回顧知識,鞏固基礎的作用。
2.也是爲了即將到來的嵌入式相關方向的面試提前做準備。

廢話不多說,接下來開始系統的認識這個並不太複雜的IIC協議!!!

IIC主要特點

其中我覺得比較重要的並且需要我們掌握的,我都在下邊列了出來,可能還有幾點我沒有列出來,主要還是我用IIC協議這一段時間內還沒有用到。同時也須注意不是所有產品中都包含所有特性。請參考相關的數據手冊,確認該產品支持的I2C功能
● 多主機功能:該模塊既可做主設備也可做從設備
● I2C主設備功能
─ 產生時鐘
─ 產生起始和停止信號
● 產生和檢測7位/10位地址和廣播呼叫
● 支持不同的通訊速度
─ 標準速度(高達100 kHz)
─ 快速(高達400 kHz)
● 狀態標誌:
─ 發送器/接收器模式標誌
─ 字節發送結束標誌
─ I2C總線忙標誌
● 錯誤標誌
─ 主模式時的仲裁丟失
─ 地址/數據傳輸後的應答(ACK)錯誤
─ 檢測到錯位的起始或停止條件
─ 禁止拉長時鐘功能時的上溢或下溢
● 2箇中斷向量
─ 1箇中斷用於地址/數據通訊成功
─ 1箇中斷用於錯誤
● 可選的拉長時鐘功能
● 具單字節緩衝器的DMA

IIC通訊流程

先給大家看一張自己畫的圖片:
在這裏插入圖片描述接下來較詳細的描述下IIC的主機和從機的通訊流程:

1.相信大家在用IIC協議的時候,一般都需要了解從機的寄存器地址,這個地址一般都是16位的,但是我們需要知道IIC傳輸數據時一般是8位傳輸的,所以如果主機傳輸1個字節的數據,需要傳送8次,那麼16位的話就需要傳送2次了。同理,如果主機一直傳送數據,那麼從機就得一直接收數據。

2.剛開始主機得根據這個從機的地址寄存器(注意:這個寄存器地址一般出廠後就已經設置好了!!!)判斷與哪一個從機通信,如果在這個IIC總線上有從機的話,則從機會發出應答信號。

3.然後主機接收到應答信號後開始發送數據到從設備。

4.當從設備接收完數據後,再次發出應答信號。

5.經過n次上述的循環,最終主設備的數據能夠全部發往從設備。

6.完成數據傳輸後,主設備會發送ok指令到從設備,至此從設備與主設備傳輸數據的過程結束。如果主設備再想傳輸數據到從設備,那麼重複上述操作即可。

IIC通信流

在這裏插入圖片描述看清這張圖需掌握以下幾個要點:

1.IIC主模式,IIC接口啓動數據傳輸併產生時鐘信號,串行數據傳輸總是以起始條件開始並以停止條件結束。

2.當通過START位在總線上產生了起始條件,設備就進入了主模式。

3.下降沿:信號從高電平到低電平的躍變動作

4.上升沿:信號從低電平到高電平的躍變動作

5.傳輸數據時,數據線是將每一位的數據(高電平或者低電平)掛載在IIC總線上的,如果傳輸的數據是高電平,則數據線(SDA)爲高電平,如果傳輸的數據是低電平,則數據線(SDA)爲低電平。

6.當時鍾線(SCL)爲下降沿時,纔會將數據線(SDA)上掛載的高電平或低電平傳輸到從機,如果傳輸的是1個字節(8位)的話,以此類推,循環發8次。

7.當數據傳輸完之後,數據線(SDA)的電平爲低電平,則表示從機已經接收完主機發送過來的信號,同時也表示從機接收成功。(注意:這裏有的同學可能會想這樣一種情況,如果數據線(SDA)在傳輸第8位時恰好是低電平時,數據線(SDA)的應答信號也是低電平,那最後怎麼區別是否這個信號是應答傳輸完成信號呢? 答案是:大家如果有這種顧慮的話,恰好說明了大家真正理解了上述圖中的IIC傳輸原理,其實並不用考慮這種問題,因爲這種信號在每次數據線傳輸完一位時,芯片內部會強行將該數據線(SDA)電平拉到芯片不能識別的狀態,這樣這中問題就得到了解決,同時主機也能識別到從機的應答信號了!!!

8.傳輸起始條件:數據線(SDA)從高電平到低電平,時鐘線(SCL)處於高電平

9.傳輸結束條件:數據線(SDA)從低電平到高電平,時鐘線(SCL)處於高電平

下一篇直接上代碼,教你如何手寫關於IIC協議的代碼,敬請期待!!!

看到這裏,大家是不是對IIC有了更加深刻的理解,如果感覺這個文章對你有幫助的話,麻煩點個讚唄,哈哈!!!
好了,以上就是我對IIC的理解,可能會有理解不對的地方,如果有,希望大家批評指正,謝謝!!!

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