1. 物理接口: SCL + SDA
(1)SCL(serial clock):時鐘線,傳輸CLK信號,一般是I2C主設(shè)備向從設(shè)備提供時鐘的通道。
(2)SDA(serial data):數(shù)據(jù)線,通信數(shù)據(jù)都通過SDA線傳輸
2. 通信特征:串行、同步、非差分、低速率
(1)I2C屬于串行通信,所有的數(shù)據(jù)以位為單位在SDA線上串行傳輸。
(2)同步通信就是通信雙方工作在同一個時鐘下,一般 通信的A方通過一根CLK信號線傳輸A自己的時鐘給B,B工作在A傳輸?shù)臅r鐘下。所以同步通信的顯著特征就是:通信線中有CLK。
(3)非差分。因為I2C通信速率不高,而且通信雙方距離很近,對干擾不敏感,所以使用電平信號通信。
(4)低速率。I2C一般是用在同一個板子上的2個IC之間的通信,而且用來傳輸?shù)臄?shù)據(jù)量不大,所以本身通信速率很低(一般幾百KHz,不同的I2C芯片的通信速率可能不同,具體在編程的時候要看自己所使用的設(shè)備允許的I2C通信最高速率,不能超過這個速率)
3. 突出特征1:主設(shè)備+從設(shè)備
(1)I2C通信的時候,通信雙方地位是不對等的,而是分主設(shè)備和從設(shè)備。通信由主設(shè)備發(fā)起,由主設(shè)備主導(dǎo),從設(shè)備只是按照I2C協(xié)議被動的接受主設(shè)備的通信,并及時響應(yīng)。
(2)誰是主設(shè)備、誰是從設(shè)備是由通信雙方來定的(I2C協(xié)議并無規(guī)定),一般來說一個芯片可以只能做主設(shè)備、也可以只能做從設(shè)備、也可以既能當主設(shè)備又能當從設(shè)備。(像一些傳感器芯片設(shè)計的時候只能做從設(shè)備,有的芯片本身既可以當主設(shè)備又可以當從設(shè)備,通過軟件來配置是主設(shè)備還是從設(shè)備)
4. 突出特征2:
(1)I2C通信可以一對一(一個主設(shè)備對1個從設(shè)備),也可以一對多(一個主設(shè)備對多個從設(shè)備)
(2)主設(shè)備負責(zé)調(diào)度總線,決定某一時間和哪個從設(shè)備通信。注意:同一時間內(nèi),I2C的總線上只能傳輸一對設(shè)備的通信信息,所以同一時間只能有一個從設(shè)備和主設(shè)備通信,其他從設(shè)備處于“冬眠”。不能出來搗亂,否則通信就亂套了。
(3)每一個I2C從設(shè)備在通信中都有一個I2C從設(shè)備地址,這個設(shè)備地址是從設(shè)備本身固有的屬性,然后通信時主設(shè)備需要知道自己將要通信的那個從設(shè)備的地址,然后在通信中通過地址來甄別是不是自己要找的那個從設(shè)備。
5. I2C的通信時序
(1)什么是時序?
字面意思,時序就是時間順序,實際上在通信中時序就是通信線上按照時間順序發(fā)生的電平變化,以及這些變化對通信的意義就叫時序。
(2)I2C的總線空心狀態(tài)、起始位、結(jié)束位
總線的意思就是SCL與SDA加起來就叫做總線。
I2C總線上有1個主設(shè)備,n(n>=1)個從設(shè)備。I2C總線上有2種狀態(tài):空閑態(tài)(所有從設(shè)備都未和主設(shè)備通信,此時總線空閑)和忙態(tài)(其中一個從設(shè)備在和主設(shè)備通信,此時總線被這一對占用,其他從設(shè)備必須歇著)。
怎么區(qū)分總線處于空閑態(tài),SDA、SCL在通信的過程中也可能同時為高電平,但是,如果SDA、SCL如果連續(xù)多個周期同時處于高電平,則總線一定處于空閑態(tài)。
整個通信分為一個周期一個周期的,兩個相鄰的通信周期是空閑態(tài)。每一個通信周期由一個起始位開始,一個結(jié)束位結(jié)束,中間是本周期的通信數(shù)據(jù)。
起始位:起始位說的不是一個時間點,而是一個時間段,如上圖的t1到t2這個時間段,在t1到t2的這個時間段內(nèi),SCL一直保持了高電平,SDA由高電平到低電平跳變(下降沿)。接收方在接收到這樣一個電平變化之后就知道發(fā)送方要開始發(fā)送數(shù)據(jù)了,緊接著下一個周期就是數(shù)據(jù),
停止位:與起始位相似,結(jié)束位也是一個時間段。在這段時間內(nèi)總線狀態(tài)變化情況是:SCL先維持高電平,同時SDA線發(fā)生一個從低電平到高的上升沿。
起始位和停止位中間的就是通信位。
CLK上升沿鎖存數(shù)據(jù),CLK上升沿到來前SDA要提前準備好數(shù)據(jù)。
A是應(yīng)答信號,從設(shè)備的應(yīng)答是為了讓主設(shè)備知道自己已經(jīng)接收到了主設(shè)備的信息。相應(yīng)的主設(shè)備的應(yīng)答也是如此。
6. I2C數(shù)據(jù)傳輸格式(數(shù)據(jù)位&ACK)
(1)每一個通信周期的發(fā)起和結(jié)束都是由主設(shè)備來做的,從設(shè)備只有被動的響應(yīng)主設(shè)備,沒法自己自發(fā)的去做任何事情。
(2)主設(shè)備在通信周期會先發(fā)8位的從設(shè)備地址(其實8位中只有7位是從設(shè)備地址,還有1位表示主設(shè)備下面要寫入還是讀出)到總線(主設(shè)備是以廣播的形式發(fā)送的,只要是總線上的所有從設(shè)備其實都能收到這個信息)。然后總線上的每個從設(shè)備都能收到這個地址,并且收到地址后和自己的設(shè)備地址比較看是否相等。如果相等說明主設(shè)備本次通信 就和給我說話,如果不相等說明這次通信與我無關(guān),不用聽了不管了。
(3)發(fā)送方發(fā)送一段數(shù)據(jù)后,接收方需要回應(yīng)一個ACK。這個響應(yīng)本身只有1個bit位,不能攜帶有效信息,只能表示2個意思(要么表示收到數(shù)據(jù),即有效響應(yīng);要么表示未收到數(shù)據(jù),無效響應(yīng)),需要注意的是,到第九個周期的時候,主設(shè)備會釋放SDA,即讓其變?yōu)楦唠娖?,從設(shè)備會主動來拉低SDA,主設(shè)備會讀取此時的SDA,若讀取此時的SDA為則表示從設(shè)備已經(jīng)收到剛剛發(fā)送的信息,若讀取此時的SDA為則表示從設(shè)備沒有收到剛剛發(fā)送的信息。
(4)在某一個通信時刻,主設(shè)備和從設(shè)備只能有一個在發(fā)(占用總線,也就是向總線寫),另一個在收(從總線讀)。如果在某個時間主設(shè)備和從設(shè)備都試圖向總線寫那就完蛋了,通信就亂套了。
7. 數(shù)據(jù)在總線上的傳輸協(xié)議
(1)I2C通信時的基本數(shù)據(jù)單位也是以字節(jié)為單位的,每次傳輸?shù)挠行?shù)據(jù)都是1個字節(jié)(8位)。
(2)起始位及其后的8個clk中都是主設(shè)備在發(fā)送(主設(shè)備掌控總線),此時從設(shè)備只能讀取總線,通過讀總線來得知主設(shè)備發(fā)給從設(shè)備的信息;然后到了第9個周期,按照協(xié)議規(guī)定從設(shè)備需要發(fā)送ACK給主設(shè)備,所以此時主設(shè)備必須釋放總線(主設(shè)備把總線置為高電平然后不要動,其實就類似于總線空閑狀態(tài)),同時從設(shè)備試圖拉低總線發(fā)出ACK。如果從設(shè)備拉低總線失敗,或者從設(shè)備根本就沒有拉低總線,則主設(shè)備看到的現(xiàn)象就是總線在第9周期仍然一直保持高,這對主設(shè)備來說,意味著我沒有收到ACK,主設(shè)備就認為剛才給從設(shè)備發(fā)送的8字節(jié)不對(接收失?。?。
(3)由于I2C的速率很低,完全可以通gpio來模擬。
8. I2C控制器
通信雙方本質(zhì)上是通過時序在工作,但是時序會比較復(fù)雜不利于Soc軟件完成,于是乎解決方案是soc內(nèi)部內(nèi)置了硬件的控制器來產(chǎn)生通信時序。這樣我們寫軟件時只需要向控制器的寄存器中寫入配置值即可,控制器會產(chǎn)生適當?shù)臅r序在通信線上和對方通信。
(1)時鐘部分,時鐘來源是PCLK_PSYS,經(jīng)過內(nèi)部分頻最終得到I2C控制器的CLK,通信中這個CLK會通過SCL線傳給從設(shè)備。
(2)I2C總線控制邏輯(前臺代表是I2CCON、I2CSTAT這兩個寄存器),主要負責(zé)產(chǎn)生I2C通信時序。實際編程中要發(fā)送起始位、停止位、接收ACK等都是通過這兩個寄存器(背后所代表的電路模塊)實現(xiàn)的。
(3)移位寄存器(shift register),將代碼中要發(fā)送的字節(jié)數(shù)據(jù),通過移位寄存器變成1個位一個位的丟給SDA線上去發(fā)送/接收。
(4)地址寄存器+比較器 本I2C控制器做從設(shè)備的時候用。
文章來源:
編輯:ymf
-
傳感器
+關(guān)注
關(guān)注
2545文章
50445瀏覽量
751031 -
傳感器芯片
+關(guān)注
關(guān)注
6文章
200瀏覽量
23766 -
I2C
+關(guān)注
關(guān)注
28文章
1477瀏覽量
123052 -
SDA
+關(guān)注
關(guān)注
0文章
124瀏覽量
28083 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17101
發(fā)布評論請先 登錄
相關(guān)推薦
評論