iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 18
1
IoT

熟悉Arduino的Maker必看!30天帶你快速入門基於STM32嵌入式開發~系列 第 18

[Day 18]-【STM32系列】IC之間常用的通訊協定 I²C

今天會帶各位對I²C有初步的認識,因為在後面我們將會使用到LCD、OLED顯示器,氣壓感測器或三軸加速度感測器使用I²C通訊協定占多數,所以今天我們將介紹I²C是如何在晶片通訊中工作的。

https://ithelp.ithome.com.tw/upload/images/20201003/201200937QuVMc1KXW.jpg
I2C(Inter-Integrated Circuit),是一個同步的Tx、Rx通訊協定,且I²C的好處就是他只需要兩條線就可以在不同設備之間進行通信,分別是SCL(clock)、SDA(data)組成,為主從式架構,傳送、接收都是由Master發號司令,為了和Slave進行通訊,Master會先發送傳送地址,告訴大家現在要跟哪個Slave通訊,接著各個Slave將ACK(確認)發送給Master並開始通訊

https://ithelp.ithome.com.tw/upload/images/20201003/20120093IJOO1XQIpm.jpg

I²C傳送資料會先發送一個start condition的信號,接著開始傳資料,結束時再傳送一個stop condition代表結束

https://ithelp.ithome.com.tw/upload/images/20201003/20120093eLM8ktshn5.jpg

通常不外乎下面幾個步驟:
1.Master發送start condition信號,SCL為高電瓶的時候,SDA由高電瓶向低電瓶觸發,如下圖最左方所示
2.由Master發送 7 bit address 以及 1 bit R/W(1讀/0寫)
3.接著由Slave發送ACK(確認)給Master端,表示已收到資料
4.如果最低位元為低電瓶(即Write寫入),則從Master開始向Slave發送1byte資料。在每個byte之後,Slave發送ACK以確認接收到的數據。
5.如果最低位元為高電瓶(即Read接收),則Slave開始向Master發送數據,並且在接收到每筆byte後,Master將ACK發送給Slave以確認接收到的數據。
6.傳輸完成後,Master將SCL為高電瓶,SDA由低電瓶向高電瓶觸發,並停止發送。

https://ithelp.ithome.com.tw/upload/images/20201003/20120093q4uKEvJhFP.png

你可能會注意到I²C只使用兩條SDA及SCL資料傳輸,基本上典型的工作電壓範圍為+3.3V或+5v,如上圖所示,會利用上拉電阻將電位上拉(通常為4.7k)連接VCC,所有工作依照Start->Data->Stop。

I²C是嵌入式開發相當重要的部分,因為Master傳送 7 bit address,我們僅僅只需要控制兩條線就能只用1個Master控制128個Slave,這大大減少了IO的控制

我們將在後面的教學中使用I2C跟周邊設備通訊,例如LCD,OLED,加速感測計(ADXL345),溫濕度傳感器(DHT11),距離傳感器(HC-SR04)等等。


相關連結


結語

嗯哼


上一篇
[Day 17]-【STM32系列】4×4 keypad with STM32
下一篇
[Day 19]-【STM32系列】16 x 2 LCD 液晶顯示器 with I²C
系列文
熟悉Arduino的Maker必看!30天帶你快速入門基於STM32嵌入式開發~30

尚未有邦友留言

立即登入留言