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 总线协议详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode—220. 存在重复元素
- 下一篇: LeetCode—221. 最大正方形