【ARM】Exynos 4412 IIC(I2C)總線詳解

概述


Exynos 4412支持四路多主機I2C串行總線,爲了使連接總線上主機和外設之間實現數據傳輸,使用了一條SDA(Serial Data Line)線和一條SCL(Serial Clock Line)線,這兩條都支持雙向傳輸。

當I2C總線處於多主機模式時,多個Exynos 4412處理器都可以與從設備收發數據。I2C總線上的主設備負責啓動和結束一次數據傳輸。Exynos 4412的I2C總線使用標準的總線仲裁規程來實現多主機、多從機的數據傳輸。

要實現對I2C總線的控制,你需要修改下面這些寄存器的值:

  • 控制寄存器 —— I2CCON
  • 控制/狀態寄存器 —— I2CSTAT
  • 發送/接收移位寄存器 —— I2CDS
  • 地址寄存器 —— I2CADDR

當I2C總線處於空閒狀態時,SCL和SDA都是高電平。當SCL爲高電平時,SDA從高電平變爲低電平表示一個開始信號;當SCL爲高電平時,SDA從低電平變爲高電平表示一個結束信號。

開始信號和結束信號由主設備負責生成。當發出起始信號後,I2CDS的前七位將作爲從設備的地址被髮送到SDA線上。這個地址決定了主設備選擇了總線上的哪一個從設備。I2CDS的第八位標識主設備是要讀取數據還是寫入數據。

每一次數據傳輸放到SDA總線上的數據必須是一個字節,即8位。至於傳送多少個字節則沒有限制。數據發送時,總是從數據的最高位MSB(Most Significant Bit)開始發送。在每一個字節的最後,也就是第九個時鐘週期,將緊跟一個ACK位,由接收方發出,表示數據已收到。

特徵


  • 9通道、多主機、多從機的總線接口。(8個通用的通道,一個專用於HDMI的通道)
  • 7位地址
  • 串行、面向字節的雙向數據傳輸
  • 標準模式最高支持100kbit/s的速率
  • 快速模式最高支持400kbit/s的速率
  • 支持主發送、主接收、從發送、從接收四種模式
  • 支持基於中斷或者輪詢的事件

I2C總線框圖


I2C-Bus Block Diagram

I2C總線接口操作


Exynos 4412支持的四中操作模式如下:

  • 主發送模式
  • 主接收模式
  • 從發送模式
  • 從接收模式

開始/停止信號

當I2C總線接口處於空閒狀態時,它通常處於從設備模式,或者說在檢測到開始信號之前,接口處於從設備模式。當控制器將接口修改爲主設備模式,就可以在SDA線上傳輸數據,以及在SCL線上生成時鐘信號。

一個開始信號將會通過SDA線傳輸1byte的數據,一個停止信號將結束數據傳輸。

當一個主設備發送了一個開始信號,它同時需要發送一個從設備的地址來通知這個從設備。1byte的數據包含7位地址和1位讀寫標誌位,0表示寫,1表示讀。

主設備通過發送停止信號來結束數據傳輸。如果主設備想繼續傳輸數據,它需要重新發送一個開始信號和從設備地址。

下圖展示開始信號和停止信號的電平變化:

Start and Stop Condition

數據傳輸格式

每一個放到SDA線上的字節數據必須是8位長度,每次傳輸的字節數量不限。緊跟在開始信號後面的第一個字節數據需要包含從設備的地址數據。一個ACK應答位緊跟在每個字節的後面,由接收方發出。I2C控制器先發送字節的高位數據,再發送低位數據。

下圖展示了I2C總線接口的數據格式:

I2C-Bus Interface Data Format

下圖描述的是I2C總線上的數據傳輸電位圖:

Data Transfer on the I2C-Bus

ACK應答信號的傳輸

要完成1個字節的數據傳輸操作,接收方需要向發送方發送一個ACK應答位。ACK脈衝信號出現在SCL線的第9個時鐘週期,由從設備負責將SDA線拉低來表示ACK。

當發送方接收到ACK應答信號,會將SDA置爲高電平從而釋放總線。通過軟件(I2CSTAT)可以使能或者禁用ACK發送功能。

下圖展示了I2C總線上的應答信號:

Acknowledgement on the I2C-Bus

讀寫操作

當I2C總線控制器處於發送模式,在新的數據被寫入I2CDS寄存器之前,總線接口將一直等待,同時SCL將一直處於低電平。當寫入數據後,控制器將釋放SCL。Exynos 4412通過中斷來判斷數據是否發送完成,當CPU接收到中斷,會自動把新的數據寫入到I2CDS中。

當I2C總線控制器處於接收模式,在寄存器被讀取之前,總線接口將一直等待,同時SCL線保持低電平。當讀取數據之後,控制器將釋放SCL。Exynos 4412通過中斷來判斷數據是否接收完成,當CPU接收到中斷,會自動讀取I2CDS中的數據。

每種模式下的操作流程圖

在你進行發送/接收操作之前:

  1. 如果有必要,把自己的從設備地址寫入到I2CADD中。
  2. 設置I2CCON寄存器:
    1. 開啓中斷
    2. 設置SCL的時鐘頻率
  3. 設置I2CSTAT使能Serial Output。

下圖描述了主發送模式下的操作流程:

Operations for Master/Transmitter Mode

下圖描述了主接收模式下的操作流程:

Operations for Master/Receiver Mode

下圖描述了從發送模式下的操作流程:

Operations for Slave/Transmitter Mode

下圖描述了從接收模式下的操作流程:

Operations for Slave/Receiver Mode

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