Ile urządzeń podrzędnych i2c może obsługiwać i2c master?


17

Czy istnieje maksymalna liczba urządzeń podrzędnych i2c, którymi może sterować urządzenie i2c master? Jakie są fizyczne czynniki ograniczające?


1
Masz 7-bitowy adres. Oznacza to, że możesz adresować do 127 niewolników.
Botnic

Dzięki. Czy istnieją fizyczne czynniki ograniczające, takie jak prąd, pojemność lub coś takiego, co uniemożliwia osiągnięcie liczby urządzeń podrzędnych do 127?
user768421

1
@ Botot całkowicie ignoruje przełączniki, koncentratory, bufory, wzmacniacze i dowolne urządzenie i2c, które umożliwia rozbudowę magistrali.
Passerby

Odpowiedzi:


22

Czynnikiem ograniczającym oprogramowanie jest rozmiar adresu używanego przez urządzenia podrzędne: 7-bitowy lub 10-bitowy, które obsługują odpowiednio 127 i 1023 urządzeń. Fizycznie istnieją dwa ograniczenia. Po pierwsze, fizyczny rozmiar magistrali, ponieważ jest ona przeznaczona tylko do krótkich przebiegów (część między IC). Jeśli magistrala jest zbyt duża, należy zająć się efektami obciążenia pojemnościowego i opóźnieniem propagacji. Po drugie, niektóre urządzenia nie obsługują pełnego zakresu adresów I2C. Jako przykład, żyroskop MPU6050 obsługuje tylko dwa adresy, a niektóre urządzenia rezerwują określone adresy do specjalnych celów.


2
Wystąpił błąd „jeden po drugim”. Adresowanie 7-bitowe obsługuje 128 adresów (od 0 do 127). Adresowanie 10-bitowe obsługuje 1024 adresy (od 0 do 1023).
CurtisHx

3
To nie jest jeden błąd. Jest to błąd „wyłączony przez 6”, ponieważ istnieje 7 zarezerwowanych adresów, a nie tylko jeden.
kruemi,

Schemat adresowania jest podyktowany przez urządzenia na magistrali, urządzeniu nadrzędnym lub podrzędnym. Niektóre urządzenia mają ustawione zakresy adresów i adresy zastrzeżone. Inne urządzenia, na przykład wiele mikrokontrolerów, nie mają zarezerwowanych adresów i mogą używać dowolnego adresu w danym schemacie bitowym.
vini_i

Te liczby są nieco poprawne, jednak konieczne jest zastrzeżenie. Istnieje kilka zarezerwowanych adresów, takich jak 1111 XXX i 0000 XXX. Oznacza to 7-bit = 2 ^ 7 - 16 = 112 użytecznych adresów, 10-bit to pełne 2 ^ 10 1024. 8-bit nie jest (nie powinno być czymś), zwykle zawiera bit R / W na 7-bitach. nxp.com/docs/en/user-guide/UM10204.pdf
awaria magistrali

@busfault Potwierdzam, że adresy 8-bitowe nie są efektywne. Usunąłem je z mojej odpowiedzi. Większość mikrokontrolerów może zignorować niektóre lub wszystkie zastrzeżone adresy i użyć pełnego zakresu adresów. W mojej odpowiedzi zauważam, że jest to specyficzne dla urządzenia.
vini_i

10

Maksymalna liczba węzłów jest ograniczona przestrzenią adresową, a także całkowitą pojemnością magistrali 400 pF, co ogranicza praktyczne odległości komunikacyjne do kilku metrów.

Czytaj więcej na I²C


9

Adresowanie ogranicza liczbę urządzeń - niektóre mogą korzystać z adresowania 10-bitowego (dość rzadko używane), co ogranicza liczbę adresów do 1024. Istnieje kilka „zarezerwowanych” adresów.

I2C (w przeciwieństwie do „magistrali dwuprzewodowej” lub cokolwiek innego, kto chce nazywać podobne magistrale), powinien być zgodny ze standardem NXP (z domu Philips), specyfikacją magistrali I10C UM10204 i instrukcją obsługi . To powinien być twój główny dokument referencyjny, a nie różne interpretacje i podzbiory, które istnieją gdzie indziej.

Na maksymalną liczbę urządzeń będzie mieć wpływ zdolność najsłabszego wyjścia (która z kolei określa minimalny rezystor podciągający), okablowanie i pojemność wejściowa oraz tryb / częstotliwość pracy. Patrz sekcja 7.2 Praca powyżej maksymalnej dopuszczalnej pojemności magistrali, jeśli maksymalna pojemność musi zostać przekroczona:

wprowadź opis zdjęcia tutaj


7

Magistrala i2c jest ograniczona głównie pojemnością magistrali (a tym samym szybkością) oraz dostępnymi adresami urządzeń. I fizyczna przestrzeń na tablicy.

Ale nie ma prawdziwej górnej granicy, gdy weźmie się pod uwagę bufory magistrali, przedłużacze, repeatery, koncentratory, multipleksery, przełączniki (lub dowolną inną nazwę dla urządzenia, które może przełączać się między wieloma magistralami). Dodaje to trochę narzutu i2c, ponieważ może być dostępny za pośrednictwem tej samej magistrali i2c. Na przykład PCA9548A jest 8-bitowym przełącznikiem magistrali.

Ten pojedynczy układ teoretycznie może czterokrotnie zwiększyć liczbę urządzeń slave i2c (127 * 8), które są dostępne w innym przypadku. A PCA9548A można skonfigurować dla maksymalnie 8 adresów na jednej magistrali, więc 8 * 8 * 127 urządzeń. (matematyka może być wyłączona). I to tylko z tym urządzeniem i nie tylko.

Szczerze mówiąc, nie ma teoretycznego limitu, jeśli dostosujesz się do pojemności.


5

I2C określa 2 długości adresów, 7 i 10 bitów , co daje teoretyczne maksimum odpowiednio 128 i 1024 odrębnych adresów.

Istnieje jednak kilka zarezerwowanych adresów, takich jak 0x00 (połączenie ogólne). To dodatkowo ogranicza przestrzeń adresową.

Jeśli budujesz system, w którym masz bezpośrednią kontrolę nad urządzeniami I2C, to może korzystać z adresów zarezerwowanych dla własnego użytku, ale system nie będzie zgodne ze standardem I2C.

Oprócz adresowania istnieją fizyczne ograniczenia magistrali. Każde urządzenie w magistrali musi być w stanie pociągnąć magistralę w niskim przedziale czasowym (w zależności od prędkości magistrali). Jeśli magistrala ma dużą pojemność, urządzenia mogą nie być w stanie wystarczająco szybko wyciągnąć SDA, a podciągnięcia mogą nie przywrócić SDA wystarczająco szybko.

Teraz problemy sprzętowe można rozwiązać za pomocą odrobiny sprzętu sterownika. Pracuję teraz nad projektem, który wykorzystuje I2C do komunikacji z urządzeniami na kilku metrach. Główna magistrala wykorzystuje napięcie 24 V, a każda płytka ma sterownik, który obniża ją do 3,3 V.

W łupinie orzecha można pokonać fizyczne ograniczenie I2C. Adresowanie można obejść, ale tylko wtedy, gdy masz bezpośrednią kontrolę nad urządzeniem.


Minęły prawie trzy lata, odkąd pracowałeś nad bardzo długimi autobusami i2c. Czy działały dobrze?
wallyk

1
@wallyk Opuściłem tę firmę wkrótce po opublikowaniu tej odpowiedzi. Powiem, że przy odpowiednim sprzęcie możesz sprawić, że I2C będzie komunikować się na większe odległości. Istnieją jednak inne protokoły komunikacyjne zaprojektowane na duże odległości i prawdopodobnie byłyby lepszym wyborem niż I2C.
CurtisHx

5

Podstawowe ograniczenie liczby urządzeń podrzędnych, którymi może sterować urządzenie nadrzędne, będzie generalnie spowodowane czynnikami elektrycznymi, takimi jak pojemność magistrali, upływność, siła napędu itp. Gdyby można było zbudować urządzenia podrzędne o zerowej pojemności pasożytniczej i zerowym przecieku, a jeśli można je połączyć przy śladach płytki zerowej pojemności pojemność nie byłaby czynnikiem, ale w praktyce żadne założenie się nie spełni.

Z drugiej strony adresowanie urządzeń, które „o sobie wiedzą”, nie jest tak naprawdę problemem. Byłoby trywialne zaprojektowanie urządzenia peryferyjnego, które pozwoliłoby na podłączenie miliardów układów za pomocą jednego adresu odczytu i jednego zapisu. Po prostu określ, że każde urządzenie musi mieć unikalny czterobajtowy identyfikator i musi cały czas nasłuchiwać adresu zapisu, ale musi zrezygnować z każdej transakcji, której pierwsze cztery przesłane bajty danych nie są zgodne z ich identyfikatorem. Ponadto określ, że urządzenia mogą reagować na adres odczytu tylko wtedy, gdy ostatnia transakcja zapisu, którą usłyszała, odpowiada ich adresowi.

