一些中檔增強(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 總線(xiàn)上的從機(jī)通信。還將提供代碼示例以幫助讀者將模塊實(shí)現(xiàn)到他們自己的設(shè)計(jì)中。
I2C 總線(xiàn)規(guī)范
內(nèi)部集成電路 (I2C) 總線(xiàn)是由 Philips? Inc. 開(kāi)發(fā)的廣泛使用的行業(yè)標(biāo)準(zhǔn),用于在集成電路(例如串行 EEPROM 或其他微控制器)之間傳輸數(shù)據(jù)。設(shè)備在主/從環(huán)境中通信,其中主設(shè)備始終發(fā)起通信,從設(shè)備通過(guò)尋址進(jìn)行控制。I2C 總線(xiàn)可以有一個(gè)或多個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備。主設(shè)備是在總線(xiàn)上發(fā)起數(shù)據(jù)傳輸?shù)脑O(shè)備,負(fù)責(zé)生成總線(xiàn)上使用的串行時(shí)鐘。任何尋址的設(shè)備都被視為從設(shè)備。I2C 協(xié)議支持 7 位或 10 位尋址模式。從 MSb 開(kāi)始,一次執(zhí)行 8 位數(shù)據(jù)傳輸。
總線(xiàn)的物理接口由兩條雙向開(kāi)漏線(xiàn)組成,一條線(xiàn)用于串行時(shí)鐘(SCL),另一條線(xiàn)用于串行數(shù)據(jù)(SDA)。每條線(xiàn)路都需要一個(gè)上拉電阻來(lái)為線(xiàn)路提供電壓。將線(xiàn)拉到地面被認(rèn)為是邏輯低點(diǎn),而讓線(xiàn)浮動(dòng)被認(rèn)為是邏輯高點(diǎn)。當(dāng)總線(xiàn)空閑時(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 線(xiàn)上的數(shù)據(jù)必須是穩(wěn)定的。SDA 線(xiàn)上的任何變化只能在 SCL 線(xiàn)上的時(shí)鐘信號(hào)為低電平時(shí)發(fā)生。為每個(gè)傳輸?shù)臄?shù)據(jù)位生成一個(gè)時(shí)鐘脈沖。
I2C 規(guī)范將啟動(dòng)條件定義為 SDA 線(xiàn)從高電平變?yōu)榈碗娖綘顟B(tài),而 SCL 線(xiàn)為高電平。啟動(dòng)條件始終由主機(jī)生成,表示總線(xiàn)從空閑狀態(tài)轉(zhuǎn)換為活動(dòng)狀態(tài)。I2C 規(guī)范規(guī)定在開(kāi)始時(shí)不會(huì)發(fā)生總線(xiàn)沖突;但是,如果 MSSP 模塊在將 SDA 線(xiàn)置為低電平之前對(duì)其進(jìn)行采樣,則可能會(huì)發(fā)生總線(xiàn)沖突。
停止條件是 SDA 線(xiàn)從低到高狀態(tài)的轉(zhuǎn)換,而 SCL 線(xiàn)為高。在停止有效之前,必須至少出現(xiàn)一個(gè) SCL 低電平時(shí)間。因此,如果 SDA 線(xiàn)變?yōu)榈碗娖?,然后再次變?yōu)楦唠娖?,?SCL 線(xiàn)保持高電平,則僅檢測(cè)到啟動(dòng)條件。
圖 1 I2C 啟動(dòng)和停止條件
只要停止有效,重新啟動(dòng)或重復(fù)啟動(dòng)就有效。如果主機(jī)希望在終止當(dāng)前傳輸后保持總線(xiàn),它可以發(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)有釋放總線(xiàn),因此執(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)注
6067文章
44992瀏覽量
650584 -
I2C
+關(guān)注
關(guān)注
28文章
1541瀏覽量
127881 -
PIC16
+關(guān)注
關(guān)注
2文章
152瀏覽量
35280
發(fā)布評(píng)論請(qǐng)先 登錄
PIC18F I2C總線(xiàn)電容MSSP與Bit-Banging通信錯(cuò)誤
選擇PIC18F45 50的MSSP模塊作為I2C或SPI的困難
I2C Master到Master通信可能嗎?
pic16和gestic之間的I2c通信是否有可用的樣本代碼?
使用MSSP的I2C通信LCD屏幕不工作
使用MCC PIC24F進(jìn)行I2C故障恢復(fù)
PIC單片機(jī)之I2C(從模式)詳解

使用C18編譯器和MSSP模塊進(jìn)行I2C?串行EEPROM與PIC18單片機(jī)的接口設(shè)計(jì)

使用MSSP模塊進(jìn)行Microwire串行行EEPROM與PIC16器件的接口設(shè)計(jì)

使用MSSP模塊進(jìn)行I2C串行EEPROM與PIC16器件的接口設(shè)計(jì)說(shuō)明

評(píng)論