一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:Mary Grace Legaspi 和 ? 2023-06-15 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Mary Grace LegaspiEric Peňa

I2C,即Inter-Integrated Circuit,是一種常用的串行通信協(xié)議,用于在器件之間——特別是兩個(gè)或兩個(gè)以上不同電路之間建立通信。I2C Primer是最常用的I2C。本文將介紹I2C Primer的基本特性和標(biāo)準(zhǔn),并重點(diǎn)說明在通信實(shí)現(xiàn)過程中如何正確使用該協(xié)議。從I2C的基本原理出發(fā),我們將介紹其變體子集——系統(tǒng)管理總線(SMBus)和電源管理總線(PMBus)——的可用性及二者的區(qū)別。這三種協(xié)議各有專門的功能,旨在滿足不同的客戶需求。

為何重要?

I2C 有利于設(shè)計(jì)人員在系統(tǒng)的眾多節(jié)點(diǎn)之間建立簡單、雙向、靈活的通信。I2C僅使用兩條雙向線來發(fā)送和接收信息,從而降低了復(fù)雜性。它還允許設(shè)計(jì)人員配置多個(gè)主節(jié)點(diǎn)系統(tǒng)IC之間的通信。I2C對(duì)管理系統(tǒng)和電源的開發(fā)人員也很有利,讓他們能夠在盡可能短的時(shí)間內(nèi)創(chuàng)建高質(zhì)量的產(chǎn)品。

"溝通(通信)對(duì)那些致力于溝通(通信)的人有用。"

—John Powell

通信協(xié)議在組織設(shè)備之間通信時(shí)扮演著重要角色。它基于系統(tǒng)要求而以不同方式進(jìn)行設(shè)計(jì)。此類協(xié)議具有明確的、為實(shí)現(xiàn)成功通信而協(xié)商一致的規(guī)則。

如果您曾經(jīng)使用LED顯示器、傳感器甚至加速度計(jì)模塊之類的東西構(gòu)建過系統(tǒng),那么您很可能已經(jīng)使用過I2C。I2C支持多個(gè)節(jié)點(diǎn)連接單個(gè)主器件和多個(gè)主器件連接多個(gè)節(jié)點(diǎn)的特性。如果您希望物盡其用,讓一個(gè)微控制器將數(shù)據(jù)記錄到單個(gè)存儲(chǔ)卡,或向單個(gè)LCD顯示文本,則此特性非常有用。

除了最常用的I2C Primer,I2C還有兩個(gè)變體,分別專注于系統(tǒng)和電源應(yīng)用,稱為系統(tǒng)管理總線(SMBus)和電源管理總線(PMBus)。

根據(jù)定義,Inter-Integrated Circuit (I2C)——也稱為Inter IC——是一種硬件通信協(xié)議,它通過一條多主器件、多節(jié)點(diǎn)、串行通信總線進(jìn)行同步通信。同步通信意味著兩個(gè)(或兩個(gè)以上)交換數(shù)據(jù)的器件共享一條公共時(shí)鐘線。I2C廣泛用于將低速外圍IC連接到處理器和微控制器。I2C總線由飛利浦公司設(shè)計(jì),它讓位于同一電路板上的器件之間可以輕松通信。

I2C Primer

接口

使用一條串行數(shù)據(jù)(SDA)線、一條串行時(shí)鐘(SCL)線和一個(gè)公共接地來承載所有通信,最大程度地減少連接。

wKgZomSKvsWAdY77AAA276SHfaM213.png

圖 1. 集成電路彼此直接通信

每個(gè)I2C器件有兩條線路:

SDA是供主器件和節(jié)點(diǎn)發(fā)送和接收數(shù)據(jù)的線路。

SCL是承載時(shí)鐘信號(hào)的線路。SCL總是由I2C主器件生成。規(guī)范對(duì)時(shí)鐘信號(hào)的低相位和高相位有最短周期要求。

I2C總線僅使用兩條雙向線路:每個(gè)器件的SDA和SCL用于簡單的IC間通信。

wKgaomSKvsuAHH6BAAAmfYIDK-Q788.png

圖 2. I2C 上拉電阻連接

硬件最重要的注意是在SDA和SCL上加入上拉電阻。I2C器件通過開集或開漏引腳連接到總線,將線路拉低。當(dāng)沒有數(shù)據(jù)傳輸時(shí),I2C總線處于高電平空閑狀態(tài);線路被被動(dòng)拉高。要傳輸數(shù)據(jù),須切換線路,即先拉低再釋放(又變?yōu)楦唠娖剑?shù)據(jù)位在時(shí)鐘下降沿傳輸。

開漏輸出需要一個(gè)上拉電阻(圖2中的Rp)才能正確輸出高電平。上拉電阻連接在輸出引腳和高電平所需的輸出電壓(圖2中的VDD)之間。

對(duì)于VCC和VDD (5 V)的典型值,4700 Ω是最常用的上拉電阻值。

作為參考,屏蔽2 AWG雙絞線電纜的電容范圍為100 pF?m至240pF?m。因此,I2C鏈路的最大總線長度約為1米(100 kBaud時(shí))或10米(10 kBaud時(shí))。非屏蔽電纜的電容通常要小得多,但只能用在以其他方式加以屏蔽的外殼內(nèi)。

表1總結(jié)了I2C的關(guān)鍵特性。

