理論上,I²C協議允許使用7位尋址將多達127個設備連接到主機。這是一個很大的數目,那麼為什麼任何低成本微控制器(例如此PIC24)都具有多個I²C端口?為什麼需要它?
理論上,I²C協議允許使用7位尋址將多達127個設備連接到主機。這是一個很大的數目,那麼為什麼任何低成本微控制器(例如此PIC24)都具有多個I²C端口?為什麼需要它?
傳感器集線器佈置
在這種情況下,有兩條I²C總線。我們稱它們為本地總線和主總線。本地總線的目的是將一堆傳感器連接到微控制器(μC)。 μC的目的是輪詢傳感器,匯總來自傳感器的信息,並檢測某些事件。具有這種作用的μC稱為傳感器中心。傳感器集線器不負責高級功能。有一個強大的主處理器。主總線將傳感器集線器連接到主處理器。因此,傳感器集線器μC是本地I²C總線上的主機,而I²C主總線上是從機。
SPI和I²C
PIC已鏈接原始文章中的內容不在SPI和I²C之間共享。但是,還有其他PIC將相同的引腳用於硬件SPI和I²C,因為它們都是通過相同的MSSP外設實現的。如果PIC有兩個獨立的MSSP外設,則一個可用於硬件SPI,而另一個可用於硬件I²C。
需要多個總線的一個非常普遍的原因是設備以不同的速度運行。最初,I²C的最高運行頻率為100 kHz。後來,速度提高到了最高400 kHz,然後又提高到了1 MHz或更高。
問題是,由於每個設備的地址都嵌入在I²C協議中,所以如果在同一總線上具有不同額定速度的設備(例如100 kHz和400 kHz),您必須始終以同一總線上所有設備通用的最低速度運行總線(在這種情況下為100 kHz)。
如果您以較高的速度(400 kHz)運行總線,很顯然,低速設備將無法正常工作,甚至可能將高速設備的地址解釋為自己的地址,從而導致400 kHz設備也會失敗。但是,即使您最初以100 kHz的速度運行總線,然後在尋址了較高速度的芯片後嘗試將總線加速至400 kHz,較低速度的芯片也有可能(儘管可能不太可能)解釋以下情況之一:高速數據包錯誤地作為其地址,從而使總線上的通信混亂。無論哪種情況,在與400 kHz設備互換時,100 kHz設備都可能處於未知狀態。
因此,如果設備以不同的速度運行,則效率最高。 em>和您有多個I²C端口 ,您有備用引腳可以滿足這種奢侈的需要,一個I²C用於100 kHz設備,另一個用於400 kHz設備,另一個用於可能需要1 MHz的設備。
對於SPI來說這不是問題,因為每個設備都通過單獨的芯片選擇線在硬件中啟用(尋址)。因此,時鐘速度可以與所選芯片的速度(10 MHz,20 MHz,等等)匹配,而不會影響同一總線上的其他芯片,因為它們沒有啟用。
還可以讓您支持兩個具有相同地址的設備。是的,大多數設備都可以讓您用帶子選擇其地址的後兩位。最近,我不得不支持4個設備,每個設備僅允許您使用一個電阻設置其地址的LSB。擁有兩個端口對我來說並不意味著額外的費用。
也許我想讓一個成為一堆設備的主設備,而另一個作為從設備的端口,因此我的主設備不必等待抓取在我對溫度傳感器進行第10,000次輪詢時,總線給我一個命令。
在這個線程中似乎還有很多其他好的響應,只需加上2美分即可。
第二,I²C可用於獲得更多帶寬(您可以同時接收或發送兩個字節)。
如果您有一些連續工作的ADC,則一個I²C一直很忙
切換地址也需要一些時間,因此在某些情況下-您可以將兩個端口用於兩個設備,並且避免地址更改以節省時間。
其他人提到了這樣做的許多原因,我將添加一個:
您有一堆5V I2C設備和一堆3V3 I2C設備。
例如,我有一個3.3V的微型電池,它有兩個I2C端口,一個5V耐壓,另一個僅3V3。