Maksymalna długość magistrali I2C?

38

Jakiej maksymalnej długości kabla można użyć do podłączenia dwóch urządzeń I2C (I2C master-> I2C slave)?

Tak, wiem, że I2C jest naprawdę zaprojektowany do komunikacji wewnątrz płyty. Zadanie polegało na „celu projektowym” polegającym na użyciu wspólnej magistrali I2C dla wielu urządzeń podrzędnych I2C do obsługi wersji demonstracyjnej.

Dla celów przejrzystości załóżmy, że standardowa częstotliwość magistrali I2C wynosi 100 kHz.

Nate
źródło
1
Maksymalna długość przychodzi do gry z pojemnością wprowadzoną przez długość. Zbyt duża pojemność i może to wpłynąć na prędkość. Tak jak zawsze to zależy.
Gustavo Litovsky
@GustavoLitovsky Masz rację co do pojemności. Zależy to również od rodzaju użytych kabli (ekranowane vs nieekranowane). Najbardziej interesują mnie ogólne wytyczne.
Nate
2
@Nate Guideline: maksymalna pojemność magistrali netto 400pF. (Nieco związane z pytaniem: Wspomnienia o przerośniętym autobusie I2C .)
Nick Alexeev
1
I2C = magistrala obwodu zintegrowanego. Nie jest przeznaczony do dużych odległości między urządzeniami, a na pewno nie przy częstotliwości 400 kHz.
Spehro Pefhany
1
Chciałem tylko dodać trochę osobistych doświadczeń poza obliczeniami. Zrobiłem demo, przechodząc z płyty deweloperskiej do konwertera I2C na USB z nieekranowanym przewodem około 3 stóp. Nie wyglądał ładnie, ale działał 90% czasu.
mcmiln

Odpowiedzi:

16

W trybie szybkim i podciąganiu rezystora pojemność powinna być mniejsza niż 200pF, zgodnie ze specyfikacją szyny I2C i instrukcją obsługi dla dokumentu NXP .

Przy obecnych podciągnięciach źródła możesz przejść do 400pF, ale nie z rezystorami.

Jeśli twój drut ma 20pF / 30cm i masz kolejne 50pF z błąki i pojemności wejściowej, jesteś ograniczony do 2,25 m długości kabla. Różne założenia doprowadzą do różnych liczb.

Spehro Pefhany
źródło
1
@KrunalDesai Zostało to wyraźnie wspomniane w dokumencie NXP, do którego link znajduje się powyżej. Specyfikacja magistrali I2C i instrukcja obsługi
Spehro Pefhany 12.04.16
1
Na przykład w świecie rzeczywistym „Wiimote” Nintendo Wii wykorzystuje I2C 400 kHz ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) do komunikacji z urządzeniami peryferyjnymi, takimi jak Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ), który jako widać, ma kabel o długości około 1m. Pasywne przedłużacze są sprzedawane, aby dać dodatkowy 1m ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), więc pchają, ale pozostają w tym limicie 2,25 m.
Rob Starling
16

Niesamowite długości brzmienia, takie jak 10,25 i 100 m są całkowicie możliwe, i często używam tej metody (z UART nie I2C, ale metoda stoi), gdy muszę szybko poskładać rzeczy. Jednak nie jest to najlepszy sposób.

Kluczem jest poznanie progu napięcia wejściowego. Upewnij się, że spadek napięcia w przewodzie uziemienia jest znacznie poniżej tego, w przeciwnym razie nadajnik o wysokim potencjale uziemienia nie będzie w stanie wystarczająco obniżyć napięcia. Brak tolerancji dla przesunięć uziemienia IMHO jest największym powodem korzystania z RS485 lub nadajników-odbiorników (I2C przez CAN jest wspomniany w kilku uwagach dotyczących zastosowania).

W idealnym przypadku wszystkie urządzenia będą miały własną brodawkę na ścianie i baterię, a między przewodami uziemienia nie będzie przesyłana żadna moc.

Ale weźmy na przykład CAT5. CAT5 nie może być wyższy niż 52pf / m lub nie jest to CAT5.

100 m kabla 52pf ma pojemność 5200pf lub 5,2nf.

5,2n razy 20 kiloomów (pullup) daje stałą czasową około 104 mikrosekund. To ogranicza prędkość do około 10 kHz.

Używając podciągnięć 2,2kohm, prawdopodobnie możesz dostać się do 100 kHz.

