一些中檔增強型內核 PIC16 單片機器件具有主同步串行端口(Master Synchronous Serial Port,MSSP)。MSSP 模塊可用于實現 I2CTM 或 SPI 通信協議。在本應用筆記中,將介紹 I2C 從協議的基礎知識。然后讀者應該更好地了解 MSSP 模塊以及它如何用于 I2C 總線上的從機通信。還將提供代碼示例以幫助讀者將模塊實現到他們自己的設計中。
I2C 總線規范
內部集成電路 (I2C) 總線是由 Philips? Inc. 開發的廣泛使用的行業標準,用于在集成電路(例如串行 EEPROM 或其他微控制器)之間傳輸數據。設備在主/從環境中通信,其中主設備始終發起通信,從設備通過尋址進行控制。I2C 總線可以有一個或多個主設備和一個或多個從設備。主設備是在總線上發起數據傳輸的設備,負責生成總線上使用的串行時鐘。任何尋址的設備都被視為從設備。I2C 協議支持 7 位或 10 位尋址模式。從 MSb 開始,一次執行 8 位數據傳輸。
總線的物理接口由兩條雙向開漏線組成,一條線用于串行時鐘(SCL),另一條線用于串行數據(SDA)。每條線路都需要一個上拉電阻來為線路提供電壓。將線拉到地面被認為是邏輯低點,而讓線浮動被認為是邏輯高點。當總線空閑時,SDA 和 SCL 均為邏輯高電平。數據傳輸速率在標準模式下高達 100 kbits/s,在快速模式下高達 400 kbits/s,在快速模式 Plus 下高達 1 Mbits/s,或在高速模式下高達 3.4 Mbits/s模式。在時鐘的高電平期間,SDA 線上的數據必須是穩定的。SDA 線上的任何變化只能在 SCL 線上的時鐘信號為低電平時發生。為每個傳輸的數據位生成一個時鐘脈沖。
I2C 規范將啟動條件定義為 SDA 線從高電平變為低電平狀態,而 SCL 線為高電平。啟動條件始終由主機生成,表示總線從空閑狀態轉換為活動狀態。I2C 規范規定在開始時不會發生總線沖突;但是,如果 MSSP 模塊在將 SDA 線置為低電平之前對其進行采樣,則可能會發生總線沖突。
停止條件是 SDA 線從低到高狀態的轉換,而 SCL 線為高。在停止有效之前,必須至少出現一個 SCL 低電平時間。因此,如果 SDA 線變為低電平,然后再次變為高電平,而 SCL 線保持高電平,則僅檢測到啟動條件。
圖 1 I2C 啟動和停止條件
只要停止有效,重新啟動或重復啟動就有效。如果主機希望在終止當前傳輸后保持總線,它可以發出重新啟動。Restart 對從機具有與 Start 相同的效果,重置所有從機邏輯并準備它在地址中計時。主站可能想要尋址同一個或另一個從站。這對于許多 I2C 外設很有用,例如非易失性 EEPROM 存儲器,其中 I2C 寫操作和讀操作連續完成。在這種情況下,寫操作指定要讀取的地址,讀操作獲取數據字節。由于主設備在將內存地址寫入設備后并沒有釋放總線,因此執行一個Restart序列來讀取內存地址的內容。
圖 2 I2C 重啟條件
在 10 位尋址從機模式下,主機需要重啟才能將數據從尋址的從機中取出。一旦從設備被完全尋址,匹配高地址字節和低地址字節,主設備就可以發出重啟并發送設置了 R/W 位的高地址字節。然后從邏輯將保持時鐘并準備輸出數據。在 10 位模式下與 R/W 清除完全匹配后,設置并保持先前??匹配標志。在停止條件之前,具有 R/W 清除或高地址匹配的高地址失敗。
編輯:hfy
-
單片機
+關注
關注
6032文章
44522瀏覽量
633213 -
I2C
+關注
關注
28文章
1482瀏覽量
123336 -
PIC16
+關注
關注
2文章
151瀏覽量
34914
發布評論請先 登錄
相關推薦
評論