一、操作
1.1、系統(tǒng)的概述
I2C系統(tǒng)使用串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)進行數(shù)據(jù)傳輸。連接到這兩個信號的所有設(shè)備必須具有漏極開路或集電極開路輸出。這兩條線上的邏輯“與”功能都通過外部上拉電阻器來實現(xiàn)。
數(shù)據(jù)在主機和從機之間以字節(jié)為單位同步傳輸?shù)絊DA線上。每個數(shù)據(jù)字節(jié)為8位長。每個數(shù)據(jù)位都有一個SCL時鐘脈沖,并且首先發(fā)送MSB。每個傳送的字節(jié)后都有一個應(yīng)答位。在SCL的高電平期間對每個位進行采樣;因此,只能在SCL的低電平期間更改SDA線路電平,并且必須在SCL的高電平期間保持穩(wěn)定。若SCL為高電平時,SDA線上存在跳變則被解釋為命令(請參見START和STOP信號)。
1.2、IIC協(xié)議
從宏觀的角度講,IIC協(xié)議可以包含以下四個部分:
1、開始信號的產(chǎn)生(START)
2、從機地址傳輸
3、數(shù)據(jù)傳輸
4、停止信號產(chǎn)生(STOP)
1.2.1 開始信號(START)
當總線空閑/就緒時,這意味著沒有主機設(shè)備正在使用總線(SCL和SDA線均為高電平),主機可以通過發(fā)送START信號來啟動傳輸。START信號(通常稱為STA-bit)定義為:SCL為高電平時,SDA從高到低的跳變。START信號表示新數(shù)據(jù)傳輸?shù)拈_始。Repeated START是一種啟動信號,但沒有先產(chǎn)生一個停止信號。主機使用這種方法在不釋放總線的情況下,以不同的傳輸方式(例如,從寫入設(shè)備到從設(shè)備讀取)與另一個從機或同一從機通信。
當命令寄存器中的STA-bit置1且RD或WR位置1時,內(nèi)核產(chǎn)生一個START信號。根據(jù)SCL線的當前狀態(tài),將生成START或Repeated START。
1.2.2 地址線傳輸
在START信號之后,主機立即傳送的數(shù)據(jù)的第一個字節(jié)是從機地址。這是一個7位的調(diào)用地址,后跟RW位(7address+1RW)。RW位向從機發(fā)送數(shù)據(jù)傳輸方向信號。一個系統(tǒng)中的兩個從機不能具有相同的地址。只有地址與主機發(fā)送的地址匹配的從機會通過在第9個SCL時鐘周期將SDA拉為低電平來返回一個應(yīng)答位來做出響應(yīng)。(從機拉低SDA作為ACK)
內(nèi)核將從地址傳輸視為寫操作。將從設(shè)備的地址存儲在發(fā)送寄存器中,并將WR位置1。然后,內(nèi)核將在總線上傳輸從機地址。
1.2.3 數(shù)據(jù)傳輸
一旦成功完成從機尋址,就可以按照主機發(fā)送的RW位指定的方向逐字節(jié)進行數(shù)據(jù)傳輸。在第9個SCL時鐘周期中,每個傳輸?shù)淖止?jié)后都有一個應(yīng)答位。如果從機發(fā)出“無應(yīng)答”信號,則主機可以產(chǎn)生一個STOP信號來中止數(shù)據(jù)傳輸,或者產(chǎn)生一個Repeated START信號并開始一個新的傳輸周期。
如果作為接收設(shè)備的主機未應(yīng)答從機,則從機釋放SDA線供主機產(chǎn)生STOP或Repeated START信號。
要將數(shù)據(jù)寫入從機,將要發(fā)送的數(shù)據(jù)存儲在發(fā)送寄存器中,并將WR位置1。要從從機讀取數(shù)據(jù),請將RD位置1。在傳輸過程中,核心設(shè)置了TIP標志(Transfer in progress),指示正在進行傳輸。傳輸完成后,將重置TIP標志,設(shè)置IF標志(Interrupt Flag),并在使能時產(chǎn)生中斷。設(shè)置IF標志后,接收寄存器包含有效數(shù)據(jù)。當TIP標志復(fù)位時,用戶可以發(fā)出新的寫或讀命令。
1.2.4 停止信號
主機可以通過產(chǎn)生一個STOP信號來終止通信。STOP信號(通常稱為P位)定義為SCL為邏輯1時SDA從低到高的跳變。
1.3、仲裁過程
1.3.1 時鐘同步化
I2C總線是真正的多主機總線,可以在其上連接多個主機。如果兩個或多個主機同時嘗試控制總線,則時鐘同步過程將確定總線時鐘。由于I2C信號采用“線與”連接,從高到低的跳變會影響連接到總線的所有設(shè)備。因此,SCL線上從高電平到低電平的轉(zhuǎn)換會導(dǎo)致所有相關(guān)設(shè)備都將其低電平周期計算在內(nèi)。一旦設(shè)備時鐘變低,它將使SCL線保持在該狀態(tài),直到達到時鐘高狀態(tài)為止。由于采用“線與”連接,因此SCL線將由具有最短低電平周期的設(shè)備保持低電平,并由具有最短高電平周期的設(shè)備保持高電平。

1.3.2 時鐘伸展
從設(shè)備可以使用時鐘同步機制來降低傳輸比特率。主機將SCL拉低后,從機可以拉低SCL為所需的時間,然后釋放它。如果從機的SCL低電平周期大于主機的SCL低電平周期,則將延長所得到的SCL總線信號低電平周期,從而插入等待狀態(tài)。
編輯;jq
-
IIC
+關(guān)注
關(guān)注
11文章
309瀏覽量
40633 -
SDA
+關(guān)注
關(guān)注
0文章
125瀏覽量
29609 -
SCL
+關(guān)注
關(guān)注
1文章
244瀏覽量
18016 -
MSB
+關(guān)注
關(guān)注
0文章
14瀏覽量
8530
原文標題:IIC專題原理及應(yīng)用篇(一)
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
【瑞薩RA × Zephyr開發(fā)板評測】+模擬IIC實現(xiàn)OLED輸出(與硬件IIC輸出的失敗經(jīng)驗)
RA MCU眾測寶典 | IIC之【RA2E1】IIC通信的OLED顯示
Labview 解析dxf文件并顯示<一>
基于hbirdv2-sdk的iic 0.96寸lcd調(diào)試
惠山經(jīng)開區(qū)舉辦“機器人未來技術(shù)展望”專題講座 丁漢院士解析前沿趨勢
第一屆OpenHarmony CTF專題賽圓滿收官
匠人手記:一個單片機工作者的實踐與思考
零死角玩轉(zhuǎn)STM32——中級篇
用IIC接口的IIC_SCL和IIC_SDA引腳做普通GPIO,程序啟動不起來怎么解決?
ZYNQ FPGA的PS端IIC設(shè)備接口使用
解析IIC專題原理及應(yīng)用篇(一)
評論