【STM32筆記3】I2C的時序解讀與軟件模擬(即軟件I2C的實現,另有軟I2C與硬I2C的差異說明)

一、I2C簡介

1、IIC(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發的兩線式串行總線,用於連接微控制器及其外圍設備。它是由數據線 SDA 和時鐘 SCL 構成的串行總線,可發送和接收數據。 在 CPU 與被控 IC 之間、IC 與 IC 之間進行雙向傳送,高速 IIC 總線一般可達 400kbps 以上;

2、I2C 總線在傳送數據過程中共有三種類型信號,它們分別是:開始信號、結束信號和應答信號。

開始信號:SCL 爲高電平時,SDA 由高電平向低電平跳變,開始傳送數據; 

結束信號:SCL 爲高電平時,SDA 由低電平向高電平跳變,結束傳送數據; 

應答信號:接收數據的 IC 在接收到 8bit 數據後,向發送數據的 IC 發出特定的低電平脈衝, 表示已收到數據。CPU 向受控單元發出一個信號後,等待受控單元發出一個應答信號,CPU 接 收到應答信號後,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷爲受控單元出現故障;

注: 起始信號是必需的,結束信號和應答信號,都可以不要。

二、I2C總線數據傳輸的總時序圖(主要參考start、ack、stop三大信號的產生與運用)

1、start信號的實現

2、ack信號的實現(附不產生ack信號的實現)

3、stop信號的實現

4、一個字節大小的數據的send與read(注:都是由MSB-高位到LSB-低位)

 

三、指定地址讀取I2C芯片內部的一個字節大小的數據的時序圖(此處以24Cxx芯片爲例,主要參考其軟件模擬實現方式)

 

 四、指定地址寫入I2C芯片內部的一個字節大小的數據的時序圖(此處以24Cxx芯片爲例,主要參考其軟件模擬實現方式)

另:

1、I2C-24C02的初始化函數 

2、個人時序總結筆記

3、I2C軟件實現與硬件實現的差異 

所謂硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的;軟件I2C一般是用GPIO管腳(只不過此處所用到的GPIO口恰巧是芯片內部硬件I2C所分配的複用引腳PB6、PB7),用軟件控制管腳狀態以模擬I2C通信波形。

(1)硬件I2C的效率要遠高於軟件的,而軟件I2C由於不受管腳限制,接口比較靈活。模擬I2C 是通過GPIO,軟件模擬寄存器的工作方式,而硬件(固件)I2C是直接調用內部寄存器進行配置。如果要從具體硬件上來看,可以去看下芯片手冊,因爲固件I2C的端口是固定的;

(2)從底層配置上看,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否則就是模擬,可以看IIC寫函數,看裏面有木有調用現成的函數或者給某個寄存器賦值,如果有,則肯定是固件IIC功能,沒有的話肯定是數據一個bit一個bit模擬發生送的,肯定用到了循環,則爲模擬;

(3)從代碼量判斷,模擬的代碼量肯定比固件的要大。且硬件IIC用法比較複雜,模擬IIC的流程更清楚一些;硬件IIC速度比模擬快,並且可以用DMA;模擬IIC可以在任何管腳上,而硬件只能在固定管腳上;

附:此文爲本人經STM32實戰後總結所得,歡迎大家參考指點,謝謝。

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