特性 規(guī)格
導(dǎo)線 2
最大速度 標(biāo)準(zhǔn)模式 = 100 kbps
快速模式 = 400 kbps
高速模式 = 3.4 Mbps
超快速模式 = 5 Mbps
同步或異步? 同步
串行或并行? 串行
最大主器件數(shù) 無限制
最大節(jié)點(diǎn)數(shù) 1008

理論上,尋址模式的最大節(jié)點(diǎn)數(shù)為27或210,但有16個(gè)地址保留用于特殊用途。

I2C 是同步的,因此位的輸出通過主器件和節(jié)點(diǎn)之間共享的時(shí)鐘信號(hào)與位的采樣同步。時(shí)鐘信號(hào)始終由主器件控制。

保留I2C節(jié)點(diǎn)地址

有16個(gè)保留I2C地址。這些地址對(duì)應(yīng)于以下兩種模式之一:0000 XXX或1111 XXX。表2顯示了為特殊目的而保留的I2C地址。

I2C 節(jié)點(diǎn)地址 R/W 位功能描述
0000 000 0 廣播地址
0000 000 1 起始字節(jié)
0000 001 X CBUS 地址
0000 010 X 保留用于不同總線格式
0000 011 X 保留供未來使用
0000 1XX X 高速模式主代碼
1111 1XX X 保留供未來使用
1111 0XX X 10位節(jié)點(diǎn)地址

I2C 工作原理

I2C 數(shù)據(jù)在消息中傳輸,消息被分解為數(shù)據(jù)幀。讀寫協(xié)議包含地址幀(即節(jié)點(diǎn)的二進(jìn)制地址)和另一個(gè)數(shù)據(jù)幀,后者包含所傳輸?shù)臄?shù)據(jù)、開始和停止條件、重復(fù)起始位、讀?寫位以及每個(gè)數(shù)據(jù)幀之間的應(yīng)答?不應(yīng)答位。

時(shí)序規(guī)格表

I2C 時(shí)序表也很重要,因?yàn)?a target="_blank">工程師利用它可以設(shè)計(jì)出與總線要求兼容的IC。每個(gè)數(shù)據(jù)速率都有自己的時(shí)序規(guī)格,主器件和節(jié)點(diǎn)必須遵守該規(guī)格才能正確傳輸數(shù)據(jù)。

表3顯示了時(shí)序規(guī)格表上給出的符號(hào)和參數(shù)。

符號(hào) 參數(shù) 單位
fSCL SCL 時(shí)鐘頻率 kHz
tHD(STA) (重復(fù))起始條件的保持時(shí)間 μs
tLOW 引腳的低電平周期 μs
tHIGH 引腳的高電平周期 μs
tSU(STA) 重復(fù)起始條件的建立時(shí)間 μs
tHD(DAT) 數(shù)據(jù)保持時(shí)間 μs
tSU(DAT) 數(shù)據(jù)建立時(shí)間 ns
tr SDA 信號(hào)的上升時(shí)間 ns
tf SDA 信號(hào)的下降時(shí)間 ns
tSU(STO) 停止條件的建立時(shí)間 μs

wKgaomSKva2AXtIxAAKlT9uRF0Y863.jpg

圖 3. I2C 消息

I2C 傳輸子協(xié)議

總線上的傳輸要么是讀操作,要么是寫操作。讀取和寫入?yún)f(xié)議建立在一系列子協(xié)議之上,例如起始和停止條件、重復(fù)起始位、地址字節(jié)、數(shù)據(jù)傳輸位和應(yīng)答?不應(yīng)答位。

起始條件

顧名思義,起始條件總是在傳輸開始時(shí)出現(xiàn),并由主器件發(fā)起。這樣做是為了喚醒總線上的空閑節(jié)點(diǎn)器件。SDA線從高電平切換到低電平,然后SCL線從高電平切換到低電平。參見圖4。

重復(fù)起始條件

在不發(fā)出停止條件的情況下,起始條件可以在傳輸期間重復(fù)。這是一種特殊情況,稱為重復(fù)起始,用于改變數(shù)據(jù)傳輸方向、重復(fù)嘗試傳輸、同步多個(gè)IC,甚至控制串行存儲(chǔ)器。參見圖5。

地址幀

地址幀包含7位或10位序列,具體取決于可用性(參見數(shù)據(jù)手冊)。參見圖6。

不像SPI,I2C沒有節(jié)點(diǎn)選擇線路,因此它需要另一種方法來讓節(jié)點(diǎn)知道數(shù)據(jù)正向其發(fā)送,而不是向另一個(gè)節(jié)點(diǎn)發(fā)送。這是通過尋址來實(shí)現(xiàn)的。地址幀始終是新消息中起始位之后的第一幀。

主器件將其想要與之通信的節(jié)點(diǎn)地址發(fā)送到其所連接的每個(gè)節(jié)點(diǎn)。然后,每個(gè)節(jié)點(diǎn)將主器件所發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,它便向主器件發(fā)送一個(gè)低電壓ACK位。如果地址不匹配,則節(jié)點(diǎn)什么也不做,SDA線保持高電平。

讀?寫位

地址幀的最后一位告知節(jié)點(diǎn),主器件是想要將數(shù)據(jù)寫入其中還是從中接收數(shù)據(jù)。如果主器件希望將數(shù)據(jù)發(fā)送到節(jié)點(diǎn),則讀?寫位處于低電平。如果主器件請(qǐng)求從節(jié)點(diǎn)得到數(shù)據(jù),則該位處于高電平。參見圖7。