Jeśli ktoś chciałby dodać możliwość, aby master określał identyfikatory wszystkich podłączonych slaveów, można zarezerwować specjalne zakresy ID dla takich celów. Na przykład można powiedzieć, że jeśli pierwszy bajt identyfikatora to FF, to następne cztery bajty będą maską, a cztery kolejne ID; urządzenie powinno pozostać podłączone (i potwierdzić ostatni bajt identyfikatora), jeśli część jego identyfikatora określona przez maskę jest zgodna z podaną w poleceniu. Umożliwiłoby to urządzeniu nadrzędnemu zidentyfikowanie co najmniej jednego urządzenia używającego 64 transakcji oraz dodatkowych urządzeń używających 62 lub mniej transakcji. Być może nie jest to najszybszy możliwy sposób identyfikacji urządzenia, ale nie jest zły, biorąc pod uwagę przestrzeń wyszukiwania miliardów identyfikatorów urządzeń.


2

Krótka odpowiedź: to zależy

Jeśli masz (wspólne) urządzenia z 7-bitowymi adresami do 104 urządzeń (128 adresów - zarezerwowane adresy (0x00-0x07 i 0xF0-0xFF są zarezerwowane)) (obowiązują pewne ograniczenia) Jeśli masz (mniej popularne) urządzenia, które obsługują 10 bitów adresowanie do 1024 urządzeń (możesz mieszać urządzenia 7-bitowe i 10-bitowe i w ten sposób dotrzeć do 1136 urządzeń)

Teraz ograniczenia: większość prostych urządzeń można skonfigurować tylko z dwoma do 8 różnymi adresami. Możesz temu zaradzić poprzez niestandardowe zamawianie urządzeń o różnych adresach bazowych (ale zwykle oznacza to, że zamawiasz minimalną liczbę urządzeń) Istnieją również ograniczenia sprzętowe (głównie pojemność magistrali), ale można to rozwiązać za pomocą specjalnych sterowników i2c.

Jeśli chcesz podłączyć wiele urządzeń na większe odległości, i tak proponuję użyć magistrali polowej! I2C jest przeznaczony do komunikacji wewnątrz urządzenia (np. Telewizora). Sam używam I2C z RaspberyPi z zewnętrznymi kablami do 50 cm (nawet z teownikami, których nigdy nie powinieneś mieć w systemie magistrali). Działa zaskakująco dobrze.


0

Liczba urządzeń podłączonych do magistrali jest ograniczona jedynie całkowitą dopuszczalną pojemnością magistrali wynoszącą 400 pF. Ponieważ większość układów scalonych z interfejsem I²C wykorzystuje technologię CMOS o niskiej mocy i wysokiej impedancji, wiele układów scalonych można podłączyć do magistrali I²C przed osiągnięciem maksymalnej pojemności


1
To nie odpowiada na pytanie OP w kompletnym dworze. Spróbuj odpowiedzieć na wszystkie aspekty pytania, nawet jeśli używasz przybliżonych wartości. Podaj i / lub pozostaw link do źródła informacji.
Sparky256,

0

Dzięki dodanym chipom multipleksera (jak TCA9544A) lub buforom (jak PCA9515B) możesz pokonać wszystkie ograniczenia - zarówno pojemność magistrali, jak i adresowanie.

Możesz umieścić 3 urządzenia o identycznych adresach za multiplekserem i wybrać tylko jedno z nich, komunikować się z nim, a następnie wybrać inne. Oczywiście oprogramowanie staje się bardziej złożone.

Jeśli masz długie okablowanie, możesz umieścić bufor na środku i pokonać limit pojemności.


Nie, nadal będziesz ograniczony: 4 kanały / multiplekser, na kanał masz 4 subkanały, następnie masz subkanały, subkanały i inne. Masz 3 linie adresu na przełącznik kanałów: Czy 4 ^ (2 ^ 3) = 65536 kanałów. Na kanał masz 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 urządzeń / kanałów (gdy używasz także buforów) (-7 oznacza adresy zarezerwowane, a -8 adresy multipleksowe). 1265 * 65536 = 82903040 Maksymalna liczba urządzeń.
12431234123412341234123

Edycja: Niestety wystąpił błąd: jest to 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 urządzeń / kanał => 1137 * 65536 = 74514432 urządzeń. Ale może być więcej możliwości, gdy używasz IO-Expander do włączania i wyłączania niektórych buforów (co jest dalekie od praktycznego zastosowania, ale teoretyczna możliwość).
12431234123412341234123
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.