IIC通訊為什么要加上拉電阻?
[導讀]推薦關(guān)注下方公眾號學習更多嵌入式知識!I2C為什么要接上拉電阻?因為它是開漏輸出。為什么是開漏輸出?I2C協(xié)議支持多個主設(shè)備與多個從設(shè)備在一條總線上,如果不用開漏輸出,而用推挽輸出,會出現(xiàn)主設(shè)備之間短路的情況。所以總線一般會使用開漏輸出。為什么要接上拉電阻?接上拉電阻是因為I2C...
推薦關(guān)注下方公眾號學習更多嵌入式知識! I2C為什么要接上拉電阻?因為它是開漏輸出。
為什么是開漏輸出?
I2C協(xié)議支持多個主設(shè)備與多個從設(shè)備在一條總線上,如果不用開漏輸出,而用推挽輸出,會出現(xiàn)主設(shè)備之間短路的情況。所以總線一般會使用開漏輸出。為什么要接上拉電阻?接上拉電阻是因為I2C通信需要輸出高電平的能力。一般開漏輸出無法輸出高電平,如果在漏極接上拉電阻,則可以進行電平轉(zhuǎn)換。I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級必須是漏極開路,都通過上拉電阻連接到電源,這樣才能夠?qū)崿F(xiàn)“線與”功能。當總線空閑時,這兩條線路都是高電平。上拉電阻阻值怎么確定?一般IO端口的驅(qū)動能力在2mA~4mA量級。阻值不能過小。功耗問題。如果上拉阻值過小,VDD灌入端口的電流將較大,功耗會很大,導致端口輸出的低電平值增大(I2C協(xié)議規(guī)定,端口輸出低電平的最高允許值為0.4V)。故通常上拉電阻應選取不低于1K的電阻(當VDD=3V時,灌入電流不超過3mA)。阻值不能過大。速度問題。它取決于上拉電阻和線上電容形成的RC延時,RC延時越大,波形越偏離方波趨向于正弦波,數(shù)據(jù)讀寫正確的概率就越低,所以上拉電阻不能過大。
I2C總線上的負載電容不能超過400pF。當I2C總線上器件逐漸增多時,總線負載電容也相應增加。當總的負載電容大于400pF時,就不能可靠的工作。這也是I2C的局限性。建議上拉電阻可選用1.5K,2.2K,4.7K。I2C總線基本操作根據(jù)I2C總線規(guī)范,總線空閑時兩根線都必須為高。假設(shè)主設(shè)備A需要啟動I2C,他需要在SCL高電平時,將SDA由高電平轉(zhuǎn)換為低電平作為啟動信號。主設(shè)備A在把SDA拉高后,它需要再檢查一下SDA的電平。為什么? 因為線與,如果主設(shè)備A拉高SDA時,已經(jīng)有其他主設(shè)備將SDA拉低了,由于 1
為什么是開漏輸出?
I2C協(xié)議支持多個主設(shè)備與多個從設(shè)備在一條總線上,如果不用開漏輸出,而用推挽輸出,會出現(xiàn)主設(shè)備之間短路的情況。所以總線一般會使用開漏輸出。為什么要接上拉電阻?接上拉電阻是因為I2C通信需要輸出高電平的能力。一般開漏輸出無法輸出高電平,如果在漏極接上拉電阻,則可以進行電平轉(zhuǎn)換。I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級必須是漏極開路,都通過上拉電阻連接到電源,這樣才能夠?qū)崿F(xiàn)“線與”功能。當總線空閑時,這兩條線路都是高電平。上拉電阻阻值怎么確定?一般IO端口的驅(qū)動能力在2mA~4mA量級。阻值不能過小。功耗問題。如果上拉阻值過小,VDD灌入端口的電流將較大,功耗會很大,導致端口輸出的低電平值增大(I2C協(xié)議規(guī)定,端口輸出低電平的最高允許值為0.4V)。故通常上拉電阻應選取不低于1K的電阻(當VDD=3V時,灌入電流不超過3mA)。阻值不能過大。速度問題。它取決于上拉電阻和線上電容形成的RC延時,RC延時越大,波形越偏離方波趨向于正弦波,數(shù)據(jù)讀寫正確的概率就越低,所以上拉電阻不能過大。
I2C總線上的負載電容不能超過400pF。當I2C總線上器件逐漸增多時,總線負載電容也相應增加。當總的負載電容大于400pF時,就不能可靠的工作。這也是I2C的局限性。建議上拉電阻可選用1.5K,2.2K,4.7K。I2C總線基本操作根據(jù)I2C總線規(guī)范,總線空閑時兩根線都必須為高。假設(shè)主設(shè)備A需要啟動I2C,他需要在SCL高電平時,將SDA由高電平轉(zhuǎn)換為低電平作為啟動信號。主設(shè)備A在把SDA拉高后,它需要再檢查一下SDA的電平。為什么? 因為線與,如果主設(shè)備A拉高SDA時,已經(jīng)有其他主設(shè)備將SDA拉低了,由于 1