ACK?NACK位

消息中的每一幀后面都跟隨一個(gè)應(yīng)答?不應(yīng)答位。如果成功接收到一個(gè)地址幀或數(shù)據(jù)幀,則接收器件會(huì)向發(fā)件者返回一個(gè)ACK位。

圖例:在下面的圖中,白色框表示節(jié)點(diǎn),藍(lán)色框表示主器件。參見圖8。

wKgZomSKvtWAfXMSAABB_V_8eIw988.png

圖 4. 起始條件

wKgaomSKva-AFqKZAAJkITHAEY8543.jpg

圖 5. 重復(fù)起始條件

wKgZomSKvbCAH8QvAAF8llb_0iA474.jpg

圖 6. 地址幀

wKgaomSKvbCAShBaAAGphAjta9g595.jpg

圖 7. 讀 / 寫位

wKgZomSKvbGAJg4CAAHEOy6MH0A982.jpg

圖 8. 應(yīng)答 / 不應(yīng)答位

數(shù)據(jù)幀

主器件檢測到來自節(jié)點(diǎn)的ACK位之后,就準(zhǔn)備發(fā)送第一數(shù)據(jù)幀。數(shù)據(jù)幀總是8位長,并以MSB優(yōu)先方式發(fā)送。每個(gè)數(shù)據(jù)幀之后緊接著一個(gè)ACK?NACK位,以驗(yàn)證該幀是否已成功接收。主器件或節(jié)點(diǎn)(取決于誰發(fā)送數(shù)據(jù))必須收到ACK位,然后才能發(fā)送下一數(shù)據(jù)幀。參見圖9。

停止條件

發(fā)送完所有數(shù)據(jù)幀之后,主器件可以向節(jié)點(diǎn)發(fā)送停止條件以停止傳輸。停止條件是指SCL線上的電壓從低電平變?yōu)楦唠娖剑缓笤赟CL線保持高電平的情況下,SDA線上的電壓從低電平變?yōu)楦唠娖健?/p>

在SCL線從低電平切換到高電平后,SDA線從低電平切換到高電平。參見圖10。

I2C傳輸步驟:寫入

有關(guān)寫入單個(gè)數(shù)據(jù)的I2C傳輸?shù)氖纠?,?qǐng)參見圖11。

第1步

主器件將SDA線從高電平切換到低電平,然后將SCL線從高電平切換到低電平,以將起始條件發(fā)送到每個(gè)相連的節(jié)點(diǎn)。

第2步

主器件將其想要與之通信的節(jié)點(diǎn)的7位或10位地址以及寫操作位發(fā)送給每個(gè)節(jié)點(diǎn)。

例如,7位地址為0x2D,加上寫操作位(相當(dāng)于0),結(jié)果將是0x5A。

第3步

每個(gè)節(jié)點(diǎn)將主器件所發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,節(jié)點(diǎn)便將SDA線拉低一位的時(shí)間,以返回一個(gè)ACK位。如果來自主器件的地址與節(jié)點(diǎn)自己的地址不匹配,則節(jié)點(diǎn)讓SDA線保持高電平不變。

在SCL的第九個(gè)脈沖期間拉低SDA線路可以發(fā)送ACK位,保持浮空高電平則為NACK。

第4步

主器件發(fā)送或接收數(shù)據(jù)幀。

第5步

傳輸完每個(gè)數(shù)據(jù)幀之后,接收器件再向發(fā)送者返回一個(gè)ACK位,以確認(rèn)成功接收該幀。

第6步

若要停止數(shù)據(jù)傳輸,主器件應(yīng)將SCL切換為高電平,然后將SDA切換為高電平,從而發(fā)送停止條件。

wKgaomSKvvWAUrmeAADnpgvCT9w880.png

圖 11.寫入單個(gè)位置的 I2C 傳輸?shù)臄?shù)據(jù)手冊示例

wKgaomSKvbaAGB90AAMfFfMDe6g570.jpg

圖 12. 讀取單個(gè)位置的 I2C 傳輸?shù)臄?shù)據(jù)手冊示例

I2C數(shù)據(jù)傳輸步驟:讀取

第1步

主器件將SDA線從高電平切換到低電平,然后將SCL線從高電平切換到低電平,以將起始條件發(fā)送到每個(gè)相連的節(jié)點(diǎn)。

第2步

主器件將其想要與之通信的節(jié)點(diǎn)的7位或10位地址以及寫操作位發(fā)送給每個(gè)節(jié)點(diǎn)。

例如,7位地址為0x2D,加上寫操作位(相當(dāng)于0),結(jié)果將是0x5A。

第3步

每個(gè)節(jié)點(diǎn)將主器件所發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,節(jié)點(diǎn)便將SDA線拉低一位的時(shí)間,以返回一個(gè)ACK位。如果來自主器件的地址與節(jié)點(diǎn)自己的地址不匹配,則節(jié)點(diǎn)讓SDA線保持高電平不變。

第4步

經(jīng)過初始啟動(dòng)、尋址和應(yīng)答之后,主器件已經(jīng)知道目標(biāo)節(jié)點(diǎn)及指向的地址,因此某些器件具有重復(fù)起始條件來清理事務(wù)。

注意:僅用于閱讀目的!

第5步

主器件將其想要與之通信的節(jié)點(diǎn)的7位或10位地址以及讀操作位發(fā)送給每個(gè)節(jié)點(diǎn)。