Słyszałem, że urządzenia powinny mieć rezystor na SDL i SCK, ze względu na duże obciążenie pojemnościowe, które napędzają, około 180 lub 200 omów.

Ale szczerze mówiąc, I2C wcale nie nadaje się na długie dystanse. Transceiver CAN lub RS485 używane z normalnym UART to solidne rozwiązanie z bardzo dobrą ochroną przed awarią, odpornością na wyładowania elektrostatyczne, prędkością, odległością itp., Za cenę dolara za chip lub mniej więcej, przesunięcia uziemienia nie mają prawie tak dużego znaczenia, że ​​jesteś swobodnie przenosić energię wraz z danymi.

Jedynym minusem jest to, że nadajnik-odbiornik może osiągnąć transmisję 70 mA, a 1 lub 2ma tylko nasłuchuje, więc I2C lub bezpośredni TTART UART mogą być przydatne w sytuacjach ekstremalnie niskiego poboru mocy, ale zastanów się, ile czasu faktycznie spędzasz na wysyłaniu.

EternityForest
źródło
7

Pracuję dla firmy produkującej czujniki USB. Większość z nich oparta jest na chipach czujników I2C, urządzenia te można podzielić na dwie części, dzięki czemu można zainstalować część procesora w jednym miejscu, a część czujnika w innym. Przeprowadziliśmy sporo testów połączenia I2C między procesorem urządzenia a czujnikami I2C. Przy 100 kHz, przy dobrym protokole odzyskiwania po błędzie, można łatwo dotrzeć do 25 m za pomocą podstawowych przewodów. Nawet raz udało nam się osiągnąć 100 m za pomocą kabla CAT5.

martinm
źródło
Wygląda na to, że mówisz o długości kabla USB . OP pyta o okablowanie surowego I2C. To jest zupełnie inny temat. Jeśli się mylę, edytuj swoją odpowiedź, a ja usunę mój komentarz.
DoxyLover
1
25 m to całkiem sporo nawet jak na usb ...
Vladimir Cravero
3
Nie, naprawdę mówię o połączeniu I2C między procesorem urządzenia i chipami czujnika I2C, a nie o połączeniu USB między hostem a procesorem. Oto przykład: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm
1
Jeśli chcesz użyć skrętki dla I2C i mocy, którą parę skręciłbyś ze sobą? (SDA, SCL), (VCC, GND) czy (SDA, GND), (SCL, VCC)?
Cano64
3
Idealnie nie używasz w ogóle skrętki. Skrętka jest przydatna dla zbalansowanych sygnałów. Jeśli nie masz innego kabla, skręć sygnał z uziemieniem. Jeśli naprawdę masz tylko cztery przewody, zastanów się, ile energii zużywa zdalny koniec - możesz skończyć z przesunięciem uziemienia wyższym niż tolerowany - zanim zaczniesz używać tylko jednego przewodu dla GND. Zwykle używam starego kabla Cat5 (nie wyżej! Podwójny ekran zwiększa pojemność, której nie potrzebujesz) z jedną parą uziemienia, jedną parą + 5 V oraz SDA + GND i SCL + GND.
Matthias Urlichs
4

IIC jest protokołem synchronicznym i jako taki może być uruchamiany dowolnie powoli, aby spełnić wymagania systemowe dotyczące odległości i hałasu.

Istnieje wiele przykładów użycia IIC za pomocą kabla, od ACCESS.bus w latach 90. XX wieku po to, jak jest on dzisiaj używany do pobierania informacji EDID z wyświetlaczy wideo.

Dave Tweed
źródło
Innym przykładem jest Wii Nunchuck, który jest podłączony do Wii Remote przez I²C za pomocą 4-metrowego kabla ekranowanego.
tcrosley,
4

Coś takiego jak P82B96 NXP może być użyte do zmiany poziomów napięcia na szynie, pozwalając na znacznie dłuższe odległości.

Zestawienie danych zawiera przykłady dla długości kabla I2C 3m, 25m, 100m i 250m.

Istnieją inne układy, które mają podobną funkcjonalność.

Jeffrey Nichols
źródło
Problem z układem NXP polega na tym, że w końcu wymagasz dwa razy więcej przewodów. Jakieś inne pomysły? dwukierunkowe układy scalone, które znalazłem, nie przekraczają + 5 V.
Matthias Urlichs