I2C 協議由 Philip 公司開發,是一種簡單高效的串行通信協議,具體詳細內容可參見 I2C 手冊,I2C 有兩個信號線,SCL 和 SDA。下圖為 I2C 的幀格式:
I2C 可以在一次傳輸中傳輸多個數據幀,這里以單幀為例,多幀傳輸的會在以后的文章中詳細介紹。
數據幀可以分為以下幾個部分:
- 起始位:當 SCL 為高電平的時候,SDA 拉低,表示起始位。
- 數據位:起始位之后的跟的 8 個數據位。
- 應答位(ACK),在 8 個數據為傳輸結束之后,主機釋放 SDA ,將其拉高,從機拉低 SDA作為應答,表示從機接受到了數據。
- 結束位,應答為結束之后,在 SCL 為高電平的時候,SDA 拉高,表示結束位。
需要特別注意的是應答位(ACK),在主機發送從機接受的狀況下,應答位由從機發送,具體內容因芯片而異。
這里使用單片機來發送一個 I2C 的數據幀 0xB2,代碼如下:
編譯下載運行,然后邏輯分析儀的顯示結果如下:
可以看到,雖然波形占空比一塌糊塗w(゚Д゚)w的,單片機忠誠的輸出了 0xB2 這個參數。I2C 還有連續發送的功能,實現起來也並不困難。下一章節會是 PCF 8563 的部分。
本篇就在這里告一段落了,ヾ(•ω•`)o。