例如,7位地址為0x2D,加上讀操作位(相當(dāng)于1),結(jié)果將是0x5B。

第6步

每個(gè)節(jié)點(diǎn)將主器件所發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,節(jié)點(diǎn)便將SDA線拉低一位的時(shí)間,以返回一個(gè)ACK位。如果來自主器件的地址與節(jié)點(diǎn)自己的地址不匹配,則節(jié)點(diǎn)讓SDA線保持高電平不變。

第7步

得到ACK位之后,主器件接收來自節(jié)點(diǎn)的數(shù)據(jù)幀。

第8步

傳輸完每個(gè)數(shù)據(jù)幀之后,主器件再向發(fā)送者返回一個(gè)ACK位,以確認(rèn)成功接收該幀,或者如果讀取請(qǐng)求已經(jīng)完成,則主器件返回NACK。

第9步

若要停止數(shù)據(jù)傳輸,主器件應(yīng)將SCL切換為高電平,然后將SDA切換為高電平,從而發(fā)送停止條件。

單個(gè)主器件和多個(gè)節(jié)點(diǎn)

I2C使用尋址,所以單個(gè)主器件可以控制多個(gè)節(jié)點(diǎn)。使用7位地址可提供128 (27)個(gè)唯一地址。使用10位地址很罕見,但可提供1024 (210)個(gè)唯一地址。要將多個(gè)節(jié)點(diǎn)連接到單個(gè)主器件,請(qǐng)使用4.7 kΩ上拉電阻連接這些節(jié)點(diǎn),并將SDA和SCL線連接到VCC。

多個(gè)主器件和多個(gè)節(jié)點(diǎn)

多個(gè)主器件可以連接到單個(gè)節(jié)點(diǎn)或多個(gè)節(jié)點(diǎn)。如果同一系統(tǒng)中有多個(gè)主器件,那么當(dāng)兩個(gè)主器件爭著在同一時(shí)間通過SDA線發(fā)送或接收數(shù)據(jù)時(shí),就會(huì)出現(xiàn)問題。

為了解決這個(gè)問題,每個(gè)主器件在傳輸消息之前,需要檢測SDA線是低電平還是高電平。

如果SDA線為低電平,則說明總線由另一個(gè)主器件控制,該主器件應(yīng)等待。如果SDA線為高電平,則它可以安全傳輸消息。要將多個(gè)主器件連接到多個(gè)節(jié)點(diǎn),請(qǐng)按照?qǐng)D13所示,使用4.7 kΩ上拉電阻將SDA和SCL線連接到VCC。

wKgaomSKvwiAEi-sAACs-GZRIIw966.png

圖 13. 連接多個(gè)節(jié)點(diǎn)的多個(gè)主器件

仲裁

若干I2C多主器件可以連接到同一I2C總線并同時(shí)運(yùn)行。通過不斷監(jiān)視SDA和SCL有無起始和停止條件,它們可以確定總線是否空閑。如果總線正忙,主器件將延遲掛起的I2C傳輸,直至停止條件指示總線再次空閑。

但是,可能發(fā)生兩個(gè)主器件同時(shí)開始傳輸?shù)那闆r。在傳輸過程中,主器件不斷監(jiān)視SDA和SCL。如果其中一個(gè)檢測到SDA為低電平,而它應(yīng)該為高電平,則該主器件將認(rèn)為另一主器件處于活動(dòng)狀態(tài),因而立即停止傳輸。此過程稱為仲裁。兩個(gè)主器件都會(huì)生成起始位并繼續(xù)各自的傳輸。

如果主器件恰好選擇相同的邏輯電平,則什么也不會(huì)發(fā)生。

一旦主器件嘗試施加不同的邏輯電平,則將信號(hào)拉低的主器件將被宣布為獲勝者;失敗者將檢測到邏輯不匹配,因而放棄傳輸。

請(qǐng)花點(diǎn)時(shí)間理解一下這種安排的簡單性和有效性:

獲勝者繼續(xù)傳輸而不中斷——沒有數(shù)據(jù)損壞,沒有驅(qū)動(dòng)器爭用,不需要重新啟動(dòng)事務(wù)。

理論上,失敗者可以在仲裁過程中監(jiān)視節(jié)點(diǎn)地址,如果恰好是被尋址的節(jié)點(diǎn),它可以做出適當(dāng)?shù)捻憫?yīng)。

如果相互競爭的主器件均請(qǐng)求同一節(jié)點(diǎn)的數(shù)據(jù),則仲裁過程不會(huì)不必要地中斷任一事務(wù)——不會(huì)檢測到不匹配,節(jié)點(diǎn)會(huì)將其數(shù)據(jù)輸出到總線,多個(gè)主器件可以接收到數(shù)據(jù)。

時(shí)鐘延展

也稱為時(shí)鐘同步。

注意:I2C規(guī)范沒有為時(shí)鐘延展規(guī)定任何超時(shí)條件——也就是說,任何器件都可以根據(jù)需要保持SCL。

在I2C通信協(xié)議中,時(shí)鐘速度和信號(hào)始終由主器件產(chǎn)生。I2C主器件產(chǎn)生的信號(hào)提供主器件和節(jié)點(diǎn)連接之間的同步。

在某些情況下,節(jié)點(diǎn)或子節(jié)點(diǎn)不是以全狀態(tài)工作,在接收主器件生成的時(shí)鐘之前,需要減慢速度。這是通過一種稱為"時(shí)鐘延展"的機(jī)制來實(shí)現(xiàn)的。

在時(shí)鐘延展期間,為了降低總線速度,允許節(jié)點(diǎn)壓低時(shí)鐘。而在主器件方面,在其變?yōu)楦唠娖綘顟B(tài)后,必須回讀時(shí)鐘信號(hào)。然后,它必須等待,直至線路達(dá)到高電平狀態(tài)。

帶寬

雖然時(shí)鐘延展是一種常見做法,但它對(duì)帶寬有影響。使用時(shí)鐘延展時(shí),共享總線的總帶寬可能會(huì)顯著降低。即使使用這種技術(shù),總線性能仍然必須可靠且快速。有必要考慮使用時(shí)鐘延展的估計(jì)影響,尤其是在多個(gè)器件共享I2C總線的情況下。

wKgaomSKvbeAcpjxAADeaXHxGSw506.jpg

圖 14. 微控制器數(shù)據(jù)手冊

通過時(shí)鐘延展,I2C節(jié)點(diǎn)器件可以強(qiáng)制主器件進(jìn)入等待狀態(tài)。當(dāng)節(jié)點(diǎn)器件需要更多時(shí)間來管理數(shù)據(jù)時(shí),例如存儲(chǔ)接收到的數(shù)據(jù)或準(zhǔn)備發(fā)送另一字節(jié)的數(shù)據(jù)時(shí),它可能會(huì)執(zhí)行時(shí)鐘延展。這通常發(fā)生在節(jié)點(diǎn)器件接收并確認(rèn)收到一個(gè)字節(jié)的數(shù)據(jù)之后。

哪些I2C節(jié)點(diǎn)器件需要時(shí)鐘延展?

是否需要時(shí)鐘延展取決于節(jié)點(diǎn)器件的功能。這里有兩個(gè)例子:

處理器件(如微處理器或微控制器)可能需要額外的時(shí)間來處理中斷,接收和管理數(shù)據(jù),以及執(zhí)行適當(dāng)?shù)墓δ堋?/p>

較簡單的器件(如EEPROM)不在內(nèi)部處理數(shù)據(jù),因此不需要時(shí)鐘延展來執(zhí)行任何功能。

I2C 數(shù)據(jù)手冊示例概述

不同公司和制造商采用不同方法來創(chuàng)建數(shù)據(jù)手冊。圖13顯示了一個(gè)簡單的數(shù)據(jù)手冊示例和基本I2C細(xì)節(jié),包括寄存器和電子規(guī)格。

wKgZomSKvbiAHpVXAABXLV9L-BY316.jpg

圖15. 微控制器存儲(chǔ)器映射

表4顯示了最常用的I2C寄存器。名稱和描述可能因數(shù)據(jù)手冊而異,但功能和用法相同。

名稱 描述
I2C_ADDR1 主器件地址字節(jié) 1
I2C_ADDR2 主器件地址字節(jié) 2
I2C_BYT 起始字節(jié)
I2C_ID 節(jié)點(diǎn)地址器件ID
I2C_MCTL 主器件控制
I2C_MRX 主器件接收數(shù)據(jù)
I2C_SCTL 節(jié)點(diǎn)控制
I2C_SRX 節(jié)點(diǎn)接收
I2C_STAT 主器件和節(jié)點(diǎn)FIFO狀態(tài)

I2C的創(chuàng)建可能因使用情況而異。表5顯示了基本I2C驅(qū)動(dòng)程序API要求的示例。

主器件 節(jié)點(diǎn)
初始化
發(fā)送處理程序 發(fā)送處理程序
接收處理程序 接收處理程序
事件中斷
錯(cuò)誤中斷

SMBus

眾所周知,SMBus可用于需要對(duì)參數(shù)進(jìn)行關(guān)鍵監(jiān)控的應(yīng)用。它最常見的應(yīng)用是計(jì)算機(jī)主板和嵌入式系統(tǒng)。對(duì)于溫度、電源電壓、風(fēng)扇監(jiān)控和?或控制集成芯片,它有額外的監(jiān)控規(guī)范。

SMBus是一種2線總線,類似于飛利浦公司于1980年代開發(fā)的I2C總線。兩個(gè)主要信號(hào)是時(shí)鐘(SMBCLK)和數(shù)據(jù)(SMBDAT)。I2C Primer和SMBus相互兼容,但存在明顯差異,例如:

SMBus邏輯電平閾值是固定的,與器件的電源電壓不成比例。因此,具有不同電源電壓的器件可以在同一Primer上運(yùn)行。例如,一個(gè)SMBus可能具有多個(gè)由1.8 V、3.3 V和5 V電源供電的器件。

它們都以最高100 kHz的相同速度運(yùn)行,但I(xiàn)2C Primer有400 kHz和2 MHz兩個(gè)版本。

SMBus規(guī)定了最低時(shí)鐘速度,并限制了時(shí)鐘在一個(gè)事務(wù)中可以延展的量。違反超時(shí)限制會(huì)導(dǎo)致所有SMBus器件復(fù)位其I?O邏輯以允許總線重啟。這種設(shè)計(jì)增強(qiáng)了總線的魯棒性。

二者的超時(shí)也不同。I2C Primer沒有超時(shí),而SMBus有超時(shí)——對(duì)于10 kHz最低時(shí)鐘速度,可以考慮35 ms的超時(shí)。

