Czy istnieje maksymalna liczba urządzeń podrzędnych i2c, którymi może sterować urządzenie i2c master? Jakie są fizyczne czynniki ograniczające?
Czy istnieje maksymalna liczba urządzeń podrzędnych i2c, którymi może sterować urządzenie i2c master? Jakie są fizyczne czynniki ograniczające?
Odpowiedzi:
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.
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:
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.
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.
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ń.
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.
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
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.