I2C

1、I2C協議簡介
2、STM32的I 2C外設
3、固件庫中的I2C

1、I2C協議簡介
物理層:①②③④⑤⑥⑦⑧⑨⑩
①只有兩根總線,分別是SCL總線(串行時鐘線)、SDA總線(串行數據線)。主機和從機都要掛載在這兩根線上。【CL代表時鐘、D代表數據】
②尋址機制,在I2C總線上,有那麼多設備,如何確定主機是和EEPROM通信,而不是其他傳感器或者設備。因爲每個連接到總線的設備都有一個獨立的地址,主機可以利用這個地址進行不同設備之間的尋址。地址可以7位或者10位**,這個地址寫在協議的前面就可以識別了。
③總線通過上拉電阻接到電源。當I2C上的一個設備空閒時,不需和其他設備通信,這個設備輸出高阻態,而當所有設備都空閒時,都輸出高阻態時,由上拉電阻把總線拉成高電平【高阻態:相當於像是那個設備的引腳與總線斷開了,電阻非常大像是斷開了一樣,A、總線不受它的電壓影響了,B、也防止3.3V 和 0V 產生短路。相互影響 :很多總線都這樣,因爲所有設備都連在總線上,很容易相互影響、干擾,高阻態是個好東西。在I2C裏面有兩個電壓3.3V和0V,0V接地,3.3V不會是輸入3.3V,而是高阻態。如果兩個設備同時在I2C總線上,一個輸入0V,一個輸入3.3V,瞬間兩個設備之間短路了,所以高電平和空閒都用高阻態來表示。】
在這裏插入圖片描述
④多個主機同時使用總線時,爲了防止數據衝突,會利用仲裁的方式決定哪個設備用總線。當一個設備在工作,是邏輯0,其他設備是高阻態,沒辦法影響,那麼其他設備即使也在工作,也報廢了。所以,每當設備要工作之前都要檢查一下,現在總線上有沒有邏輯0,有沒有設備在傳輸數據,如果有就等待一下子。
在這裏插入圖片描述
⑤有三種傳輸模式:根據時鐘線的差別,標準:100kbit/s ,快速 :400kbit/s,高速:3.4Mbit/s。但目前大多I2C設備尚不支持高速模式。
⑥連接到相同總線的I2C數量收到最大電容的限制。
I2C協議層
①主機寫數據到從機:老師講課
STM32產生起始信號 -> 從機地址 -> 讀寫方向位 -> 從機應答 -> 傳輸數據 -> 從機應答 -> 傳輸數據 -> 從機不應答 -> 結束
從機地址是7位或者10位,在線上廣播這個地址。讀寫方向位,是跟數據方向有關,如果數據位是0,代表寫方向,主機寫到從機,如果是1,代表是讀方向。當從機得到匹配後,返回一個應答信號,主機知道從機可以使用。主機傳輸數據,每傳輸一個字節,從機應答一次,我接收到了。當從機的應答信號是不應答,代表傳輸要結束了,我接收不了了,要滿了。
在這裏插入圖片描述
②主機由從機中讀數據:老師提問
STM32產生起始信號,之後發出要提問的學生的地址,在讀寫方向位是設置爲1,設置爲從學生那裏讀取信息的模式,之後學生接到提問信號,迴應一下他在,之後便傳輸信息DATA模式,STM32接收到信息迴應,學生再傳輸信息,STM32迴應,代表着學生還可以傳輸,如果STM32不想要了便回覆非應答信號,之後由STM32出面結束。
在這裏插入圖片描述
③通訊複合格式
這種模式是爲了方便主機在茫茫存儲器地中讀取想讀取的地址,先來一個寫方向把想要操作的寄存器地址寫到EEPROM裏面,再來一個讀方向,再把信息返回回去。過程如下:傳輸起始信號 -> 廣播設備地址 -> 寫信號 -> 從機應答 -> 主機發送即將要讀取的存儲信息的地址 -> 存儲器的內部地址或者傳感器的寄存器地址-> 從機非應答 -> 讀過程
在這裏插入圖片描述
④通訊的起始信號和終止信號:
當SCL線爲高電平,SDA線由高電平向低電平切換,這個情況代表通訊開始。
當SCL線爲高電平,SDA線由低電平向高電平切換,這個情況代表通訊結束。
起始信號和終止信號一般都由主機產生
⑤數據有效性:
SCL爲高電平的時候SDA表述數據有效,在SCL爲低電平時,SDA線進行數據切換。一個時鐘傳輸一個bit.
在這裏插入圖片描述
⑥ 地址及數據方向:
一般用7個數據位表示從機地址,如果是主機寫從機是0,主機讀從機是1。如果說8位數據地地址就是把方向位加上了。
⑦響應
當數據發送端發送一個字節之後,進入高阻態,釋放總線控制權,等待數據接收端的響應,在第九個時鐘信號裏面,如果數據發送端把SDA線拉低代表應答,接收端高阻態代表不應答。非應答信號用NACK表示。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章