分組差錯(cuò)校驗(yàn)(PEC)最初是為SMBus定義的。在每個(gè)事務(wù)的末尾添加一個(gè)分組錯(cuò)誤碼字節(jié)。

其余的一些差異涉及傳輸類型、警報(bào)線、暫停線、關(guān)斷或上電。

SMBus器件每次收到其自己的地址時(shí),無論在做什么,它都必須應(yīng)答(ACK),這是一個(gè)明確要求,目的是確保主器件可以準(zhǔn)確地判斷總線上哪些器件處于活動(dòng)狀態(tài)。

所有SMBus事務(wù)都通過指定的SMBus協(xié)議之一執(zhí)行。

SMBus還有一個(gè)可選信號(hào)SMBALERT#,節(jié)點(diǎn)器件可以使用該信號(hào)快速通知主器件或系統(tǒng)主機(jī),它有主器件需要的信息,例如報(bào)告故障情況。

wKgaomSKvbmAe34pAAB6u0qEuUQ705.jpg

圖16. SMBus拓?fù)浣Y(jié)構(gòu)

SMBus上拉電路

wKgZomSKvxuADEPuAAA6SRU349k002.png

圖17. SMBus上拉電路

SMBus地址

SMBus地址有7個(gè)二進(jìn)制位,通常表示為前4位、后3位以及最后一個(gè)字母b,例如0001 110b。這些地址占據(jù)總線上一個(gè)8位字段的高7位。然而,該字段的最低位另有含義,不屬于SMBus地址的范圍。

wKgaomSKvbuAcRTJAAAfgH3IY0E461.jpg

圖18. 節(jié)點(diǎn)地址

7位目標(biāo)地址從主器件發(fā)送到總線上的一個(gè)或多個(gè)器件(例如通過廣播地址)。

請(qǐng)注意,起始條件和停止條件是轉(zhuǎn)換,而不是位,在符號(hào)上方未顯示位計(jì)數(shù)。在事務(wù)圖中顯示時(shí),重復(fù)起始也是一個(gè)轉(zhuǎn)換,而不是一位,在符號(hào)上方也不顯示位計(jì)數(shù)。

wKgZomSKvbyAXOo9AAF-uyHLju4968.jpg

圖19. SMBus消息

SMBus時(shí)序測量

符號(hào) 參數(shù) 單位
fSMB SMBus 工作頻率 kHz
tBUF 停止與起始條件之間的總線空閑時(shí)間 μs
THD-STA (重復(fù))起始條件之后的保持時(shí)間 μs
TSU-STA 重復(fù)起始條件的建立時(shí)間 μs
tSU(STO) 停止條件的建立時(shí)間 μs
tHD(DAT) 數(shù)據(jù)保持時(shí)間 ns
tSU(DAT) 數(shù)據(jù)建立時(shí)間 ns
tTIMEOUT 檢測時(shí)鐘低電平超時(shí) ms
tLOW 時(shí)鐘低電平周期 μs
tHIGH 時(shí)鐘高電平周期 μs

PMBus:重新定義電源管理

除了SMBus之外,還有一個(gè)變體PMBus,它是一種開放標(biāo)準(zhǔn)電源管理協(xié)議。這種靈活且高度通用的標(biāo)準(zhǔn)允許基于模擬和數(shù)字技術(shù)的器件之間進(jìn)行通信,并提供真正的互操作性,由此將能降低電源系統(tǒng)設(shè)計(jì)的復(fù)雜性并縮短產(chǎn)品上市時(shí)間。

PMBus用于帶有電源控制和管理器件的電源的數(shù)字管理。它具有支持電源管理要求的命令和結(jié)構(gòu)。這意味著I2C Primer和PMBus在電氣要求和命令語義上是兼容和可互操作的。

電源管理的基本參數(shù)之一是過壓電平監(jiān)控,PMBus提供了設(shè)置和讀取該值的命令。PMBus可以附加在I2C Primer和SMBus的已有特性上,充當(dāng)現(xiàn)有標(biāo)準(zhǔn)(尤其是SMBus)之上的協(xié)議層。

I2C 規(guī)范僅描述了2線總線的物理層、時(shí)序和流控制。I2C規(guī)范沒有(像SMBus協(xié)議那樣)描述消息的格式,也沒有描述消息的內(nèi)容。

PMBus規(guī)范是一個(gè)完整的電源管理協(xié)議。它說明了如何將比特和字節(jié)從一個(gè)器件傳送到另一個(gè)器件(即傳輸)。它還描述了一種命令語言,賦予這些比特和字節(jié)以意義。

尋址

對(duì)于冗余系統(tǒng),一旦電源安裝到系統(tǒng)中,最多有三個(gè)信號(hào)來設(shè)置電源的地址位置:地址2、地址1和地址0。對(duì)于非冗余系統(tǒng),電源器件地址位置應(yīng)為B0h。

硬件

針對(duì)基于I2C VDD的電源和驅(qū)動(dòng)(對(duì)于VDD = 3.3 V),電源中的器件應(yīng)與SMBus 2.0高功率規(guī)范兼容。該總線應(yīng)以3.3 V運(yùn)行。

電源

電源內(nèi)部的電路應(yīng)從備用輸出獲得電源。對(duì)于冗余電源,器件應(yīng)從"邏輯或"器件的系統(tǒng)側(cè)供電。只要系統(tǒng)中的電源或并聯(lián)冗余電源接通交流電源,PMBus器件就應(yīng)處于開啟狀態(tài)。

上拉電阻

