概述
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總線接口操作
Exynos 4412支持的四中操作模式如下:
- 主發送模式
- 主接收模式
- 從發送模式
- 從接收模式
開始/停止信號
當I2C總線接口處於空閒狀態時,它通常處於從設備模式,或者說在檢測到開始信號之前,接口處於從設備模式。當控制器將接口修改爲主設備模式,就可以在SDA線上傳輸數據,以及在SCL線上生成時鐘信號。
一個開始信號將會通過SDA線傳輸1byte的數據,一個停止信號將結束數據傳輸。
當一個主設備發送了一個開始信號,它同時需要發送一個從設備的地址來通知這個從設備。1byte的數據包含7位地址和1位讀寫標誌位,0表示寫,1表示讀。
主設備通過發送停止信號來結束數據傳輸。如果主設備想繼續傳輸數據,它需要重新發送一個開始信號和從設備地址。
下圖展示開始信號和停止信號的電平變化:
數據傳輸格式
每一個放到SDA線上的字節數據必須是8位長度,每次傳輸的字節數量不限。緊跟在開始信號後面的第一個字節數據需要包含從設備的地址數據。一個ACK應答位緊跟在每個字節的後面,由接收方發出。I2C控制器先發送字節的高位數據,再發送低位數據。
下圖展示了I2C總線接口的數據格式:
下圖描述的是I2C總線上的數據傳輸電位圖:
ACK應答信號的傳輸
要完成1個字節的數據傳輸操作,接收方需要向發送方發送一個ACK應答位。ACK脈衝信號出現在SCL線的第9個時鐘週期,由從設備負責將SDA線拉低來表示ACK。
當發送方接收到ACK應答信號,會將SDA置爲高電平從而釋放總線。通過軟件(I2CSTAT)可以使能或者禁用ACK發送功能。
下圖展示了I2C總線上的應答信號:
讀寫操作
當I2C總線控制器處於發送模式,在新的數據被寫入I2CDS寄存器之前,總線接口將一直等待,同時SCL將一直處於低電平。當寫入數據後,控制器將釋放SCL。Exynos 4412通過中斷來判斷數據是否發送完成,當CPU接收到中斷,會自動把新的數據寫入到I2CDS中。
當I2C總線控制器處於接收模式,在寄存器被讀取之前,總線接口將一直等待,同時SCL線保持低電平。當讀取數據之後,控制器將釋放SCL。Exynos 4412通過中斷來判斷數據是否接收完成,當CPU接收到中斷,會自動讀取I2CDS中的數據。
每種模式下的操作流程圖
在你進行發送/接收操作之前:
- 如果有必要,把自己的從設備地址寫入到I2CADD中。
- 設置I2CCON寄存器:
- 開啓中斷
- 設置SCL的時鐘頻率
- 設置I2CSTAT使能Serial Output。
下圖描述了主發送模式下的操作流程:
下圖描述了主接收模式下的操作流程:
下圖描述了從發送模式下的操作流程:
下圖描述了從接收模式下的操作流程: