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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

I2C 总线协议详解

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

I2C 總線協議

  • 1、I2C 簡介
  • 2、I2C 協議
  • 3、I2C協議有關術語
    • 3.1、起始位
    • 3.2、停止位
    • 3.3、數據傳輸
    • 3.4、應答信號
    • 3.5、I2C 寫時序
    • 3.6、I2C 讀時序
    • 3.7、I2C 多字節讀寫時序

1、I2C 簡介

I2C 是很常見的一種總線協議, I2C 是 NXP 公司設計的, I2C 使用兩條線在主控制器和從機之間進行數據通信。一條是 SCL(串行時鐘線),另外一條是 SDA(串行數據線),這兩條數據線需要接上拉電阻,總線空閑的時候 SCL 和 SDA 處于高電平。 I2C 總線標準模式下速度可以達到 100Kb/S,快速模式下可以達到 400Kb/S。 I2C 總線工作是按照一定的協議來運行的,接下來就看一下 I2C 協議。

2、I2C 協議

I2C 是支持多從機的,也就是一個 I2C 控制器下可以掛多個 I2C 從設備,這些不同的 I2C從設備有不同的器件地址,這樣 I2C 主控制器就可以通過 I2C 設備的器件地址訪問指定的 I2C設備了,一個 I2C 總線連接多個 I2C 設備如下圖所示:

上圖中 SDA 和 SCL 這兩根線必須要接一個上拉電阻,一般是 4.7K。其余的 I2C 從器件都掛接到 SDA 和 SCL 這兩根線上,這樣就可以通過 SDA 和 SCL 這兩根線來訪問多個 I2C設備。

3、I2C協議有關術語

3.1、起始位

顧名思義,也就是 I2C 通信起始標志,通過這個起始位就可以告訴 I2C 從機,“我”要開始進行 I2C 通信了。在 SCL 為高電平的時候, SDA 出現下降沿就表示為起始位,如下圖所示:

3.2、停止位

停止位就是停止 I2C 通信的標志位,和起始位的功能相反。在 SCL 位高電平的時候, SDA出現上升沿就表示為停止位,如下圖所示:

3.3、數據傳輸

I2C 總線在數據傳輸的時候要保證在 SCL 高電平期間, SDA 上的數據穩定,因此 SDA 上的數據變化只能在 SCL 低電平期間發生,如下圖所示:

3.4、應答信號

當 I2C 主機發送完 8 位數據以后會將 SDA 設置為輸入狀態,等待 I2C 從機應答,也就是等到 I2C 從機告訴主機它接收到數據了。應答信號是由從機發出的,主機需要提供應答信號所需的時鐘,主機發送完 8 位數據以后緊跟著的一個時鐘信號就是給應答信號使用的。從機通過將 SDA 拉低來表示發出應答信號,表示通信成功,否則表示通信失敗。

3.5、I2C 寫時序

主機通過 I2C 總線與從機之間進行通信不外乎兩個操作:寫和讀, I2C 總線單字節寫時序如下圖所示:

上圖就是 I2C 寫時序,我們來看一下寫時序的具體步驟:

  • 1)、開始信號。
  • 2)、發送 I2C 設備地址,每個 I2C 器件都有一個設備地址,通過發送具體的設備地址來決定訪問哪個 I2C 器件。這是一個 8 位的數據,其中高 7 位是設備地址,最后 1 位是讀寫位,為1 的話表示這是一個讀操作,為 0 的話表示這是一個寫操作。
  • 3)、 I2C 器件地址后面跟著一個讀寫位,為 0 表示寫操作,為 1 表示讀操作。
  • 4)、從機發送的 ACK 應答信號。
  • 5)、重新發送開始信號。
  • 6)、發送要寫寫入數據的寄存器地址。
  • 7)、從機發送的 ACK 應答信號
  • 8)、發送要寫入寄存器的數據。
  • 9)、從機發送的 ACK 應答信號。
  • 10)、停止信號。

3.6、I2C 讀時序

I2C 總線單字節讀時序如下圖所示:

I2C 單字節讀時序比寫時序要復雜一點,讀時序分為 4 大步,第一步是發送設備地址,第二步是發送要讀取的寄存器地址,第三步重新發送設備地址,最后一步就是 I2C 從器件輸出要讀取的寄存器值,我們具體來看一下這步。

  • 1)、主機發送起始信號。
  • 2)、主機發送要讀取的 I2C 從設備地址。
  • 3)、讀寫控制位,因為是向 I2C 從設備發送數據,因此是寫信號。
  • 4)、從機發送的 ACK 應答信號。
  • 5)、重新發送 START 信號。
  • 6)、主機發送要讀取的寄存器地址。
  • 7)、從機發送的 ACK 應答信號。
  • 8)、重新發送 START 信號。
  • 9)、重新發送要讀取的 I2C 從設備地址。
  • 10)、讀寫控制位,這里是讀信號,表示接下來是從 I2C 從設備里面讀取數據。
  • 11)、從機發送的 ACK 應答信號。
  • 12)、從 I2C 器件里面讀取到的數據。
  • 13)、主機發出 NO ACK 信號,表示讀取完成,不需要從機再發送 ACK 信號了。
  • 14)、主機發出 STOP 信號,停止 I2C 通信。

3.7、I2C 多字節讀寫時序

有時候我們需要讀寫多個字節,多字節讀寫時序和單字節的基本一致,只是在讀寫數據的時候可以連續發送多個自己的數據,其他的控制時序都是和單字節一樣的

總結

以上是生活随笔為你收集整理的I2C 总线协议详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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