Mary Grace Legaspi 和 Eric Peňa
I2C,即Inter-Integrated Circuit,是一種常用的串行通信協(xié)議,用于在器件之間——特別是兩個或兩個以上不同電路之間建立通信。I2C Primer是最常用的I2C。本文將介紹I2C Primer的基本特性和標準,并重點說明在通信實現(xiàn)過程中如何正確使用該協(xié)議。從I2C的基本原理出發(fā),我們將介紹其變體子集——系統(tǒng)管理總線(SMBus)和電源管理總線(PMBus)——的可用性及二者的區(qū)別。這三種協(xié)議各有專門的功能,旨在滿足不同的客戶需求。
為何重要?
I2C 有利于設計人員在系統(tǒng)的眾多節(jié)點之間建立簡單、雙向、靈活的通信。I2C僅使用兩條雙向線來發(fā)送和接收信息,從而降低了復雜性。它還允許設計人員配置多個主節(jié)點系統(tǒng)IC之間的通信。I2C對管理系統(tǒng)和電源的開發(fā)人員也很有利,讓他們能夠在盡可能短的時間內(nèi)創(chuàng)建高質(zhì)量的產(chǎn)品。
"溝通(通信)對那些致力于溝通(通信)的人有用。"
—John Powell
通信協(xié)議在組織設備之間通信時扮演著重要角色。它基于系統(tǒng)要求而以不同方式進行設計。此類協(xié)議具有明確的、為實現(xiàn)成功通信而協(xié)商一致的規(guī)則。
如果您曾經(jīng)使用LED顯示器、傳感器甚至加速度計模塊之類的東西構(gòu)建過系統(tǒng),那么您很可能已經(jīng)使用過I2C。I2C支持多個節(jié)點連接單個主器件和多個主器件連接多個節(jié)點的特性。如果您希望物盡其用,讓一個微控制器將數(shù)據(jù)記錄到單個存儲卡,或向單個LCD顯示文本,則此特性非常有用。
除了最常用的I2C Primer,I2C還有兩個變體,分別專注于系統(tǒng)和電源應用,稱為系統(tǒng)管理總線(SMBus)和電源管理總線(PMBus)。
根據(jù)定義,Inter-Integrated Circuit (I2C)——也稱為Inter IC——是一種硬件通信協(xié)議,它通過一條多主器件、多節(jié)點、串行通信總線進行同步通信。同步通信意味著兩個(或兩個以上)交換數(shù)據(jù)的器件共享一條公共時鐘線。I2C廣泛用于將低速外圍IC連接到處理器和微控制器。I2C總線由飛利浦公司設計,它讓位于同一電路板上的器件之間可以輕松通信。
I2C Primer
使用一條串行數(shù)據(jù)(SDA)線、一條串行時鐘(SCL)線和一個公共接地來承載所有通信,最大程度地減少連接。
圖 1. 集成電路彼此直接通信
每個I2C器件有兩條線路:
SDA是供主器件和節(jié)點發(fā)送和接收數(shù)據(jù)的線路。
SCL是承載時鐘信號的線路。SCL總是由I2C主器件生成。規(guī)范對時鐘信號的低相位和高相位有最短周期要求。
I2C總線僅使用兩條雙向線路:每個器件的SDA和SCL用于簡單的IC間通信。
圖 2. I2C 上拉電阻連接
硬件最重要的注意是在SDA和SCL上加入上拉電阻。I2C器件通過開集或開漏引腳連接到總線,將線路拉低。當沒有數(shù)據(jù)傳輸時,I2C總線處于高電平空閑狀態(tài);線路被被動拉高。要傳輸數(shù)據(jù),須切換線路,即先拉低再釋放(又變?yōu)楦唠娖剑?shù)據(jù)位在時鐘下降沿傳輸。
開漏輸出需要一個上拉電阻(圖2中的Rp)才能正確輸出高電平。上拉電阻連接在輸出引腳和高電平所需的輸出電壓(圖2中的VDD)之間。
對于VCC和VDD (5 V)的典型值,4700 Ω是最常用的上拉電阻值。
作為參考,屏蔽2 AWG雙絞線電纜的電容范圍為100 pF?m至240pF?m。因此,I2C鏈路的最大總線長度約為1米(100 kBaud時)或10米(10 kBaud時)。非屏蔽電纜的電容通常要小得多,但只能用在以其他方式加以屏蔽的外殼內(nèi)。
表1總結(jié)了I2C的關(guān)鍵特性。
特性 | 規(guī)格 |
導線 | 2 |
最大速度 |
標準模式 = 100 kbps 快速模式 = 400 kbps 高速模式 = 3.4 Mbps 超快速模式 = 5 Mbps |
同步或異步? | 同步 |
串行或并行? | 串行 |
最大主器件數(shù) | 無限制 |
最大節(jié)點數(shù) | 1008 |
理論上,尋址模式的最大節(jié)點數(shù)為27或210,但有16個地址保留用于特殊用途。
I2C 是同步的,因此位的輸出通過主器件和節(jié)點之間共享的時鐘信號與位的采樣同步。時鐘信號始終由主器件控制。
保留I2C節(jié)點地址
有16個保留I2C地址。這些地址對應于以下兩種模式之一:0000 XXX或1111 XXX。表2顯示了為特殊目的而保留的I2C地址。
I2C 節(jié)點地址 | 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é)點地址 |
I2C 工作原理
I2C 數(shù)據(jù)在消息中傳輸,消息被分解為數(shù)據(jù)幀。讀寫協(xié)議包含地址幀(即節(jié)點的二進制地址)和另一個數(shù)據(jù)幀,后者包含所傳輸?shù)臄?shù)據(jù)、開始和停止條件、重復起始位、讀?寫位以及每個數(shù)據(jù)幀之間的應答?不應答位。
時序規(guī)格表
I2C 時序表也很重要,因為工程師利用它可以設計出與總線要求兼容的IC。每個數(shù)據(jù)速率都有自己的時序規(guī)格,主器件和節(jié)點必須遵守該規(guī)格才能正確傳輸數(shù)據(jù)。
表3顯示了時序規(guī)格表上給出的符號和參數(shù)。
符號 | 參數(shù) | 單位 |
fSCL | SCL 時鐘頻率 | kHz |
tHD(STA) | (重復)起始條件的保持時間 | μs |
tLOW | 引腳的低電平周期 | μs |
tHIGH | 引腳的高電平周期 | μs |
tSU(STA) | 重復起始條件的建立時間 | μs |
tHD(DAT) | 數(shù)據(jù)保持時間 | μs |
tSU(DAT) | 數(shù)據(jù)建立時間 | ns |
tr | SDA 信號的上升時間 | ns |
tf | SDA 信號的下降時間 | ns |
tSU(STO) | 停止條件的建立時間 | μs |
圖 3. I2C 消息
I2C 傳輸子協(xié)議
總線上的傳輸要么是讀操作,要么是寫操作。讀取和寫入?yún)f(xié)議建立在一系列子協(xié)議之上,例如起始和停止條件、重復起始位、地址字節(jié)、數(shù)據(jù)傳輸位和應答?不應答位。
起始條件
顧名思義,起始條件總是在傳輸開始時出現(xiàn),并由主器件發(fā)起。這樣做是為了喚醒總線上的空閑節(jié)點器件。SDA線從高電平切換到低電平,然后SCL線從高電平切換到低電平。參見圖4。
重復起始條件
在不發(fā)出停止條件的情況下,起始條件可以在傳輸期間重復。這是一種特殊情況,稱為重復起始,用于改變數(shù)據(jù)傳輸方向、重復嘗試傳輸、同步多個IC,甚至控制串行存儲器。參見圖5。
地址幀
地址幀包含7位或10位序列,具體取決于可用性(參見數(shù)據(jù)手冊)。參見圖6。
不像SPI,I2C沒有節(jié)點選擇線路,因此它需要另一種方法來讓節(jié)點知道數(shù)據(jù)正向其發(fā)送,而不是向另一個節(jié)點發(fā)送。這是通過尋址來實現(xiàn)的。地址幀始終是新消息中起始位之后的第一幀。
主器件將其想要與之通信的節(jié)點地址發(fā)送到其所連接的每個節(jié)點。然后,每個節(jié)點將主器件所發(fā)送的地址與其自己的地址進行比較。如果地址匹配,它便向主器件發(fā)送一個低電壓ACK位。如果地址不匹配,則節(jié)點什么也不做,SDA線保持高電平。
讀?寫位
地址幀的最后一位告知節(jié)點,主器件是想要將數(shù)據(jù)寫入其中還是從中接收數(shù)據(jù)。如果主器件希望將數(shù)據(jù)發(fā)送到節(jié)點,則讀?寫位處于低電平。如果主器件請求從節(jié)點得到數(shù)據(jù),則該位處于高電平。參見圖7。
ACK?NACK位
消息中的每一幀后面都跟隨一個應答?不應答位。如果成功接收到一個地址幀或數(shù)據(jù)幀,則接收器件會向發(fā)件者返回一個ACK位。
圖例:在下面的圖中,白色框表示節(jié)點,藍色框表示主器件。參見圖8。
圖 4. 起始條件
圖 5. 重復起始條件
圖 6. 地址幀
圖 7. 讀 / 寫位
圖 8. 應答 / 不應答位
數(shù)據(jù)幀
主器件檢測到來自節(jié)點的ACK位之后,就準備發(fā)送第一數(shù)據(jù)幀。數(shù)據(jù)幀總是8位長,并以MSB優(yōu)先方式發(fā)送。每個數(shù)據(jù)幀之后緊接著一個ACK?NACK位,以驗證該幀是否已成功接收。主器件或節(jié)點(取決于誰發(fā)送數(shù)據(jù))必須收到ACK位,然后才能發(fā)送下一數(shù)據(jù)幀。參見圖9。
停止條件
發(fā)送完所有數(shù)據(jù)幀之后,主器件可以向節(jié)點發(fā)送停止條件以停止傳輸。停止條件是指SCL線上的電壓從低電平變?yōu)楦唠娖剑缓笤赟CL線保持高電平的情況下,SDA線上的電壓從低電平變?yōu)楦唠娖健?/p>
在SCL線從低電平切換到高電平后,SDA線從低電平切換到高電平。參見圖10。
I2C傳輸步驟:寫入
有關(guān)寫入單個數(shù)據(jù)的I2C傳輸?shù)氖纠垍⒁妶D11。
第1步
主器件將SDA線從高電平切換到低電平,然后將SCL線從高電平切換到低電平,以將起始條件發(fā)送到每個相連的節(jié)點。
第2步
主器件將其想要與之通信的節(jié)點的7位或10位地址以及寫操作位發(fā)送給每個節(jié)點。
例如,7位地址為0x2D,加上寫操作位(相當于0),結(jié)果將是0x5A。
第3步
每個節(jié)點將主器件所發(fā)送的地址與其自己的地址進行比較。如果地址匹配,節(jié)點便將SDA線拉低一位的時間,以返回一個ACK位。如果來自主器件的地址與節(jié)點自己的地址不匹配,則節(jié)點讓SDA線保持高電平不變。
在SCL的第九個脈沖期間拉低SDA線路可以發(fā)送ACK位,保持浮空高電平則為NACK。
第4步
主器件發(fā)送或接收數(shù)據(jù)幀。
第5步
傳輸完每個數(shù)據(jù)幀之后,接收器件再向發(fā)送者返回一個ACK位,以確認成功接收該幀。
第6步
若要停止數(shù)據(jù)傳輸,主器件應將SCL切換為高電平,然后將SDA切換為高電平,從而發(fā)送停止條件。
圖 11.寫入單個位置的 I2C 傳輸?shù)臄?shù)據(jù)手冊示例
圖 12. 讀取單個位置的 I2C 傳輸?shù)臄?shù)據(jù)手冊示例
I2C數(shù)據(jù)傳輸步驟:讀取
第1步
主器件將SDA線從高電平切換到低電平,然后將SCL線從高電平切換到低電平,以將起始條件發(fā)送到每個相連的節(jié)點。
第2步
主器件將其想要與之通信的節(jié)點的7位或10位地址以及寫操作位發(fā)送給每個節(jié)點。
例如,7位地址為0x2D,加上寫操作位(相當于0),結(jié)果將是0x5A。
第3步
每個節(jié)點將主器件所發(fā)送的地址與其自己的地址進行比較。如果地址匹配,節(jié)點便將SDA線拉低一位的時間,以返回一個ACK位。如果來自主器件的地址與節(jié)點自己的地址不匹配,則節(jié)點讓SDA線保持高電平不變。
第4步
經(jīng)過初始啟動、尋址和應答之后,主器件已經(jīng)知道目標節(jié)點及指向的地址,因此某些器件具有重復起始條件來清理事務。
注意:僅用于閱讀目的!
第5步
主器件將其想要與之通信的節(jié)點的7位或10位地址以及讀操作位發(fā)送給每個節(jié)點。
例如,7位地址為0x2D,加上讀操作位(相當于1),結(jié)果將是0x5B。
第6步
每個節(jié)點將主器件所發(fā)送的地址與其自己的地址進行比較。如果地址匹配,節(jié)點便將SDA線拉低一位的時間,以返回一個ACK位。如果來自主器件的地址與節(jié)點自己的地址不匹配,則節(jié)點讓SDA線保持高電平不變。
第7步
得到ACK位之后,主器件接收來自節(jié)點的數(shù)據(jù)幀。
第8步
傳輸完每個數(shù)據(jù)幀之后,主器件再向發(fā)送者返回一個ACK位,以確認成功接收該幀,或者如果讀取請求已經(jīng)完成,則主器件返回NACK。
第9步
若要停止數(shù)據(jù)傳輸,主器件應將SCL切換為高電平,然后將SDA切換為高電平,從而發(fā)送停止條件。
單個主器件和多個節(jié)點
I2C使用尋址,所以單個主器件可以控制多個節(jié)點。使用7位地址可提供128 (27)個唯一地址。使用10位地址很罕見,但可提供1024 (210)個唯一地址。要將多個節(jié)點連接到單個主器件,請使用4.7 kΩ上拉電阻連接這些節(jié)點,并將SDA和SCL線連接到VCC。
多個主器件和多個節(jié)點
多個主器件可以連接到單個節(jié)點或多個節(jié)點。如果同一系統(tǒng)中有多個主器件,那么當兩個主器件爭著在同一時間通過SDA線發(fā)送或接收數(shù)據(jù)時,就會出現(xiàn)問題。
為了解決這個問題,每個主器件在傳輸消息之前,需要檢測SDA線是低電平還是高電平。
如果SDA線為低電平,則說明總線由另一個主器件控制,該主器件應等待。如果SDA線為高電平,則它可以安全傳輸消息。要將多個主器件連接到多個節(jié)點,請按照圖13所示,使用4.7 kΩ上拉電阻將SDA和SCL線連接到VCC。
圖 13. 連接多個節(jié)點的多個主器件
仲裁
若干I2C多主器件可以連接到同一I2C總線并同時運行。通過不斷監(jiān)視SDA和SCL有無起始和停止條件,它們可以確定總線是否空閑。如果總線正忙,主器件將延遲掛起的I2C傳輸,直至停止條件指示總線再次空閑。
但是,可能發(fā)生兩個主器件同時開始傳輸?shù)那闆r。在傳輸過程中,主器件不斷監(jiān)視SDA和SCL。如果其中一個檢測到SDA為低電平,而它應該為高電平,則該主器件將認為另一主器件處于活動狀態(tài),因而立即停止傳輸。此過程稱為仲裁。兩個主器件都會生成起始位并繼續(xù)各自的傳輸。
如果主器件恰好選擇相同的邏輯電平,則什么也不會發(fā)生。
一旦主器件嘗試施加不同的邏輯電平,則將信號拉低的主器件將被宣布為獲勝者;失敗者將檢測到邏輯不匹配,因而放棄傳輸。
請花點時間理解一下這種安排的簡單性和有效性:
獲勝者繼續(xù)傳輸而不中斷——沒有數(shù)據(jù)損壞,沒有驅(qū)動器爭用,不需要重新啟動事務。
理論上,失敗者可以在仲裁過程中監(jiān)視節(jié)點地址,如果恰好是被尋址的節(jié)點,它可以做出適當?shù)捻憫?/p>
如果相互競爭的主器件均請求同一節(jié)點的數(shù)據(jù),則仲裁過程不會不必要地中斷任一事務——不會檢測到不匹配,節(jié)點會將其數(shù)據(jù)輸出到總線,多個主器件可以接收到數(shù)據(jù)。
時鐘延展
也稱為時鐘同步。
注意:I2C規(guī)范沒有為時鐘延展規(guī)定任何超時條件——也就是說,任何器件都可以根據(jù)需要保持SCL。
在I2C通信協(xié)議中,時鐘速度和信號始終由主器件產(chǎn)生。I2C主器件產(chǎn)生的信號提供主器件和節(jié)點連接之間的同步。
在某些情況下,節(jié)點或子節(jié)點不是以全狀態(tài)工作,在接收主器件生成的時鐘之前,需要減慢速度。這是通過一種稱為"時鐘延展"的機制來實現(xiàn)的。
在時鐘延展期間,為了降低總線速度,允許節(jié)點壓低時鐘。而在主器件方面,在其變?yōu)楦唠娖綘顟B(tài)后,必須回讀時鐘信號。然后,它必須等待,直至線路達到高電平狀態(tài)。
帶寬
雖然時鐘延展是一種常見做法,但它對帶寬有影響。使用時鐘延展時,共享總線的總帶寬可能會顯著降低。即使使用這種技術(shù),總線性能仍然必須可靠且快速。有必要考慮使用時鐘延展的估計影響,尤其是在多個器件共享I2C總線的情況下。
圖 14. 微控制器數(shù)據(jù)手冊
通過時鐘延展,I2C節(jié)點器件可以強制主器件進入等待狀態(tài)。當節(jié)點器件需要更多時間來管理數(shù)據(jù)時,例如存儲接收到的數(shù)據(jù)或準備發(fā)送另一字節(jié)的數(shù)據(jù)時,它可能會執(zhí)行時鐘延展。這通常發(fā)生在節(jié)點器件接收并確認收到一個字節(jié)的數(shù)據(jù)之后。
哪些I2C節(jié)點器件需要時鐘延展?
是否需要時鐘延展取決于節(jié)點器件的功能。這里有兩個例子:
處理器件(如微處理器或微控制器)可能需要額外的時間來處理中斷,接收和管理數(shù)據(jù),以及執(zhí)行適當?shù)墓δ堋?/p>
較簡單的器件(如EEPROM)不在內(nèi)部處理數(shù)據(jù),因此不需要時鐘延展來執(zhí)行任何功能。
I2C 數(shù)據(jù)手冊示例概述
不同公司和制造商采用不同方法來創(chuàng)建數(shù)據(jù)手冊。圖13顯示了一個簡單的數(shù)據(jù)手冊示例和基本I2C細節(jié),包括寄存器和電子規(guī)格。
圖15. 微控制器存儲器映射
表4顯示了最常用的I2C寄存器。名稱和描述可能因數(shù)據(jù)手冊而異,但功能和用法相同。
名稱 | 描述 |
I2C_ADDR1 | 主器件地址字節(jié) 1 |
I2C_ADDR2 | 主器件地址字節(jié) 2 |
I2C_BYT | 起始字節(jié) |
I2C_ID | 節(jié)點地址器件ID |
I2C_MCTL | 主器件控制 |
I2C_MRX | 主器件接收數(shù)據(jù) |
I2C_SCTL | 節(jié)點控制 |
I2C_SRX | 節(jié)點接收 |
I2C_STAT | 主器件和節(jié)點FIFO狀態(tài) |
I2C的創(chuàng)建可能因使用情況而異。表5顯示了基本I2C驅(qū)動程序API要求的示例。
主器件 | 節(jié)點 |
初始化 |
|
發(fā)送處理程序 | 發(fā)送處理程序 |
接收處理程序 | 接收處理程序 |
事件中斷 |
|
錯誤中斷 |
SMBus
眾所周知,SMBus可用于需要對參數(shù)進行關(guān)鍵監(jiān)控的應用。它最常見的應用是計算機主板和嵌入式系統(tǒng)。對于溫度、電源電壓、風扇監(jiān)控和?或控制集成芯片,它有額外的監(jiān)控規(guī)范。
SMBus是一種2線總線,類似于飛利浦公司于1980年代開發(fā)的I2C總線。兩個主要信號是時鐘(SMBCLK)和數(shù)據(jù)(SMBDAT)。I2C Primer和SMBus相互兼容,但存在明顯差異,例如:
SMBus邏輯電平閾值是固定的,與器件的電源電壓不成比例。因此,具有不同電源電壓的器件可以在同一Primer上運行。例如,一個SMBus可能具有多個由1.8 V、3.3 V和5 V電源供電的器件。
它們都以最高100 kHz的相同速度運行,但I2C Primer有400 kHz和2 MHz兩個版本。
SMBus規(guī)定了最低時鐘速度,并限制了時鐘在一個事務中可以延展的量。違反超時限制會導致所有SMBus器件復位其I?O邏輯以允許總線重啟。這種設計增強了總線的魯棒性。
二者的超時也不同。I2C Primer沒有超時,而SMBus有超時——對于10 kHz最低時鐘速度,可以考慮35 ms的超時。
分組差錯校驗(PEC)最初是為SMBus定義的。在每個事務的末尾添加一個分組錯誤碼字節(jié)。
其余的一些差異涉及傳輸類型、警報線、暫停線、關(guān)斷或上電。
SMBus器件每次收到其自己的地址時,無論在做什么,它都必須應答(ACK),這是一個明確要求,目的是確保主器件可以準確地判斷總線上哪些器件處于活動狀態(tài)。
所有SMBus事務都通過指定的SMBus協(xié)議之一執(zhí)行。
SMBus還有一個可選信號SMBALERT#,節(jié)點器件可以使用該信號快速通知主器件或系統(tǒng)主機,它有主器件需要的信息,例如報告故障情況。
圖16. SMBus拓撲結(jié)構(gòu)
SMBus上拉電路
圖17. SMBus上拉電路
SMBus地址
SMBus地址有7個二進制位,通常表示為前4位、后3位以及最后一個字母b,例如0001 110b。這些地址占據(jù)總線上一個8位字段的高7位。然而,該字段的最低位另有含義,不屬于SMBus地址的范圍。
圖18. 節(jié)點地址
7位目標地址從主器件發(fā)送到總線上的一個或多個器件(例如通過廣播地址)。
請注意,起始條件和停止條件是轉(zhuǎn)換,而不是位,在符號上方未顯示位計數(shù)。在事務圖中顯示時,重復起始也是一個轉(zhuǎn)換,而不是一位,在符號上方也不顯示位計數(shù)。
圖19. SMBus消息
SMBus時序測量
符號 | 參數(shù) | 單位 |
fSMB | SMBus 工作頻率 | kHz |
tBUF | 停止與起始條件之間的總線空閑時間 | μs |
THD-STA | (重復)起始條件之后的保持時間 | μs |
TSU-STA | 重復起始條件的建立時間 | μs |
tSU(STO) | 停止條件的建立時間 | μs |
tHD(DAT) | 數(shù)據(jù)保持時間 | ns |
tSU(DAT) | 數(shù)據(jù)建立時間 | ns |
tTIMEOUT | 檢測時鐘低電平超時 | ms |
tLOW | 時鐘低電平周期 | μs |
tHIGH | 時鐘高電平周期 | μs |
PMBus:重新定義電源管理
除了SMBus之外,還有一個變體PMBus,它是一種開放標準電源管理協(xié)議。這種靈活且高度通用的標準允許基于模擬和數(shù)字技術(shù)的器件之間進行通信,并提供真正的互操作性,由此將能降低電源系統(tǒng)設計的復雜性并縮短產(chǎn)品上市時間。
PMBus用于帶有電源控制和管理器件的電源的數(shù)字管理。它具有支持電源管理要求的命令和結(jié)構(gòu)。這意味著I2C Primer和PMBus在電氣要求和命令語義上是兼容和可互操作的。
電源管理的基本參數(shù)之一是過壓電平監(jiān)控,PMBus提供了設置和讀取該值的命令。PMBus可以附加在I2C Primer和SMBus的已有特性上,充當現(xiàn)有標準(尤其是SMBus)之上的協(xié)議層。
I2C 規(guī)范僅描述了2線總線的物理層、時序和流控制。I2C規(guī)范沒有(像SMBus協(xié)議那樣)描述消息的格式,也沒有描述消息的內(nèi)容。
PMBus規(guī)范是一個完整的電源管理協(xié)議。它說明了如何將比特和字節(jié)從一個器件傳送到另一個器件(即傳輸)。它還描述了一種命令語言,賦予這些比特和字節(jié)以意義。
尋址
對于冗余系統(tǒng),一旦電源安裝到系統(tǒng)中,最多有三個信號來設置電源的地址位置:地址2、地址1和地址0。對于非冗余系統(tǒng),電源器件地址位置應為B0h。
硬件
針對基于I2C VDD的電源和驅(qū)動(對于VDD = 3.3 V),電源中的器件應與SMBus 2.0高功率規(guī)范兼容。該總線應以3.3 V運行。
電源
電源內(nèi)部的電路應從備用輸出獲得電源。對于冗余電源,器件應從"邏輯或"器件的系統(tǒng)側(cè)供電。只要系統(tǒng)中的電源或并聯(lián)冗余電源接通交流電源,PMBus器件就應處于開啟狀態(tài)。
上拉電阻
電源內(nèi)部的SCL或SDA線上只能使用弱上拉電阻。主要上拉電阻由系統(tǒng)提供,可以連接到3.3 V或5 V。對于系統(tǒng)設計,主要上拉電阻應位于電源外部,并從備用電源軌獲取電源。
數(shù)據(jù)速度
電源中的PMBus器件應以100 kbps SMBus全速運行,并盡可能避免使用時鐘延展,因為它會減慢總線速度。
總結(jié)
表8概述并總結(jié)了I2C Primer、SMBus(高功率和低功率)、PMBus的信號、時序和電氣規(guī)格。
I2C Primer、SMBus和PMBus有何關(guān)系?
SMBus最初開發(fā)用于協(xié)助電池管理系統(tǒng),使用I2C硬件,但增加了第二級軟件,最終允許器件熱插拔,而無需重新啟動系統(tǒng)。PMBus擴展了SMBus,定義了一組專門用于管理功率轉(zhuǎn)換器的器件命令,暴露了器件的測量電壓、電流、溫度等屬性。一般而言,I2C Primer、SMBus和PMBus器件可以共享總線而不會發(fā)生什么大問題。
I2C、SMB、PMB的優(yōu)勢
僅使用兩條線
具有ACK?NACK位
廣為人知的協(xié)議
支持多個主器件和多個節(jié)點
硬件不如UART復雜
廣泛使用的方法
缺點
數(shù)據(jù)傳輸速率比SPI慢
數(shù)據(jù)幀的大小限制為8位
實現(xiàn)所需的硬件比SPI復雜
圖20. SMBus時序測量
所有地址 | 主要尋址,用于具有兩個尋址引腳的大多數(shù)服務器電源 | 附近尋址,前提是電源上提供了三個尋址引腳 | ||||||
系統(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、溫度傳感器、觸摸屏、接近傳感器
傳輸和控制用戶指引的操作
與多個微控制器通信
消費類電子設備
系統(tǒng)管理
電源管理
調(diào)試
規(guī)格 | I2C Primer |
SMBus 高功率 | 低功率 |
PMBus | ||
信號 |
分組差錯校驗(可選) SMBALERT(可選) 塊大小限制 |
— — — |
— — 32 字節(jié) |
— — 32 字節(jié) |
— — 255 字節(jié) |
時序 |
數(shù)據(jù)速率: 標椎模式 快速模式 快速模式+ 高速模式 時鐘速度 總線超時 總線主器件請求延遲(最小值) SCL 保持時間(最大值) 數(shù)據(jù)保持時間(最小值) |
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 |
電氣 |
每個總線段的容性負載(最大值) 上升時間(最大值) 0.4V時的上拉電流(最大值) 每個器件的漏電流(最大值) VIL輸入邏輯低電平閾值(最大值) VIH輸入邏輯高電平閾值(最小值) VOL輸出邏輯低電平閾值(最大值) |
400 pF 1 μs(100 kHz時), 300 ns(400 kHz時) 3 mA (標準和快速模式) ±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時), 300 ns(400 kHz時) 4 mA ±10 μA 0.8 V 2.1 V 0.4 V |
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753076 -
電源管理
+關(guān)注
關(guān)注
115文章
6177瀏覽量
144444 -
I2C
+關(guān)注
關(guān)注
28文章
1484瀏覽量
123619
發(fā)布評論請先 登錄
相關(guān)推薦
評論