Dlaczego potrzeba wielu portów I²C?


19

Protokół I²C pozwala teoretycznie i przy 7-bitowym adresowaniu podłączyć do urządzenia głównego do 127 urządzeń. Jest to duża liczba, więc dlaczego każdy tani mikrokontroler (np. Ten PIC24 ) miałby więcej niż jeden port I²C? Dlaczego jest to potrzebne?

Odpowiedzi:


23

Układ piasty czujnika

W tym scenariuszu występują dwie magistrale I²C. Nazwijmy je autobusem lokalnym i autobusem głównym . Celem lokalnej magistrali jest podłączenie szeregu czujników do mikrokontrolera (μC). Celem μC jest odpytanie czujników, zebranie z nich informacji i wykrycie określonych zdarzeń. ΜC w takiej roli nazywa się hubem czujnika . Piasta czujnika nie jest odpowiedzialna za funkcje wyższego rzędu; jest do tego potężny główny procesor. Magistrala główna łączy hub czujnika z głównym procesorem. Zatem piasta czujnika μC jest urządzeniem nadrzędnym na lokalnej magistrali I²C i urządzeniem podrzędnym na magistrali głównej I²C.

SPI i I²C

PIC połączony w oryginalnym poście nie dzieli pinów między SPI i I²C. Istnieją jednak inne PIC, które używają tych samych pinów dla sprzętowego SPI i I²C, ponieważ oba są zaimplementowane z tym samym urządzeniem peryferyjnym MSSP. Jeśli PIC ma dwa oddzielne urządzenia peryferyjne MSSP, jeden może być używany do sprzętowego SPI, a drugi do sprzętowego I²C.


21

Bardzo częstym powodem, aby potrzebować więcej niż jednej magistrali, są urządzenia działające z różnymi prędkościami. Pierwotnie I²C działał przy maksymalnej częstotliwości 100 kHz. Później prędkość zwiększono do maksymalnie 400 kHz, a jeszcze później do 1 MHz i więcej.

Gotcha jest, ponieważ adres każdego urządzenia jest osadzony w protokole I²C, więc jeśli masz urządzenia o różnych wartościach prędkości na tej samej magistrali, powiedzmy 100 kHz i 400 kHz, zawsze musisz uruchomić magistralę z najniższą wspólną prędkością do wszystkich urządzeń na tej samej magistrali (w tym przypadku 100 kHz).

Jeśli prowadziłeś magistralę z większą prędkością (400 kHz), oczywiście urządzenie o niższej prędkości nie działałoby poprawnie, a może nawet zinterpretować adres urządzenia o dużej prędkości jako własnej, powodując awarię urządzenia 400 kHz jako dobrze. Ale nawet jeśli początkowo prowadziłeś magistralę przy 100 kHz, a następnie próbowałeś przyspieszyć magistralę do 400 kHz po zaadresowaniu układu o większej prędkości, byłoby możliwe (choć prawdopodobnie mało prawdopodobne), aby układ o niższej prędkości zinterpretował jeden z szybkie pakiety danych niepoprawnie jako swój adres, a tym samym zepsuć komunikację w magistrali. W obu przypadkach na końcu wymiany z urządzeniem 400 kHz urządzenie 100 kHz prawdopodobnie będzie w nieznanym stanie.

Jest więc najbardziej wydajny, jeśli masz urządzenia działające z różnymi prędkościami i masz wiele portów I²C i masz zapasowe styki, aby pozwolić na taki luksus, mieć jeden I²C do powiedzenia dla urządzeń 100 kHz, inny dla urządzeń 400 kHz, i inny dla urządzeń 1 MHz, zależnie od potrzeb.

Nie jest to problem z SPI, ponieważ każde urządzenie jest włączane (adresowane) sprzętowo przez osobną linię wyboru układu. Tak więc szybkość zegara można dopasować do prędkości wybranego układu (10 MHz, 20 MHz, cokolwiek) bez wpływu na inne układy na tej samej magistrali, ponieważ nie są one włączone.


19

Może także umożliwić obsługę dwóch urządzeń o tym samym adresie. Tak, większość urządzeń pozwala wybrać dwa dolne bity ich adresu za pomocą pasków. Ostatnio musiałem wspierać 4 urządzenia, z których każde pozwoliło tylko ustawić LSB swojego adresu za pomocą rezystora. Posiadanie dwóch portów oznacza dla mnie brak dodatkowych kosztów.

Może chcę, aby jedno było mistrzem dla wielu urządzeń i prezentowało drugie jako port podrzędny, więc mój mistrz nie musi czekać, aby złapać autobus i wydać polecenie, gdy sonduję czujnik temperatury dla 10.000-tej czas.

Wydaje się, że w tym wątku jest wiele innych dobrych odpowiedzi, po prostu dodając moje 2 centy.


9

Prędkość.

Jeśli musisz uzyskać dostęp do dwóch urządzeń I2C jednocześnie, możesz mieć poważny konflikt. Albo jeden musiałby poczekać na drugi.


9

Po drugie, I²C może być wykorzystane do uzyskania większej przepustowości (możesz odbierać lub wysyłać dwa bajty jednocześnie).

Jeśli masz ADC, który działa nieprzerwanie, jeden I²C jest cały czas zajęty.

Zmiana adresu również zajmuje trochę czasu, więc w niektórych przypadkach - możesz użyć dwóch portów dla dwóch urządzeń i uniknąć zmiany adresu, aby zaoszczędzić czas.


0

Inni wymienili wiele powodów, aby to zrobić, dodam jeden:

Masz kilka urządzeń 5V I2C i kilka urządzeń 3V3 I2C.

Na przykład mam mikro 3,3 V, które ma dwa porty I2C, jeden tolerujący 5 V, a drugi tylko 3 V3.


Z ciekawości, która to mikro?
Nick Alexeev

1
LPC4330, oto fragment instrukcji: „Podkładka cyfrowa we / wy tolerująca 5 V z otwartym odpływem, zgodna ze specyfikacją Fast Mode Plus magistrali I2C. Podkładka ta wymaga zewnętrznego podciągania, aby zapewnić funkcjonalność wyjściową. Po wyłączeniu zasilania ta pin podłączony do magistrali I2C jest pływający i nie zakłóca linii I2C. ”
Peufeu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.