日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

I2C总线协议详解(特点、通信过程、典型I2C时序)

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 I2C总线协议详解(特点、通信过程、典型I2C时序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、I2C總線簡介

2、通信過程

3、尋址方式

4、起始信號和停止信號

5、?字節傳送與應答

?6、同步數據信號

?7、時鐘同步與仲裁

(1)時鐘同步

(2)仲裁

8、典型I2C時序

?(1)主機向從機發送數據

?(2)從機向主機發送數據

?(3)主機先向從機發送數據,然后從機再向主機發送數據


1、I2C總線簡介

I2C總線是Philips公司在八十年代初推出的一種串行半雙工的總線,主要用于近距離、低速的芯片之間的通信;I2C總線有兩根雙向的信號線,一根數據線SDA用于收發數據,一根時鐘線SCL用于通信雙方時鐘的同步;I2C總線硬件結構簡單,簡化了PCB布線,降低了系統成本,提高了系統可靠性,因此在各個領域得到了廣泛應用。

I2C總線是一種多主機總線,連接在 I2C總線上的器件分為主機和從機。主機有權發起和結束一次通信,從機只能被動呼叫;當總線上有多個主機同時啟用總線時,I2C也具備沖突檢測和仲裁的功能來防止錯誤產生;每個連接到I2C總線上的器件都有一個唯一的地址(7bit),且每個器件都可以作為主機也可以作為從機(但同一時刻只能有一個主機),總線上的器件增加和刪除不影響其他器件正常工作;I2C總線在通信時總線上發送數據的器件為發送器,接收數據的器件為接收器。

I2C總線可以通過外部連線進行在線檢測,便于系統故障診斷和調試,故障可以立即被尋址,軟件也有利于標準化和模塊化,縮短開發時間。

I2C總線上可掛接的設備數量受總線的最大電容400pF限制。

串行的8位雙向數據傳輸速率在標準模式下可達100Kbit/s,快速模式下可達400Kbit/s,高速模式下可達3.4Mbit/s。

總線具有極低的電流消耗,抗噪聲干擾能力強,增加總線驅動器可以使總線電容擴大10倍,傳輸距離達到15m;兼容不同電壓等級的器件,工作溫度范圍寬。

2、通信過程

  • 主機發送起始信號啟用總線
  • 主機發送一個字節數據指明從機地址和后續字節的傳送方向
  • 被尋址的從機發送應答信號回應主機
  • 發送器發送一個字節數據
  • 接收器發送應答信號回應發送器
  • ........ (循環步驟4、5)
  • 通信完成后主機發送停止信號釋放總線
  • 第4步和第5步用的是發送器和接收器,不是主機和從機,這是由第一個字節的最后一位決定主給從發,還是從給主發。

    也就是說,第一個字節和最后的停止信號一定是主機發給從機,但中間就不一定了。

    發送數據過程中不允許改變發送方向(除非重啟一次通信,詳見后文典型I2C時序(3)部分)

    3、尋址方式

    I2C總線上傳送的數據是廣義的,既包括地址,又包括真正的數據。

    主機在發送起始信號后必須先發送一個字節的數據,該數據的高7位為從機地址,最低位表示后續字節的傳送方向,‘0’表示主機發送數據給->從機,‘1’表示從機發送數據給->主機。

    總線上所有的從機接收到該字節數據后都將這7位地址與自己的地址進行比較,如果相同,則認為自己被主機尋址,然后再根據第8位將自己定為發送器或接收器。

    4、起始信號和停止信號

    SCL為高電平時,SDA由高變低表示起始信號;

    SCL為高電平時,SDA由低變高表示停止信號;

    起始信號和停止信號都是由主機發出,起始信號產生后總線處于占用狀態,停止信號產生后總線被釋放,處于空閑狀態。

    空閑時,SCL與SDA都是高電平。

    ?停止情況有兩種:

  • 主機不想發了,就發送停止信號;
  • 從機不想接了,不應答,主機就發送停止信號結束此次通信。
  • 5、?字節傳送與應答

    I2C總線通信時每個字節為8位長度,數據傳送時,先傳送最高位,后傳送低位,發送器發送完一個字節數據后接收器必須發送1位應答位來回應發送器,即一幀共有9位。

    I2C每次發送數據必須是8位。

    MSB固定,先發高位,再發低位。

    ?6、同步數據信號

    I2C總線在進行數據傳送時,時鐘線SCL為低電平期間發送器向數據線上發送一位數據,在此期間數據線上的信號允許發生變化,時鐘線SCL為高電平期間接收器從數據線上讀取一位數據,在此期間數據線上的信號不允許發生變化,必須保持穩定。

    ?7、時鐘同步與仲裁

    (1)時鐘同步

    時鐘同步是通過I2C總線上的SCL之間的線“與”(wire-AND)來完成的,即如果有多個主機同時產生時鐘,那么只有所有master都發送高電平時,SCL上才表現為高電平,否則SCL都表現為低電平。

    線“與”特性由開漏電路實現。如果控制開漏輸出INT為0,低電平,則VGS >0,N-MOS管導通,使輸出接地,若控制開漏輸出INT為1 (它無法直接輸出高電平) 時,則N-MOS 管關閉,所以引腳既不輸出高電平,也不輸出低電平,為高阻態。正常使用時必須外部接上拉電阻。也就是說,若有很多個開漏模式引腳(C1、C2....)連接到一起時,只有當所有引腳都輸出高阻態,才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接的電源的電壓。若其中一個引腳為低電平,那線路就相當于短路接地,使得整條線路都為低電平,0 伏。

    (2)仲裁

    總線仲裁與時鐘同步類似,當所有主機在SDA上都寫1時,SDA的數據才是1,只要有一個主機寫0,那此時SDA上的數據就是0.

    一個主機每發送一個bit數據,在SCL為高電平時,就檢查SDA的電平是否和發送的數據一致,如果不一致,這個主機便知道自己輸掉了仲裁,然后停止向SDA寫數據。也就是說,如果主機一致檢查到總線上數據和自己發送的數據一致,則繼續傳輸,這樣在仲裁過程中就保證了贏得仲裁的master不會丟失數據。

    輸掉仲裁的主機在檢測到自己輸了之后也就不再產生時鐘脈沖,并且要在總線空閑時才能重新傳輸。

    仲裁的過程可能要經過多個bit的發送和檢查,實際上兩個主機如果發送的時序和數據完全一樣,則兩個主機都能正常完成整個數據傳輸。

    注意:多個主機仲裁時,因為線“與”特性,誰低誰能強制SDA為低,也就是跟自己匹配,所以先高(高電平1)的那個就會仲裁失敗。

    8、典型I2C時序

    (1)主機向從機發送數據

    ?(2)從機向主機發送數據

    (3)主機先向從機發送數據,然后從機再向主機發送數據

    注:S:起始信號,A:應答信號,A非表示非應答,P:終止信號,

    陰影部分表示數據由主機向從機傳送,無陰影部分表示從機向主機發送數據。

    數據傳輸中間如果想轉換發送方向,不用發P停止信號,就不會釋放總線,直接再發起始信號

    怎么發起始信號,怎么發停止信號,這些都不用關心,由I2C控制器完成,我們使用的時候只需要正確配置控制器相應的寄存器就可以了。


    參考學習視頻:

    https://www.bilibili.com/video/BV1WK4y1o7rd?p=7

    https://www.bilibili.com/video/BV1264y1y7oX?from=search&seid=4461481906739954380&spm_id_from=333.337.0.0

    總結

    以上是生活随笔為你收集整理的I2C总线协议详解(特点、通信过程、典型I2C时序)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。