低速通信接口(二)I2C

I2C引腳定義:都是雙向I/O線,接口電路爲開漏輸出,需通過上拉電阻接電源。當總線空閒時,兩根線都是高電平,連到總線上的任一器件輸出的低電平,都將使總線的信號變低。

  • SDA(串行數據線)
  • SCL(串行時鐘線)
    在這裏插入圖片描述
    二、數據有效性
    I2C總線進行數據傳送時,時鐘信號爲高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號爲低電平期間,數據線上的高電平或低電平狀態才允許變化
  • scl處於高電平的時候,如果sda處於低電平:傳輸數據0,sda處於高電平:傳輸數據1
  • 在scl處於高電平的時候,sda用來傳輸數據,必須保持電平穩定
  • 如果要產生數據即sda需要變化時,只能在scl處於低電平的時候

起始信號與終止信號
SCL線爲高電平期間,SDA線由高電平向低電平的變化表示起始信號;
SCL線爲高電平期間,SDA線由低電平向高電平的變化表示終止信號。
(連接到I2C總線上的器件,若具有I2C總線的硬件接口,則很容易檢測到起始和終止信號,若接受器件需要等待,可以先將SCL拉成低電平,從而使主機處於等待狀態,直到接受器件準備好,再釋放SCL線爲高電平,使數據傳送可以繼續進行)
在這裏插入圖片描述
數據傳輸格式,7-bit尋址數據傳輸
(1)字節的傳送與應答
每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節後面都必須跟隨一位應答位(即一幀共有9位)
在這裏插入圖片描述

  1. 由於某種原因從機不對主機尋址信號應答時(如從機正在進行實時性的處理工作而無法接收總線上的數據),它必須將數據線置於高電平,而由主機產生一個終止信號以結束總線的數據傳送。
  2. 如果從機對主機進行了應答,但在數據傳送一段時間後無法繼續接收更多的數據時,從機可以通過對無法接收的第一個數據字節的“非應答”【sda處於高電平】通知主機,主機則應發出終止信號以結束數據的繼續傳送。
  3. 當主機接收數據時,它收到最後一個數據字節後,必須向從機發出一個結束傳送的信號。這個信號是由對從機的“非應答”【拉高sda】來實現的。然後,從機釋放SDA線,以允許主機產生終止信號

數據幀格式
I2C總線上傳送的數據信號是廣義的,即包括地址信號,又包括真正的數據信號。
在起始信號後必須傳送一個從機的地址(7位),第8位數數據的傳送方向位(R/T),用“0”表示主機發送數據(T),“1”表示主機接收數據(R)。每次數據傳送總是由主機產生的終止信號結束。在總線的一次數據傳送過程中,可以有以下幾種組合方式:
a) 主機向從機發送數據:
在這裏插入圖片描述
在這裏插入圖片描述
注1:有陰影部分表示數據由主機向從機傳送,無陰影部分則表示數據由從機向主機傳送。

A表示應答, A非表示非應答(高電平)。S表示起始信號,P表示終止信號。

注2:I2C總線協議有明確的規定:採用7位的尋址字節(尋址字節是起始信號後的第一個字節)

b) 主機從從機中讀取數據
在這裏插入圖片描述
在這裏插入圖片描述
c)主機從從機中既有讀數據也有寫數據
在這裏插入圖片描述
10-bit尋址數據傳輸
採用10位地址位擴充了I2C的地址範圍,7位和10位地址設備都可以共存於同一個I2C總線系統(但是使用10位的I2C設備不多)
10位從機地址由START或者Repeated Start 後兩個字節決定。第一個字節的前7位格式爲1111 0XX,其中XX代表10位地址最高兩位(MSB),第一個字節的第8位代表R/W位。
(1)主機寫數據-從機接收,傳輸方向不變
在這裏插入圖片描述
(2)主機讀數據-從機發送,傳輸方向改變

在這裏插入圖片描述

發佈了65 篇原創文章 · 獲贊 5 · 訪問量 3672
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章