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