IIC匯流排介紹
I 2C匯流排是一種用於IC器件之間連線的二線制匯流排。它通過SDA(序列資料線)及SCL(序列時鐘線)兩根線在連到總線上的器件之間傳送資料,並根據地址識別每個器件:不管是微控制器、儲存器、LCD驅動器還是鍵盤介面。I2C能用於替代標準的並行匯流排,能連線各種積體電路和功能模組。支援IIC的裝置有微控制器、ADC、DAC、儲存器、LCD控制器、LED驅動器以及實時時鐘等。採用I2C匯流排標準的微控制器或IC器件,其內部不僅有I2C介面電路,而且將內部各單元電路按功能劃分為若干相對獨立的模組,通過軟體定址實現片選,減少了器件片選線的連線。CPU不僅能通過指令將某個功能單元掛靠或摘離匯流排,還可對該單元的工作狀況進檢測,從而實現對硬體系統簡單而靈活的擴充套件與控制。
IIC匯流排介面特性
1.微控制器序列介面的傳送和接收一般都各用一條線,如的TXD和RXD,而I2C匯流排則根據器件的功能通過軟體程式使其可工作於傳送或接收方式。
2.當某個器件向總線上傳送資訊時,它就是傳送器(也叫主器件),而當其從總線上接收資訊時,又成為接收器(也叫從器件)。
3.主器件用於啟動總線上傳送資料併產生時鐘以開放傳送的器件,此時任何被定址的器件均被認為是從器件。I2C匯流排的控制完全由掛接在總線上的主器件送出的地址和資料決定。
4.總線上主和從(即傳送和接收)的關係不是一成不變的,而是取決於此時資料傳送的方向。
5.I2C匯流排的資料傳送速率在標準工作方式下為100kbit/s,快速方式下最高傳送速率400kbit/s。
6.在I2C總線上傳送資訊時的時鐘同步訊號是由掛接在SCL時鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘訊號下跳為低電平,將使SCL線一直保持低電平,使SCL線上的所有器件開始低電平期。
7.當所有器件的時鐘訊號都上跳為高電平時,低電平期結束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其後,第一個結束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產生一個同步時鐘。可見,時鐘低電平時間由時鐘低電平期最長的器件確定,而時鐘高電平時間由時鐘高電平期最短的器件確定。
8.在I2C匯流排技術規範中,開始和結束訊號(也稱啟動和停止訊號)的定義如下圖所示。
9.當時鍾線SCL為高電平時,資料線SDA由高電平跳變為低電平定義為“開始”訊號;
10.當SCL線為高電平時,SDA線發生低電平到高電平的跳變為“結束”訊號。
11.開始和結束訊號都是由主器件產生。
12.在開始訊號以後,匯流排即被認為處於忙狀態;在結束訊號以後的一段時間內,匯流排被認為是空閒的。
IIC匯流排資料傳送格式
1.在I2C匯流排開始訊號後,送出的第一個位元組資料是用來選擇從器件地址的。
(1)其中前7位為地址碼;
(2)第8位為方向位(R/W)。方向位為“0”表示傳送,即主器件把資訊寫到所選擇的從器件;方向位為“1”表示主器件將從從器件讀資訊。
2.在I2C總線上每次傳送的資料位元組數不限,但每一個位元組必須為8位,而且每個傳送的位元組後面必須跟一個認可位(第9位),也叫應答位(ACK);
為了完成一個位元組的傳輸,接收方應該向傳送方傳送一個ACK位。ACK應該發生在SCL線的第九個脈衝期間。當接受到ACK訊號時,傳送方應該釋放SDA線使SDA線電平為高。接收方應該驅動SDA線為低在ACK脈衝過程中。因此,在第九個SCL脈衝的高電平期間SDA保持為低(因為訊號是“與”的)。ACK的傳輸可以由軟體通過IICSTAT暫存器控制是否禁止,但它仍然是需要產生的。
IIC匯流排資料傳送過程
1.每次都是先傳最高位,通常從器件在接收到每個位元組後都會做出響應,即釋放SCL線返回高電平,準備接收下一個資料位元組,主器件可繼續傳送。
2.如果從器件正在處理一個實時事件而不能接收資料時,(例如正在處理一個內部中斷,在這個中斷處理完之前就不能接收I2C總線上的資料位元組)可以使時鐘SCL線保持低電平,從器件必須使SDA保持高電平,此時主器件產生1個結束訊號,使傳送異常結束,迫使主器件處於等待狀態。當從器件處理完畢時將釋放SCL線,主器件繼續傳送
讀寫操作
在傳送模式下,當一個數據傳輸時,IIC匯流排介面將等待直到IICDS暫存器收到一個新資料。在一個新資料寫入IICDS暫存器前,SCL訊號將保持為低。在資料被寫入之後,訊號線被釋放(為高)。ARM需要保持中斷訊號來辨別當前資料傳送完成。在ARM接到一箇中斷請求後,它將寫一個新的資料到IICDS。
在接收模式下,當一個數據接收時,IIC匯流排介面將等待直到IICDS暫存器資料被讀出。在新資料被讀出之前,SCL訊號保持為低。在資料被讀出後,訊號線被釋放(為高)。ARM應保持中斷訊號以辨別接收資料操作完成。在ARM收到一箇中斷請求時,它將從IICDS讀出資料。
IIC匯流排競爭和仲裁機制
1.總線上可能掛接有多個器件,有時會發生兩個或多個主器件同時想佔用匯流排的情
況。
2.I2C匯流排具有多主控能力,可以對發生在SDA線上的匯流排競爭進行仲裁。
3.其仲裁原則為:當多個主器件同時想佔用匯流排時,如果某個主器件傳送高電平,
而另一個主器件傳送低電平,則傳送電平與此時SDA匯流排電平不符的那個器件將
自動關閉其輸出級。
IIC匯流排工作流程
開始:訊號表明傳輸開始。
地址:主裝置傳送地址資訊,包含7位的從裝置地址和1位的指示位(表明讀或者寫,即資料流的方向)。
資料:根據指示位,資料在主裝置和從裝置之間傳輸。資料一般以8位傳輸,最重要的位放在前面;具體能傳輸多少量的資料並沒有限制。接收器上用一位的ACK表明每一個位元組都收到了。傳輸可以被終止和重新開始。
停止:訊號結束傳輸。
S3C2410的IIC匯流排控制器
S3C2410處理器提供了一個I2C序列匯流排,包括一個專門的序列資料線和序列時
鍾線。它的操作模式有四種:
1.主裝置傳送模式
2.主裝置接收模式
3.從裝置傳送模式
4.從裝置接收模式
下圖為S3C2410的IIC功能框圖:
傳送和接收步驟
在任何IIC Tx/Rx操作之前,下面的步驟必須被執行
1.如果需要的話,向IICADD暫存器寫從器件地址
2.設定IICCON暫存器
a)允許中斷
b)定義SCL的時鐘週期
3.設定IICSTAT來允許序列輸出
IIC匯流排控制相關暫存器
IIC匯流排控制暫存器(IICCON)
Register |
Address |
R/W |
Description |
Reset Value |
IICCON |
0x54000000 |
R/W |
匯流排控制暫存器 |
0x0X |
IICCON |
Bit |
Description |
Initial |