電源內(nèi)部的SCL或SDA線上只能使用弱上拉電阻。主要上拉電阻由系統(tǒng)提供,可以連接到3.3 V或5 V。對(duì)于系統(tǒng)設(shè)計(jì),主要上拉電阻應(yīng)位于電源外部,并從備用電源軌獲取電源。

數(shù)據(jù)速度

電源中的PMBus器件應(yīng)以100 kbps SMBus全速運(yùn)行,并盡可能避免使用時(shí)鐘延展,因?yàn)樗鼤?huì)減慢總線速度。

總結(jié)

表8概述并總結(jié)了I2C Primer、SMBus(高功率和低功率)、PMBus的信號(hào)、時(shí)序和電氣規(guī)格。

I2C Primer、SMBus和PMBus有何關(guān)系?

SMBus最初開發(fā)用于協(xié)助電池管理系統(tǒng),使用I2C硬件,但增加了第二級(jí)軟件,最終允許器件熱插拔,而無需重新啟動(dòng)系統(tǒng)。PMBus擴(kuò)展了SMBus,定義了一組專門用于管理功率轉(zhuǎn)換器的器件命令,暴露了器件的測量電壓、電流、溫度等屬性。一般而言,I2C Primer、SMBus和PMBus器件可以共享總線而不會(huì)發(fā)生什么大問題。

I2C、SMB、PMB的優(yōu)勢

僅使用兩條線

具有ACK?NACK位

廣為人知的協(xié)議

支持多個(gè)主器件和多個(gè)節(jié)點(diǎn)

硬件不如UART復(fù)雜

廣泛使用的方法

缺點(diǎn)

數(shù)據(jù)傳輸速率比SPI慢

數(shù)據(jù)幀的大小限制為8位

實(shí)現(xiàn)所需的硬件比SPI復(fù)雜

wKgZomSKvy2Aeqj6AABBXg774ok023.png

圖20. SMBus時(shí)序測量

所有地址 主要尋址,用于具有兩個(gè)尋址引腳的大多數(shù)服務(wù)器電源 附近尋址,前提是電源上提供了三個(gè)尋址引腳
系統(tǒng)尋址
地址2/地址1/地址0
0/0/0 0/0/1 0/1/1 0/1/1 1/0/0 1/0/1 1/1/0 1/1/1
PMBus 器件讀取地址 B0h/B1h B2h/B3h B4h/B5h B6h/B7h B8h/B9h BAh/BBh BCh/BDh BEh/BFh

用例

傳感器讀取

傳感器寫入

EEPROM、溫度傳感器、觸摸屏、接近傳感器

傳輸和控制用戶指引的操作

與多個(gè)微控制器通信

消費(fèi)類電子設(shè)備

系統(tǒng)管理

電源管理

調(diào)試

規(guī)格 I2C Primer SMBus
高功率 | 低功率
PMBus
信號(hào) 分組差錯(cuò)校驗(yàn)(可選)
SMBALERT(可選)
塊大小限制






32 字節(jié)


32 字節(jié)


255 字節(jié)
時(shí)序 數(shù)據(jù)速率:
標(biāo)椎模式
快速模式
快速模式+
高速模式

時(shí)鐘速度

總線超時(shí)

總線主器件請(qǐng)求延遲(最小值)
SCL 保持時(shí)間(最大值)
數(shù)據(jù)保持時(shí)間(最小值)
100 kbps
400 kbps
1 Mbps
3.4 Mbps
0 Hz zhi 3.4 MHz




100 kbps




10 kHz 至 100 kHz
25 ms 至 35 ms
50 μs

2 ms
300 ns
100 kbps




10 kHz 至 100 kHz
25 ms 至 35 ms
50 μs

2 ms
300 ns
100 kbps
400 kbps


10 kHz 至 400 kHz
25 ms 至 35 ms
50 μs

2 ms
300 ns
電氣 每個(gè)總線段的容性負(fù)載(最大值)

上升時(shí)間(最大值)

0.4V時(shí)的上拉電流(最大值)

每個(gè)器件的漏電流(最大值)
VIL輸入邏輯低電平閾值(最大值)
VIH輸入邏輯高電平閾值(最小值)
VOL輸出邏輯低電平閾值(最大值)
400 pF
1 μs(100 kHz時(shí)), 300 ns(400 kHz時(shí))
3 mA (標(biāo)準(zhǔn)和快速模式)
±10 μA
0.3 VDD 或 1.5 V
0.7 VCC 或 3 V
0.4 V
400 pF
1 μs
4 mA
±10 μA
0.8 V
2.1 V
2.4 V

