24小時(shí)聯(lián)系電話:18217114652、13661815404
中文
公司新聞
串行通信協(xié)議第 6 部分 - I2C
串行通信協(xié)議第 6 部分 - I2C
在串行通信協(xié)議系列的下一部分中,我們將研究流行的 I 2 C 協(xié)議。這是在前面的文章中我們正在研究一些不同類型的可用串行通信協(xié)議的后續(xù)文章。這些為在合理短距離內(nèi)在設(shè)備之間傳輸數(shù)據(jù)提供了實(shí)用的解決方案。典型應(yīng)用包括通過微控制器從產(chǎn)生數(shù)據(jù)的外圍設(shè)備中捕獲大量數(shù)據(jù)。
本系列涵蓋了一些比較流行的協(xié)議。在本系列的最后,我們將通過查看每個(gè)協(xié)議的優(yōu)點(diǎn)和缺點(diǎn)來總結(jié)。我們希望您下次想在設(shè)計(jì)中實(shí)現(xiàn)串行通信總線時(shí)會(huì)發(fā)現(xiàn)本系列很有價(jià)值
I 2 C(發(fā)音為 I-squared-C)代表內(nèi)部集成電路。簡(jiǎn)而言之,它是一種單端、同步、多主、多從、封裝交換串行通信總線。我們現(xiàn)在將解釋這一口的含義。
由于它是同步的,這意味著它有一條時(shí)鐘線。這種類型的通信協(xié)議被微控制器廣泛用于短距離傳輸數(shù)據(jù)或與設(shè)備通信。盡管 I 2 C 是由飛利浦半導(dǎo)體(現(xiàn)為 NXP)發(fā)明的,但許多其他制造商生產(chǎn)的 IC 與 I 2 C 通信協(xié)議兼容或使用 I 2 C 通信協(xié)議。SMBus 是一種基本上與 I 2 C兼容的協(xié)議,主要區(qū)別在于 SMBus 具有較低的最大頻率、超時(shí)功能和較低的最大電流 - 因此本文中的討論也非常適用于 SMBus。
I 2 C 總線具有指定為主設(shè)備和從設(shè)備的設(shè)備。主設(shè)備是產(chǎn)生時(shí)鐘信號(hào)并啟動(dòng)與從設(shè)備通信的設(shè)備。從設(shè)備是接收時(shí)鐘信號(hào)并在被主設(shè)備尋址時(shí)做出響應(yīng)的設(shè)備。I 2 C 總線可以是多從,也可以是多主,即一個(gè)主設(shè)備可以有多個(gè)從設(shè)備,一個(gè)從設(shè)備可以有多個(gè)主設(shè)備:
I2C多從多主接線示例
I 2 C 協(xié)議具有三種基本的消息格式類型;每條消息都以 START 信號(hào)開始,然后以 STOP 信號(hào)結(jié)束。在第一種消息格式中,單個(gè)消息由主機(jī)發(fā)送到從機(jī),從機(jī)將數(shù)據(jù)傳輸?shù)綇臋C(jī)。在第二種消息格式中,單個(gè)消息由主機(jī)發(fā)送到從機(jī),從機(jī)將數(shù)據(jù)從從機(jī)傳輸回主機(jī)。在最終的組合消息格式中,主設(shè)備向一個(gè)或多個(gè)從設(shè)備發(fā)送多個(gè)讀或?qū)懨睢C總€(gè)命令必須包含目標(biāo)從設(shè)備的地址。
I 2 C 總線由兩條傳輸線組成,不包括地線。通常,I 2 C 總線由作為時(shí)鐘信號(hào)的 SCL 線和作為數(shù)據(jù)信號(hào)的 SDA 線組成。時(shí)鐘線是單向的,從主機(jī)到從機(jī)。
這是一種半雙工串行通信,即在任一時(shí)刻只能向一個(gè)方向發(fā)送數(shù)據(jù),因此主從不能同時(shí)發(fā)送數(shù)據(jù)。
帶有上拉電阻的 I2C 接線示例
I 2 C 具有漏極開路或集電極開路輸出,這意味著驅(qū)動(dòng)器可以將線路拉低但不能將其拉高??偩€需要外部上拉電阻將每條線路的空閑狀態(tài)設(shè)置為高電平,即當(dāng)沒有設(shè)備將其拉低時(shí):
I2C 主從驅(qū)動(dòng)程序簡(jiǎn)化的硬件示例
上拉電阻也決定了總線的通信速度,取決于總線的總電容。較高值的上拉電阻將降低通信速率,而較低的電阻值將提供較高的通信速率。內(nèi)部驅(qū)動(dòng)程序也將顯著決定通信速度。更大的(更高的電流能力)驅(qū)動(dòng)器將產(chǎn)生更快的上升和下降時(shí)間并增加潛在的通信速率。一個(gè)好的經(jīng)驗(yàn)法則是首先考慮使用值為 4.7 kΩ 的上拉電阻,然后在必要時(shí)進(jìn)行調(diào)整。此外,在不需要更高速度的情況下降低通信速率可能是一種很好的做法,因?yàn)樗梢源蟠蠼档碗娙菪?yīng),并且總線的功耗也會(huì)更低。但是,電阻值必須介于指定的允許限值之間
不同選擇的上拉電阻值的信號(hào)示例
還可以使用以下公式計(jì)算所需的上拉電阻值:
其中最小電阻值使用以下公式計(jì)算:
V CC – 是 I 2 C 高電平(上拉)電壓?jiǎn)?span>
V OL - 是 I 2 C 驅(qū)動(dòng)器的有效邏輯低電平
I OL - 是拉低邏輯電平所需的驅(qū)動(dòng)器電流(使電容放電)
最大電阻值的計(jì)算方法如下:
T r – 是 SCL 和 SDA 線的上升時(shí)間
C b – 是每條總線的電容負(fù)載
I 2 C 總線的典型參數(shù)如下:
此外,下圖顯示了不同要求如何影響最小和最大上拉電阻限制:
最小和最大的上拉電阻值圖表
我們還必須考慮到 I 2 C 總線可以與多個(gè)電壓電平設(shè)備一起使用。例如,您可以通過將上拉電阻連接到 3.3 V 電源,將公共總線連接到 5 V 和 3.3 V 設(shè)備。這將與兩種設(shè)備類型兼容。但是,在某些情況下,這將不起作用,例如,在同時(shí)使用 5 V 和 1.2 V 設(shè)備的情況下。此處,一個(gè)設(shè)備使用的最高電壓 1.2 V 會(huì)被另一個(gè)設(shè)備讀取為低電壓或未知電壓。在這些情況下,邏輯電平轉(zhuǎn)換器是使兩種設(shè)備類型都能使用公共總線的正確解決方案。
下面是一個(gè)示例時(shí)間圖,顯示了 I 2 C 總線上的數(shù)據(jù)位:
I2C中的數(shù)據(jù)包示例
在數(shù)據(jù)傳輸開始條件 (S) 下,SDA 被拉低,而 SCL 保持高電平
然后 SCL 被拉低,SDA 設(shè)置第一個(gè)數(shù)據(jù)位電平,同時(shí)保持 SCL 為低。(藍(lán)條)
在 SLC 保持高電平時(shí)采樣來自 SDA 的數(shù)據(jù)。SDA 不得在 SLC 的上升沿和下降沿之間改變狀態(tài)(綠條)
該過程以設(shè)置的比特率重復(fù)
最后一位由時(shí)鐘脈沖設(shè)置,在此期間 SDA 被拉低以準(zhǔn)備停止位
當(dāng) SCL 上升并跟隨 SDA 的上升沿時(shí)出現(xiàn)停止條件 (P)
通常,一臺(tái)主I 2 C 通信設(shè)備最多可支持1008 個(gè)從設(shè)備。然而,這使得硬件設(shè)計(jì)非常復(fù)雜,并且要求 I 2 C 總線以最低速度運(yùn)行。這是因?yàn)楹荛L的傳輸線的電容增加,使得信號(hào)上升和下降時(shí)間變慢。高速總線的問題在于,當(dāng)電容增加太多時(shí),由于信號(hào)的上升和下降時(shí)間增加,位可能會(huì)重疊。
一種解決方案是,如果總線包括太多從設(shè)備,可以使用緩沖或多路復(fù)用技術(shù)將單個(gè)長總線分成更小的段。這將有助于將總線段的電容保持在最大允許值以下,甚至允許使用多路復(fù)用器將具有相同地址的多個(gè)設(shè)備分開。
緩沖用于將每個(gè)段的電容與其他段隔離,并允許在更長的電線或跡線上使用單獨(dú)的從站和主站。
I2C 總線上的緩沖和復(fù)用技術(shù)
在某些情況下,當(dāng)從設(shè)備需要延遲主設(shè)備發(fā)送更多數(shù)據(jù)時(shí),它可能需要將時(shí)鐘強(qiáng)制為低電平。通常,當(dāng)從設(shè)備在將數(shù)據(jù)發(fā)送到主設(shè)備之前需要時(shí)間準(zhǔn)備數(shù)據(jù)時(shí),就會(huì)發(fā)生這種情況。例如,要完成模數(shù)轉(zhuǎn)換或 EEPROM 存儲(chǔ)命令尚未完成寫入非易失性存儲(chǔ)器。此操作稱為“時(shí)鐘拉伸”。
對(duì)于一個(gè)主設(shè)備與多個(gè)從設(shè)備進(jìn)行通信,需要一種尋址機(jī)制。大多數(shù)情況下,從設(shè)備地址將由被拉低或拉高的設(shè)備上的引腳設(shè)置。當(dāng)主設(shè)備發(fā)送命令時(shí),所有連接到總線的設(shè)備都會(huì)收到該命令。但是,在每個(gè)消息的開頭,主設(shè)備會(huì)發(fā)送一組尋址位。結(jié)果是只有一個(gè)設(shè)備會(huì)響應(yīng)該命令,該設(shè)備將是該命令所針對(duì)的設(shè)備。其他從設(shè)備將忽略該命令。
有大量可用的 IC 可以使用 I 2 C 總線。這些組件及其應(yīng)用的一些示例是:
RTC(實(shí)時(shí)時(shí)鐘)
低速 DAC(數(shù)模轉(zhuǎn)換器)或 ADC(模數(shù)轉(zhuǎn)換器)
顯示數(shù)據(jù)通道的色彩平衡設(shè)置
改變智能數(shù)字揚(yáng)聲器的音量
與外部存儲(chǔ)設(shè)備通信,例如 EEPROM
控制 OLED 或 LCD 顯示器
打開和關(guān)閉電源