軟體模擬協議:使用cpu直接控制通訊引腳(gpio)的電平,產生出符合通訊協議標準的邏輯。
硬體實現協議:由stm32的i2c片上外設專門負責實現i2c通訊協議,只要配置好該外設,它就會自動根據協議要求產生通訊訊號,收發資料並快取起來,cpu只要檢測該外設的狀態和訪問資料暫存器,就能完成資料收發。這種由硬體外設處理i2c協議的方式減輕了cpu的工作,且使軟體設計更加簡單。
stm32的i2c外設可用作通訊的主機及從機,支援100kbit/s和400kbit/s的速率,支援7位、10位裝置位址,支援dma資料傳輸,並具有資料校驗功能。
stm32框架結構
1.通訊引腳
stm32晶元有多個i2c外設,它們的i2c通訊訊號引出到不同的gpio引腳上,使用時必須配置到這些指定的引腳,以《stm32f10x規格書》為準。
2.時鐘控制邏輯
scl線的時鐘訊號,由i 2c介面根據時鐘控制暫存器(ccr)控制,控制的引數主要為時鐘頻率。
• 可選擇i2c通訊的「標準/快速」模式,這兩個模式分別i2c對應 100/400kbit/s的通訊速率。
• 在快速模式下可選擇scl時鐘的占空比,可選tlow/thigh=2或 tlow/thigh=16/9模式。
• ccr暫存器中12位的配置因子ccr,它與i2c外設的輸入時鐘源共同作用,產生scl時鐘。stm32的i2c外設輸入時鐘源為pclk1。
計算時鐘頻率:
標準模式: thigh=ccr*tpckl1 tlow = ccr*tpclk1
快速模式中tlow/thigh=2時: thigh = ccr*tpckl1 tlow = 2*ccr*tpckl1
快速模式中tlow/thigh=16/9時: thigh = 9*ccr*tpckl1 tlow = 16*ccr*tpckl1
例如,我們的pclk1=36mhz,想要配置400kbit/s的速率,計算方式如下:
pclk時鐘週期: tpclk1 = 1/36000000
目標scl時鐘週期: tscl = 1/400000
計算ccr的值: ccr = thigh/tpclk1 = 30
計算出來的ccr值寫入到暫存器即可。
3.資料控制邏輯
• 當向外傳送資料的時候,資料移位暫存器以「資料暫存器」為資料來源,把資料一位一位地通過sda訊號線傳送出去;
• 當從外部接收資料的時候,資料移位暫存器把sda訊號線取樣到的資料一位一位地儲存到「資料暫存器」中。
4.整體控制邏輯
整體控制邏輯負責協調整個i2c外設,控制邏輯的工作模式根據我們配置的「控制暫存器(cr1/cr2)」的引數而改變。
在外設工作時,控制邏輯會根據外設的工作狀態修改「狀態暫存器(sr1 和sr2)」,只要讀取這些暫存器相關的暫存器位,就可以了解i2c的工作狀態。
STM32 軟體模擬I2C
i2c的兩個引腳 scl引腳和sda引腳 需要既能輸出又能輸入,為了避免複雜的配置操作需要把該引腳配置為開漏輸出模式,該模式的說明如下圖所示 當微控制器的sda引腳配置為低電平時,sda線被拉低 當微控制器的sda引腳配置為高電平時,引腳埠為高阻態,sda線通過上拉電阻被vcc拉高。因此一定要注意在...
STM32之I2C 學習筆記
1 i2c是兩線式序列匯流排,由資料線sda和時鐘scl構成的序列匯流排,可傳送和接收資料。在cpu與被控ic之間 ic與ic之間進行雙向傳送,高速iic匯流排一般可達400kbps以上。2 iic是半雙工通訊方式,也就是說它既可以接收也可以傳送,但是由於它只有一根資料線,所以接收和傳送不能同時進行...
STM32之I2C模組除錯總結
前一段時間對stm32的i2c模組進行了除錯,今天做乙個總結。關於i2c協議的知識,這裡就不再贅述,網上有很多介紹i2c協議的文章。目前實現i2c協議的方式有兩種,一是採用gpio口來模擬i2c協議,另外一種是使用stm32自帶的i2c模組。雖說使用gpio口模擬i2c協議較為複雜,需要詳細了解i2...