1 μs
350 μA
±5 μA
0.8 V
2.1 V
0.4 V
400 pF
1 μs(100 kHz時(shí)), 300 ns(400 kHz時(shí))
4 mA
±10 μA
0.8 V
2.1 V
0.4 V

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2564

    文章

    52834

    瀏覽量

    765824
  • 電源管理
    +關(guān)注

    關(guān)注

    117

    文章

    6426

    瀏覽量

    145988
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1539

    瀏覽量

    127483
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    i2c通信協(xié)議

    1.1 i2c通信協(xié)議通信協(xié)議:用來實(shí)現(xiàn)數(shù)據(jù)傳輸。i2c物理總線:SCL(時(shí)鐘線) SDA(數(shù)據(jù)線)i2c
    發(fā)表于 03-06 16:15

    I2C通信協(xié)議的原理是什么

    I2C通信協(xié)議I2C通信原理I2C通信原理:I2C
    發(fā)表于 02-17 07:16

    實(shí)驗(yàn)八-I2C通信協(xié)議

    實(shí)驗(yàn)八-I2C通信協(xié)議,感興趣的可以瞧一瞧。
    發(fā)表于 09-22 16:42 ?2次下載

    linux自帶i2c工具使用

    I2C總線被全球超過50個(gè)公司的1000+個(gè)ICs所使用,已然是一個(gè)世界標(biāo)準(zhǔn).另外,I2C總線與多種不同的控制總線是兼容的,比如SMBus(系統(tǒng)管理總線),PMBus(電源管理總線),
    發(fā)表于 05-13 09:23 ?4141次閱讀

    I2C通信協(xié)議應(yīng)該如何學(xué)習(xí)

    我最近剛做完I2C通信協(xié)議的編寫與調(diào)試,下面介紹一下我從一開始理解夏老師的程序,修改程序,直到下板調(diào)試整個(gè)的學(xué)習(xí)過程,希望對(duì)大家學(xué)習(xí) I2C 有一定的幫助。一、 分析源代碼學(xué)習(xí) I2C
    發(fā)表于 04-28 08:00 ?22次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>通信協(xié)議</b>應(yīng)該如何學(xué)習(xí)

    什么是I2C通信協(xié)議?

    在本教程中,我們將學(xué)習(xí)如何在Raspberry Pi Pico中使用I2C引腳并遍歷I2C掃描器代碼。
    的頭像 發(fā)表于 04-26 15:08 ?8182次閱讀
    什么是<b class='flag-5'>I2C</b><b class='flag-5'>通信協(xié)議</b>?

    MPU6050的I2C通信協(xié)議

    不同硬件有不同的I2C協(xié)議
    發(fā)表于 12-06 12:21 ?3次下載
    MPU6050的<b class='flag-5'>I2C</b><b class='flag-5'>通信協(xié)議</b>

    硬件I2C與模擬I2C

    配置;而軟件I2C是沒有寄存器這個(gè)概念的。 軟件I2C一般是使用GPIO管腳,用軟件控制SCL,SDA線輸出高低電平,模擬i2c協(xié)議的時(shí)序。例如下面這段
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    了解I2C Primer、PMBusSMBus通信協(xié)議

    I2C或內(nèi)部集成電路是建立設(shè)備之間通信的常用串行通信協(xié)議,特別是對(duì)于兩個(gè)或多個(gè)不同的電路。I2C引物是最常用的 I2C. 本文將提供
    的頭像 發(fā)表于 12-12 16:58 ?9957次閱讀
    <b class='flag-5'>了解</b><b class='flag-5'>I2C</b> <b class='flag-5'>Primer</b>、<b class='flag-5'>PMBus</b>和<b class='flag-5'>SMBus</b><b class='flag-5'>通信協(xié)議</b>

    Linux控制I2C/SMBus設(shè)備

    I2C是Philips開發(fā)的一種兩線通信協(xié)議,常用于一些對(duì)速度要求不高的小型器件上。SMBus是系統(tǒng)管理總線,基于I2C協(xié)議,大部分情況下二
    的頭像 發(fā)表于 03-23 10:02 ?1983次閱讀
    Linux控制<b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>設(shè)備

    I2C通信協(xié)議及其工作原理

    "也許你聽說過I2C,或者你也正在使用I2C,但你有沒有了解過什么是I2CI2C是如何工作的?讓我們一起
    的頭像 發(fā)表于 04-19 09:36 ?5903次閱讀

    I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點(diǎn)?

    1982年發(fā)明并推廣,用于連接智能傳感器和存儲(chǔ)器器件,以及控制和監(jiān)控外設(shè)。該協(xié)議是一種主從式通信協(xié)議,允許多個(gè)從設(shè)備連接到同一總線上,并在總線上進(jìn)行數(shù)據(jù)交換。I2C總線是一種低速度、低功耗的串行總線,通過
    的頭像 發(fā)表于 09-12 11:18 ?2329次閱讀

    i2c采樣是上升沿嗎?

    數(shù)據(jù)。在本文中,我們將詳細(xì)討論I2C采樣的工作原理,采樣時(shí)機(jī)以及如何進(jìn)行I2C采樣。 I2C采樣的原理 I2C采樣是基于I2C通訊
    的頭像 發(fā)表于 09-19 17:16 ?3631次閱讀

    SPI和I2C通信協(xié)議:應(yīng)用與區(qū)別

    本文深入解析了SPI和I2C這兩種通信協(xié)議的特點(diǎn)、工作原理和應(yīng)用場景。SPI適用于高速數(shù)據(jù)傳輸,常用于存儲(chǔ)器芯片和顯示器驅(qū)動(dòng)等領(lǐng)域;I2C適用于低速控制和傳感器數(shù)據(jù)傳輸,常用于溫度傳感器和ADC
    的頭像 發(fā)表于 04-22 16:45 ?2736次閱讀

    簡單認(rèn)識(shí)I2C通信協(xié)議

    I2C(Inter-Integrated Circuit)通信協(xié)議是由飛利浦公司(現(xiàn)為恩智浦半導(dǎo)體)開發(fā)的一種簡單、雙向二線制同步串行總線協(xié)議。自1982年發(fā)布以來,I2C
    的頭像 發(fā)表于 07-25 18:06 ?2538次閱讀