實際工程項目中,有很多地方都會用到I2C總線通信,比如說24C02存儲、傳感器接口等,能使用I2C這項技能,就成為了我們工程師日常必備的武器,那么我們就來詳細的說說I2C。
I2C是一種簡單的雙向二線制同步串行總線。只需要兩根線即可在連接于總線上的器件之間傳送信息,一根SCL時鐘線,一根就是SDA數據。需要注意的是SDA它是一個雙向傳輸的線,主機向從機發(fā)送信號通過SDA把數據送出去,從機向主機發(fā)送信號也是從SDA線把數據送出來。
I2C也可以一個一,也可以一對多,每個連接到總線的外圍設備都有一個獨立的地址,主機可以通過該地址來訪問不同設備。主機可通過SDA線發(fā)送設備地址查找從機。
因為I2C 通信IO口輸出結構都是配置為漏極開路或集電極開路輸出。所以時鐘線和數據線必須外部都接上拉電阻,當一對多輸出的時候,很多GPIO口會連接在同一根線上,可能會存在某個GPIO輸出高電平,另一個GPIO輸出低電平的情況。如果使用推挽輸出,你會發(fā)現這個GPIO的VCC和另一個GPIO的GND接在了一起,也就是短路了。如果換成開漏輸出VCC和GND之間多了個電阻,這樣電路就是安全的。
上拉電阻一般取值在1K-10K之間,上拉電阻的取值和通信速率會有一定的關系,如果上拉電阻的取值太大,那么信號的上升沿、下降沿就會很緩,會影響通信速率,這個具體的看應用的通信速率去測試波形,如果取的太小了,功耗很大,取的太大了,信號的上升沿就會慢,影響通信速率。
一般情況下I2C標準模式最高傳輸速率100Kbit/s,高速模式最高傳輸速率400Kbit,當然也有用軟件模擬I2C的時序來進行通信的,這個速率就需要自己去掌控測試了,說白了就是我們對著時序圖,抄一個同樣的波形出來。只要遵守同樣的約定,按照時序圖對應管腳拉高拉低就可以讀寫數據了。
在標準協議中區(qū)分啟動、停止、應答、等動作,下面我們來一起學習一下I2C的標準協議。
當檢測到SDA線上為下降沿,SLC線上為高電平,就表示收到了啟動信號,當檢測到SDA線上為上升沿,SLC線上為高電平,就表示收到了停止信號。
收到啟動信號之后就可以開始數據傳輸,收到停止信號表示幀數據傳輸完畢。在傳輸過程中,時鐘線SCL為高電平的時候,數據線SDA必須保持穩(wěn)定,不能改變電平狀態(tài),這樣才能有效傳輸,在時鐘線SCL為低電平的時候,數據線SDA可以改變狀態(tài),即:在SCL為高電平的時候,數據線SDA如果為高,那么傳送的就是1,如果SDA為低,那么傳送的就是0,在SCL為低電平的時候,你可以改變數據可以把數據變?yōu)?/1(圖中紅框交叉就表示數據的改變,從1變?yōu)? 從0變?yōu)?所以有了一個上升沿或者一個下降沿)。
在SCL的第9個時鐘位,對應的SDA數據為應答數據,應答數據是有方向的,可以是主設備應答,可以是從設備應答,應答不是固定的,可以是低電平為應答,也可以是高電平應答,高應答或者低應答是由通信協議決定的,只要約定一個信號作為應答就可以了,主機給從機發(fā)送數據,從機接到了應答主機,從機給主機發(fā)送數據,主機接到了,主機就要應答,這樣就形成了一個閉環(huán)。
以上就是一個標準的IIC通信標準規(guī)范,你清楚了嗎?
責任編輯:haq
-
通信
+關注
關注
18文章
6037瀏覽量
136090 -
總線
+關注
關注
10文章
2890瀏覽量
88145 -
I2C
+關注
關注
28文章
1489瀏覽量
123908
原文標題:你知道I2C為什么要接上拉嗎?
文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機匠人】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論