接口技術 -- IIC

1 概念

IIC(Inter-Integrated Circuit)內部集成電路;多主機總線,非全雙工
Pin:
   SDA:串行數據線
   SCL:串行時鐘線
concept:
   同步:SCL時鐘線進行高低電平控制逐位仲裁
   仲裁:多主機嘗試控制總線,但只允許其中一個控制總線且報文不被破壞的過程。
圖1.1 IIC總線
模式:標準(100Kbit/s) 快速模式(400Kbit/s) 高速模式(3.4Mbit/s)
最大電容:400pF

2 傳輸過程

主機A->叢機B
   A尋址B -> A(發送器)發數據B(接收器) -> A終止
從機B->主機A
   A尋址B -> A(接收器)收數據B(發送器) -> A終止

總結:A(start) -> A(address)B[→] ->A(data)B[⇆] -> A(ack)B[⇆] -> A(stop)

3 數據規範

   按位傳輸

3.1 數據有效

圖2 數據規範
SDA數據需要在SCL高電平時保持穩定(讀數據時,SCL電平爲高)
SDA數據切換需要SCL電平變爲低電平

3.2 起始停止條件(由主機控制)

圖3 起始停止條件
起始:SCL高電平下,SDA由高切低 -> 忙狀態
停止:SCL高電平下,SDA由低切高 -> 空閒狀態

3.3 位規範

圖4 數據傳輸規範
   SDA每發送一字節,需跟一個響應位(每發一字節數據,需發送9位),MSB傳輸。
圖5 主從機響應
上圖爲主從機響應示意圖,由主機產生

  • SDA在SCL高電平,器件保持低電平
  • 從機不能響應(從機正在處理其它事件),從機SDA保持高電平(主機發送停止信號終止或重複起始信號開始新傳輸)
  • 從機響應傳輸一段時間,不能再接收數據,主機必須終止傳輸(從機在第一個字節後沒有響應)
  • 主機接收時,必須在從機不產生時鐘的最後一個字節不產生一個響應,向從機發送器通知數據結束,且從機釋放數據線,允許主機停止或重複

3.4 同步與仲裁(此概念重要)

3.4.1 同步

圖6 同步

  • 時鐘同步通過I2C接口到SCL;SCL變爲低電平->每個器件開始計數它們的低電平週期->此時器件會使SCL保持低電平狀態。
  • 只要器件有一者仍處於低電平,SCL會一直保持下去,其它低電平週期短的器件進入高電平等待狀態。
  • 所有器件釋放低電平後,時鐘線釋放變高電平,之後器件時鐘與SCL線狀態無差別。
  • 器件開始計數高電平週期,首先完成高電平週期的器件會再次將SCL拉低。
  • 總結:SCL低電平由低電平週期長的器件決定;SCL高電平週期由高電平週期短器件決定
  • 此模式除用於仲裁,還可作爲握手使能接收器處理字節級或位級的快速數據傳輸。器件可以快速接收數據字節,但需要更多時間保存字節或準備下一字節,從機以握手過程在接收響應一個字節後使SCL保持低電平,迫使主機進入等待狀態,直到下一字節傳輸。在位級中,器件通過延長每個時鐘的低電平週期減慢總線時鐘,從而,任何主機的速度都可以適配這個器件的內部操作速率。

3.4.2 仲裁

圖7 兩主機之間仲裁

  • SCL線爲低電平時,仲裁在SDA發生
    仲裁可以很多位:比較地址位(尋址相同,比較數據位、響應位)
  • 丟失仲裁的主機可以產生時鐘脈衝直至丟失仲裁的該字節末尾
  • 主機結合從機功能時,丟失仲裁,可能成爲贏得仲裁主機在尋址的器件,此時主機必須切換到從機模式
  • I2C總線控制只由地址或主機碼以及競爭主機發送的數據決定,沒有中央主機,總線也沒有任何優先權
  • 仲裁不可進行情況:重複起始條件和數據位;停止條件和數據位;重複起始條件和停止條件

4 協議時序規範(編程所需重點)

   本章不考慮10位尋址,只考慮7位尋址

4.1 寫時序

圖8 寫時序
→ 主機發送start信號:SCL(1) SDA(1->0)
→ 7bit設備地址
→ 1bit確定是讀/寫(1/0):0
→ 1bit響應(從->主) :SDA(0)
(→ 寫設備內部寄存器地址→ 響應)
注:這裏發送command,相當於判別是讀寄存器還是寫寄存器,該值完全由slave決定
→ 8bit數據(主->從)+1bit響應(從->主) //n次
→ 主機發送stop信號:SCL(1) SDA(0->1)

4.2 讀時序

圖9 讀時序
→ 主機發送start信號:SCL(1) SDA(1->0)
→ 7bit設備地址
→ 1bit確定是讀/寫(1/0):1(寫)
→ 1bit響應(從->主) :SDA(0)
(→ 讀設備內部寄存器地址 → 響應)
→ 7bit設備地址+1bit 確定讀寫:讀 + 1bit ACK
→ 8bit數據(主->從)+1bit響應(主->從) //n次
→ 主機發送stop信號:SCL(1) SDA(0->1)

5 其它

Q1:SDA如何實現雙向傳輸?
內部電路必然存在雙引腳(發送/接收)
Q2:主設備(從)發送數據時,從設備(主)發送引腳,不影響數據發送?
內部存在三極管
圖10 內部電路
表1 真值表

A B SDA
0 0 1(上拉電阻決定)
0 1 0
1 0 0
1 1 0

   下面解釋上拉電阻作用(I2C由於開漏輸出與上拉電阻簡化了協議設計):

  • I2C設備掛載時,應實現“線與”特性,這是實現仲裁與時鐘同步的關鍵。
  • 由於內部構成原因,一個輸出級爲漏極/集電極開路(開漏輸出),只能輸出低電平和高阻態(電阻很大,近似開路),也因此導致總線只受低電平影響(設備只能輸出低電平使用總線),從而完成“線與”功能。
  • 而如何實現總線高電平,這需要上拉電阻,當總線空閒時,所有設備輸出高阻態,無法將總線拉高,這就需要上拉電阻進行拉高,使總線呈現高電平。
    例如:ACK信號爲低電平,這是由於內部電路決定(主設備不驅動三極管,從設備也不驅動時,三極管截止,SDA由上拉電阻拉成高電平,從設備接收數據後,發響應信號,驅動三極管,使SDA變爲低電平)

上拉電阻對I2C協議的影響:

  • 上拉電阻大小不是隨便用的!涉及到通信速率與功耗的取捨。協議層對電平的變化時間有嚴格的要求和限制,而電平的變化受總線電氣特性的影響。
  • 對總線而言,上拉電阻越大,信號上升時間越長,通信速率越低,反之亦然。但阻值過小,總線低電平時電阻的大電流會增加電路功耗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章