模擬IIC的實現

2021-09-25 21:04:37 字數 1095 閱讀 3141

模擬iic都使用了五年了,現在第一次以部落格的形式分享出來,後續還會繼續分享更多黑科技資料!

iic匯流排目前在微控制器開發應用當中非常的常見,比如四軸無人機要讀取陀螺儀加速計的資料可以用iic讀取,讀取磁力計需要用iic讀取,讀取氣壓計需要用到iic。iic匯流排用法相對簡單,硬體只需要接兩根線就可以,乙個時鐘線(scl),乙個資料線(sda);需要注意的是資料線在接硬體的時候一般需要外接上拉

對於iic其訊號主要有以下幾個 :

開始訊號、結束訊號和應答/非應答訊號。也如上圖;

然後我們直接上模擬iic程式:

static void i2c_delay(void)//先定義乙個iic時延,用於後面iic調整速率。

void i2c_start(void)

void i2c_stop(void)

void i2c_ack(void)

void i2c_noack(void)

uint8 i2c_waitack(void)

i2c_delay();

}scl_l;

return 1;

} //iic傳送完乙個位元組資料或者位址時需要等待應答,若收到應答則表示主機跟裝置通訊成功。

void i2c_sendbyte(uint8 sendbyte)

uint8 i2c_receivebyte(void)

return receive;

}

至此,iic大概介紹完。

這幾年在用iic過程中遇到的比較多的問題就是軟體iic寫好了但是硬體iic沒有加上拉,這個問題也可以通過示波器檢視,一般在乙個位元組時鐘內(8個時鐘週期),sda無法正常拉高拉低大概就是這個問題。

模擬IIC移植

因工程需要,需要將stm32f103上的模擬iic移植到stm32f415上,對比了下不同,發現只有主頻提高了,別的都一樣。可移植後讀數一直不正確。第一次除錯這種模擬通訊電路,於是將其放在while迴圈裡,其數字波形。通過原始直接的讀數方法判斷通訊過程中的電平變化。經比對發現寫位元組時波形和延時正常...

模擬iic和硬體iic驅動的區別

所謂硬體i2c對應晶元上的i2c外設,有相應i2c驅動電路,其所使用的i2c管腳也是專用的 軟體i2c一般是用gpio管腳,用軟體控制管腳狀態以模擬i2c通訊波形。硬體i2c的效率要遠高於軟體的,而軟體i2c由於不受管腳限制,介面比較靈活。模擬i2c 是通過gpio,軟體模擬暫存器的工作方式,而硬體...

模擬IIC匯流排協議

模擬iic 簡單講iic匯流排通訊就像你在和你物件打 講道理,步驟幾乎完全一致。回憶一下自己打 的過程。你 撥號 你物件 喂?你 巴拉巴拉 你物件 哦 你 巴拉巴拉 你物件 哦 你 掛啦,麼麼噠 你物件 哦 你 掛 通話結束 iic匯流排時序 那現在來看一下iic匯流排通訊過程 對於你來說,你是打 ...