1 簡介
IIC-BUS的英文全稱是Inter-Integrated Circuit Bus,其主要的目的是實(shí)現(xiàn)微控制器與外圍設(shè)備進(jìn)行數(shù)據(jù)傳輸。它是一種半雙工通信方式,通信方式簡單,僅包含SDA(數(shù)據(jù)總線)和SCL(時鐘總線)組成。通信總線通常由主設(shè)備和從設(shè)備組成,從設(shè)備是通過設(shè)備地址來進(jìn)行區(qū)分,在同一時刻,設(shè)備之間數(shù)據(jù)傳送只能由一個設(shè)備傳送給對應(yīng)地址的設(shè)備。
什么是I2C總線主設(shè)備和從設(shè)備?
主設(shè)備 :I2C總線的主導(dǎo)者,能向從西安發(fā)送起始信號和中止信號,且能決定總線數(shù)據(jù)的發(fā)送與接收。另外,主設(shè)備能發(fā)送指令,同時既能向從設(shè)備讀取數(shù)據(jù)也能向從設(shè)備寫入數(shù)據(jù)。
從設(shè)備 :I2C總線的被動者,對主設(shè)備發(fā)送的數(shù)據(jù)做出及時響應(yīng)。從設(shè)備的類型比較多,具體可以是EEROM、各種傳感器等。
I2C總線最大可以掛在多少個設(shè)備?
最大電容限制(標(biāo)準(zhǔn)模式和快速模式為400pF,高速模式為500pF)。且在實(shí)際的應(yīng)用過程中最好保證I2C設(shè)備不超過8個(經(jīng)驗(yàn)之談)。
有些設(shè)備預(yù)留地址線的僅3位(相同設(shè)備最多掛在8個,2^3=8),甚至更少。
I2C總線最大的傳輸速率為多少?
序號 | 模式 | 最大速率 |
---|---|---|
1 | 標(biāo)準(zhǔn)模式 | 100kb/s |
2 | 快速模式 | 400kbit/s |
3 | 高速模式 | 3.4Mbit/s |
之前在講串口電路時,有講過一個“波特率”概念,不知道是否有人知道波特率和比特率的區(qū)別?
波特率:單位時間內(nèi)傳輸?shù)拇a元個數(shù)。
比特率:單位時間內(nèi)傳輸?shù)亩壷莆粩?shù)。
二者換算關(guān)系為:比特率=波特率×log2n,此處分享一個計算的案例:
2 I2C總線特點(diǎn)
- 簡單和靈活 :僅包含數(shù)據(jù)線和時鐘線,物理通信鏈路簡單。
- 雙向傳輸 :主設(shè)備既能向從設(shè)備發(fā)送數(shù)據(jù),從設(shè)備也能向主設(shè)備發(fā)送數(shù)據(jù)。
- 時鐘同步 :采用串行時鐘總線,能有效保證數(shù)據(jù)的準(zhǔn)確性。
- 多種設(shè)備支持 :總線上掛載的設(shè)備,可以掛在多種不同設(shè)備,不受設(shè)備類型的影響。
3 編碼規(guī)則
- 起始信號和停止信號
- 起始信號:當(dāng)時鐘信號為高電平時,數(shù)據(jù)線由高電平變?yōu)榈碗娖降倪^程。
- 停止信號:當(dāng)時鐘信號為高電平時,數(shù)據(jù)線由低電平變?yōu)楦唠娖降倪^程。
注意: 在IIC空閑時,SDA、SCL都是保持高電平 。(I2C信號出現(xiàn)故障時,先查看SCL和SDA的電平)
- 應(yīng)答信號和非應(yīng)答信號
- 應(yīng)答信號:當(dāng)主設(shè)備傳送8位數(shù)據(jù)結(jié)束后,主機(jī)會將SDA線拉高,此時如果從設(shè)備正確接收數(shù)據(jù)則會將SDA拉低并在SCL高電平時保持低電平,這個信號為ACK信號
- 非應(yīng)答信號:如果在傳輸8位數(shù)據(jù)后從機(jī)沒有將SDA拉低則該信號為NACK。
4 信號傳輸
IIC總線上面的每一個設(shè)備都有唯一的地址與之對應(yīng),信號傳輸時也是根據(jù)指定的地址找到設(shè)備來傳輸信號。
- 寫操作
- 主設(shè)備確定從設(shè)備地址,發(fā)送起始信號;
- 向總線設(shè)備的地址以及數(shù)據(jù)傳輸方向;
- 從設(shè)備收到主設(shè)備的信號后沒回復(fù)一個應(yīng)答信號;
- 主設(shè)備向從設(shè)備以字節(jié)為單位發(fā)送數(shù)據(jù),且每發(fā)送一個數(shù)據(jù),都會接收來自從設(shè)備的應(yīng)答信號;
- 數(shù)據(jù)發(fā)送完成后,從設(shè)備發(fā)送一個停止信號,表明此次數(shù)據(jù)傳輸結(jié)束。
- 讀數(shù)據(jù)
- 主設(shè)備確認(rèn)從設(shè)備地址,發(fā)送起始信號;
- 向總線上發(fā)送從設(shè)備的地址以及讀取數(shù)據(jù)的命令;
- 對應(yīng)的從設(shè)備回復(fù)應(yīng)答信號;
- 從設(shè)備向主設(shè)備回復(fù)主設(shè)備要讀取的數(shù)據(jù);
- 從設(shè)備數(shù)據(jù)發(fā)送給完成后,主機(jī)向從設(shè)備發(fā)送一個非應(yīng)答信號,然后中止數(shù)據(jù)的讀取。
5 總線仲裁
總線上存在兩個及兩個以上主設(shè)備時,每個節(jié)點(diǎn)都可以作為主設(shè)備向總線上發(fā)送命令或者數(shù)據(jù)。當(dāng)總線上同時存在兩個或者兩個以上主設(shè)備發(fā)送信號時,就會造成總線沖突。此時,就需要進(jìn)行I2C總線仲裁。分以下兩個方面來說:
時鐘同步
時鐘總線(SCL)具有“線與”的邏輯功能,就是當(dāng)總線有任意一個節(jié)點(diǎn)向總線發(fā)送低電平時,總線就會呈現(xiàn)低電平的狀態(tài)。(所有節(jié)點(diǎn)呈現(xiàn)高電平時,總線表現(xiàn)為高電平)
SDA仲裁
SDA仲裁也是基于“線與”的邏輯功能,節(jié)點(diǎn)發(fā)送數(shù)據(jù)后,比較總線與發(fā)送的數(shù)據(jù)是否一致,保持一致則繼續(xù)發(fā)送,否則退出競爭。SDA仲裁這種機(jī)制保證了I2C中線上即使有多個主設(shè)備,也不會造成數(shù)據(jù)丟失。
仲裁過程
- 設(shè)備1和設(shè)備2同時向設(shè)備發(fā)送起始信號,總線上電平與發(fā)送電平一致,繼續(xù)發(fā)送數(shù)據(jù);
- 設(shè)備1和設(shè)備2同時向設(shè)備發(fā)送低電平,總線上電平與發(fā)送電平一致,繼續(xù)發(fā)送數(shù)據(jù);
- 設(shè)備1發(fā)送高電平。設(shè)備2發(fā)送低電平。此時,總線呈現(xiàn)低電平狀態(tài)。總線的電平與設(shè)備1發(fā)送的電平不一致,退出競爭,且變?yōu)閺脑O(shè)備。設(shè)備2繼續(xù)發(fā)送數(shù)據(jù)。
5 上拉電阻計算
由于I2C總線端口的高電平是通過上拉電阻實(shí)現(xiàn),線上的電平從低變高時,電源通過上拉電阻對線上負(fù)載電容CL充電,這需要一定的上升時間。
電容充電一般公式:
整理可得:
I2C規(guī)范將低于VIL或0.3VDD的電壓定義為邏輯低電平,同樣將高于VIH或0.7VDD的電壓定義為邏輯高電平。由上式可以求得:
即T1=0.356675*CL
所以最大上拉電阻為:
結(jié)論:電源電壓決定上拉電阻的最小值,總線負(fù)載電容決定上拉電阻的最大值。
當(dāng)Tr取最大值,CL取最小值時,R有最大值。
模式 | 上升沿的最大時間 | 總線負(fù)載最大容限 |
---|---|---|
標(biāo)準(zhǔn)模式 | 1000ns | 400pF |
快速模式 | 300ns | 400pF |
高速模式 | 120ns | 550pF |
所以快速模式下,負(fù)載電容為50pF:
-
微控制器
+關(guān)注
關(guān)注
48文章
7576瀏覽量
151725 -
電路設(shè)計
+關(guān)注
關(guān)注
6678文章
2459瀏覽量
204933 -
總線
+關(guān)注
關(guān)注
10文章
2894瀏覽量
88218 -
I2C
+關(guān)注
關(guān)注
28文章
1494瀏覽量
124099 -
I2C總線
+關(guān)注
關(guān)注
8文章
391瀏覽量
61056
發(fā)布評論請先 登錄
相關(guān)推薦
評論