許多系統(tǒng)需要可靠的非易失性存儲,對于這些系統(tǒng),可選擇EEPROM存儲器技術。EEPROM技術具有穩(wěn)定可靠的架構,供應商較多,并且經(jīng)過了多年的改進。EEPROM器件可用于各種工業(yè)標準串行總線,包括I2C™、SPI、Microwire和UNI/O®總線。其中,I2C總線在單片機和其他芯片組中具有廣泛的硬件支持,并且信號傳遞方式簡單,可采用極小的硅片有效實現(xiàn),因此占據(jù)了非易失性存儲器市場約70%的份額。但是,I2C總線拓撲要依賴于阻值合適的上拉電阻才能實現(xiàn)穩(wěn)定可靠的通信。電阻值選擇錯誤不僅會造成電能浪費,還可能導致總線狀態(tài)和傳輸過程由于噪聲、溫度變化、工作電壓變化以及器件間的制造差異而出錯。
I2C是二線同步總線,使用總線主器件SCL線上產(chǎn)生的信號作為時鐘。SDA線用于雙向數(shù)據(jù)傳輸。當時鐘處于特定狀態(tài)時可修改數(shù)據(jù)線,以指示傳輸?shù)拈_始和停止,從而避免使用更多的線。I2C總線以集電極開路輸出為基礎,其中,器件可通過接地晶體管拉低線的電平,如圖1所示。這樣便可輕松對總線控制進行仲裁,從而在一條數(shù)據(jù)線上實現(xiàn)雙向通信以及多主器件支持。如圖1所示,每條線都有一個外部電阻連接至Vdd,該電阻可在釋放總線或總線空閑時拉高線的電平。
圖1 I2C™總線拓撲
確定上拉電阻值(Rp)時需要考慮三個因素:
• 電源電壓(Vdd)
• 總線總電容(CBUS)
• 高電平總輸入電流(IIH)
以下面的條件為例計算理想的上拉電阻值:
• 電源電壓(Vdd)為5V
• 時鐘頻率為400kHz
• 總線電容為100pF
電源電壓(Vdd)
I2C規(guī)范將低于VIL或低于電源電壓30%的電壓定義為邏輯低電平,同樣,將高于VIH或高于電源電壓70%的電壓定義為邏輯高電平,如圖2所示。這兩個電平之間的電壓屬于不明確的邏輯電平。實際上,引腳會將該范圍內(nèi)的電平讀為邏輯高電平或邏輯低電平,但在器件間可能不同,因為溫度、電壓、噪聲源和其他環(huán)境因素會影響邏輯電平。
圖2 指定為邏輯高電平和邏輯低電平的電壓電平
電源電壓限制了可允許總線拉低的最小Rp值。過強的上拉會阻止器件充分拉低線的電平,導致無法確保邏輯低電平能被檢測到。這是由上拉電阻與接地晶體管的導通電阻之間形成的分壓器產(chǎn)生的,如圖3所示。通常不會指定晶體管的導通電阻。相反,會給定使晶體管上的電壓降低于輸出邏輯低電壓電平(VOL)的最大灌電流(IOL)。使用歐姆定律得出公式1。
圖3 集電極開路拓撲和等效電路
對于Microchip的I2C EEPROM器件,規(guī)定在IOL為3mA時,VOL最大為0.4V,其他制造商的器件的范圍與其相似。
公式1:允許總線電壓拉低的最小上拉電阻。
如果總線上有多個器件,最小Rp由灌電流最低的器件決定。
總線總電容(CBUS)
在SCL和SDA線上,所有引腳、連接、PCB走線和導線都會引入電容。這些電容結合在一起稱為總線電容,對于長走線和長連接來說,總線電容可能很大。集電極開路拓撲需要外部電阻才能在總線釋放時拉高線的電平。上拉電阻(與總線電容耦合)具有一個RC時間常數(shù),該常數(shù)限制了上升時間。隨著時鐘頻率的增加,該常數(shù)愈發(fā)重要,因為需要更少的時間升高線的電平。如果所選電阻值過高,線的電平在下一次拉低之前可能無法上升到邏輯高電平。對于一條總線上具有多個器件的設計(通常具有較大的總線電容)來說,這是重要的考慮因素。
總線電容可通過PCB走線長度和引腳分布電容計算,也可以使用電容探頭或智能鑷子量表進行測量。如果不能準確計算或測量總線電容,應高估最壞情況讀數(shù)以提供安全的最大電阻值。
公式2是用于確定充電電容負載兩端電壓(與時間成函數(shù)關系)的一般公式。這可以計算在特定上拉電阻和總線電容下,總線電壓上升到特定值所需的時間。
公式2:通過電阻對電容進行充電的一般公式。
重新排列
之后,我們可計算電壓上升至VIL的時間(T1)、上升至VIH的時間(T2)以及精確計算這兩個電平之間的時間(TR),如圖4所示。由于VIL和VIH都是由Vdd產(chǎn)生的,因此該公式與電源電壓無關,因為Vdd項已抵消。
圖4 邏輯低電平轉換為邏輯高電平的充電時間
求解
求解
各種工作電壓的最大上升時間由I2C標準指定,并通過上拉電阻確定。根據(jù)該時間和總線電容,我們可以計算允許的最大上拉電阻(Rp)。當電壓為5V,時鐘頻率為400kHz時,給定總線電容CBUS為100pF,則規(guī)定的最大上升時間(TR)為300ns。
公式3:符合I2C上升時間標準的最小上拉電阻。
高電平總輸入電流(IIH)
即使沒有器件拉低線的電平,線仍處于邏輯高電平時,電流仍會繼續(xù)流過上拉電阻。該電流由總線上器件的數(shù)字輸入的泄漏產(chǎn)生,也可能是質(zhì)量較差的PCB材料以及焊接殘留物所導致。其中一些因素是無法預見的,但采用高質(zhì)量材料和良好的制造工藝時,輸入引腳泄漏是主要原因。
根據(jù)圖2,沒有器件拉低總線電平時,線的電平需要高于VIH才能被視為邏輯高電平。泄漏電流會限制Rp的最大值,這樣其兩端的電壓降不會阻止線的電平被拉高至VIH以上。對于VIH規(guī)范,還應謹慎留出一些保護裕量,以防止噪聲尖峰將電壓拉低至VIH電平以下。要在高噪聲環(huán)境下穩(wěn)定工作,I2C規(guī)范建議采用0.2 Vdd作為高出VIH的適當裕量。
公式4:邏輯高輸入電平上的額外裕量。
通常會在器件的數(shù)據(jù)手冊中給出數(shù)字輸入的泄漏電流,對于Microchip的I2C EEPROM器件,最大輸入泄漏電流(IlIEE)為1µA。組成系統(tǒng)的最少元件是單片機I2C主器件和I2C從器件。對于本例,采用一個輸入泄漏電流(IlIMCU)為1µA的單片機和四個I2C EEPROM器件,允許100%裕量,IIH為10µA。
公式5:已定義總線的引腳泄漏產(chǎn)生的泄漏電流。
應用歐姆定律,我們可以確定符合這些規(guī)范的Rp最大值。
公式6:確保邏輯高電平的最小上拉電阻值。
電阻值計算
通過計算電源電壓、總線電容和泄漏電流,我們可以得出RP值的范圍。
可以忽略由泄漏電流產(chǎn)生的 50KΩ(最大值),因為總線電容起主導作用。因此,可接受的電阻值的范圍為:
設計人員應選擇范圍中間附近的值,以盡可能提供較大的保護帶。對于本例,2.2KΩ的上拉電阻較為理想。
總線速度與功耗
當提高總線速度或存在較大總線電容時,必須減小上拉電阻。阻值較低的電阻會導致電流消耗增加,因為總線上的每個邏輯低電平都會產(chǎn)生對地通路,從而對功耗造成負面影響??焖偻瓿扇蝿詹⑹瓜到y(tǒng)恢復到低功耗空閑狀態(tài),與較高總線速度要求所產(chǎn)生的額外電流消耗存在矛盾,總線速度可成為兩者之間的權衡因素。對于功耗預算非常低的應用,SPI可能是更合適的總線協(xié)議,因為其使用驅(qū)動線路,而不是集電極開路。