|

【Maker電子學】I2C 界面解密 — PART 2

   
作者:Bird

上一回【Maker電子學】I2C 界面解密 — PART 1,我們聊了 I2C(以下寫為 I2C)界面的發展歷史,以及它的實體層訊號格式,這一次我們要進入 I2C 通訊邏輯的底層,來看看它在這個只有兩根線的 Wired-AND 線路上,是利用什麼樣的邏輯訊號進行通訊。

八位元時代的痕跡

I2C 和 SPI 一樣,都是在 8-bit CPU 當道的年代發展出來的東西,因此它的傳輸單位和 SPI 相同,都是以 byte 為單位。每一次 I2C 的傳輸可以包含很多個 bytes,但它最基本的單位就是 byte,每一個 byte 的後面會附加一個額外的 bit,稱為「acknowledge bit」,它是接收方用來通知傳送方「是的,我收到前面這個 byte 的資料了」或是「好了!夠了!別再送資料了」。大部分的 acknowledge bit 都屬於第一種狀況,只有少部分的通訊方式會用到第二種,我們之後說明通訊協定時會再詳述。

除了資料外,I2C bus 上還有另外兩種狀態,分別稱之為「start」和「stop」,用來指示傳輸的開始與結束。I2C 是 master/slave 的結構,所有的通訊只能由 master 發起,但由於 I2C 允許 bus 上可以有多個 master,而為了避免這些 master 們同時發起傳輸而打架,start 和 stop 便成為它們之間溝通協調的重要機制。

基本時序

下圖是 I2C 傳輸一個 byte 時的典型時序圖:

(圖片來源:Bird 提供)

I2C bus 上的邏輯訊號有幾個原則:

  1. I2C bus 為 idle high:當 bus 上沒有任何活動時,SCL 和 SDA 都維持在 high
  2. SCL 為 high 時,表示 SDA 上的資料為有效,此時 SDA 的狀態不能改變,以確保接收方可以取樣到正確的 SDA 狀態
  3. SCL 為 low 時,SDA 的狀態可以改變
  4. 當 SCL 為 high 時,如果 SDA 變動,有兩種特殊狀況:SCL high、SDA 下降—START;SCL high、SDA 上升—STOP

因為 I2C bus 為 idle high,當一個 master 要發起傳輸時,它會先把 SDA 拉到 low,而 SCL 維持不變,這時,根據上面的第 4 個原則,這是一個 START 狀態,也就是用來通知 bus 上的其它裝置,有一個傳輸要開始了。

接下來,master 會開始切換 SCL 訊號,在 SCL 上造出連續 8 個方波。根據上面的第 2 個和第 3 個原則,當 SCL 為 low 時,master 會變動 SDA 的狀態,以便讓要傳送的資料出現在 SDA 上,而當 SCL 為 high 時,SDA 的狀態就會保持不動,以便接收方讀取到 SDA 的狀態。

至於接收方會在什麼時候讀取到 SDA 的狀態呢?它可以在 SCL 為 high 時的任何一個時刻去讀取 SDA。對,就是整段 SCL 為 high 時,那一段 SCL 平平的時間,接收方都可以讀取 SDA,如下圖所示:

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Author: Liang Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *