Badałem różne sposoby podłączania czujników do Arduino, a i2c wydaje się być popularną metodą. Czytałem, że jest niezawodny tylko na krótkich odległościach (najwyżej kilka metrów), z szybkością transmisji danych 400 lub 100 kb / s. Trudno mi zrozumieć, dlaczego limity tego protokołu są tak niskie w porównaniu z innymi transmisjami danych za pośrednictwem miedzi, takimi jak gigabit Ethernet. Widziałem powody, takie jak pojemność, spadek napięcia i rezystancja, ale czy Ethernet w sieci Cat5 / 6 nie podlega tym samym problemom? Zasadniczo chcę wiedzieć, dlaczego pulsowanie pewnego napięcia w dół jakiegoś drutu miedzianego nie daje bardziej spójnych wyników (szerokość pasma, odległość) przy porównywaniu tych różnych metod.
wire
transmission-line
użytkownik3629081
źródło
źródło
Odpowiedzi:
Twierdzenie Shannona określa ostateczny limit przepustowości informacji na kablu. Oto więcej informacji na ten temat: https://www.gaussianwaves.com/2008/04/channel-capacity/
tl; wersja dr: równanie Shannona-Hartleya:
I2C oczywiście nie jest w pobliżu granicy Shannona dla kabla. Zamiast tego jest to lekki protokół z celowo wolnym czasem (100/400 kbit / s), wykorzystujący magistralę z otwartym kolektorem, aby ułatwić wdrożenie w sieci małych urządzeń o skromnych wymaganiach we / wy i kontroli. Wolna praca określona przez I2C pozwala uniknąć większości problemów z integralnością sygnału.
Istnieją szybsze warianty I2C, które używają prędkości 1 Mbit i 3,2 Mbit / s. Wymagają one większej uwagi do układu i zakończenia niż normalny I2C i oczywiście mają bardziej rygorystyczne, bardziej wymagające czasy.
Podążając w górę łańcucha pokarmowego pod względem Shannon, Gbit Ethernet wykorzystuje wiele technik w celu osiągnięcia swojej przepustowości:
Techniki te wymagają dużej ilości krzemu, w tym szybkiego, dużego bloku ADC / DAC z mieszanym sygnałem, aby rozmawiać z kablem i dość ciężkiego przetwarzania sygnału do zarządzania nim. Dodaj do tego znacznie bardziej złożony stos oprogramowania, aby go napędzać. To sprawia, że Ethernet jako blok na chipie jest trochę większy dla mikrokontrolera z niższej półki (niektóre z nich decydują się na użycie zewnętrznego PHY). Jego dojrzałość sprawia jednak, że znajduje się w zasięgu większych systemów na chipie.
W każdym razie, jak blisko jesteśmy granicy Shannona? Więcej tutaj: https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf
źródło
Transmisja to coś więcej niż tylko kabel miedziany. Czy widziałeś sprzęt za Ethernetem? Prawdopodobnie nie, ponieważ niezwykle trudno jest znaleźć obwody na poziomie podstawowym do tego, co faktycznie się dzieje, ponieważ wnętrzności są zawsze ukryte w układzie scalonym. Najbliższe, jakie kiedykolwiek znalazłem, to magnetyka wymagana dla sieci Ethernet, które najwyraźniej nie są opcjonalne. To tylko wskazówka tego, co dzieje się fizycznie ze sprzętem Ethernet.
Pomyśl o tym w ten sposób: powietrze jest medium. Dlaczego rodzaj informacji, które mogą być przekazywane, gdy psy rozmawiają ze sobą, jest o wiele mniejszy niż gdy ludzie rozmawiają ze sobą? Dlaczego wysyłanie niektórych fal ciśnienia przez powietrze nie daje bardziej spójnych wyników w komunikacji między tymi dwoma typami zwierząt?
Tylko niektóre czynniki ograniczające I2C (i wiele innych protokołów) to:
Wszystko to jest dobre do uproszczenia. Nie tak dobre dla wysokich prędkości transmisji danych lub transmisji na duże odległości.
Prawdopodobnie w sprzęcie działa też inne voodoo, o którym nie wiem.
źródło
Kilka prostych zasad: Nie ma czegoś takiego jak ziemia. Wszystkie przewody są antenami. Wszystkie przewody są liniami przesyłowymi. Zawsze jest hałas.
Jeśli drut jest krótki w porównaniu do czasu narastania sygnału, możesz zignorować niedopasowania i odbicia impedancji linii transmisyjnej (w przeciwieństwie do Ethernetu, który wymaga skomplikowanych zakończeń i kształtowania impulsu). Jeśli drut jest długi, wówczas indukowane napięcia na przewodzie i różnice w uziemieniu mogą sprawić, że poziomy sygnału cyfrowego na drugim końcu będą nieokreślone lub nieprawidłowe. Ale Ethernet wykorzystuje różnicową sygnalizację skrętkową, co znacznie zmniejsza indukowany szum i problemy z odniesieniem do ziemi. Odbiornik Ethernet wykorzystuje również bardziej czułe wejścia analogowe niż typowe wejścia cyfrowe, co pozwala na większą utratę linii. Dodaj do tego kodowanie Ethernet i korekcję błędów, aby przezwyciężyć statystyki szumów, a możesz bardziej niezawodnie jechać szybciej i dalej.
źródło
I2C jest szyną otwartego odpływu , jest aktywnie obniżany, ale podciąganie (przynajmniej dla normalnych wariantów 100 kHz, 400 kHz) to rezystory pasywne.
Z tego powodu istnieje ograniczenie, jak szybko rzecz może działać w zależności od tego, jak szybko rezystory podciągające mogą ładować pojemność magistrali, czasami można uzyskać większą prędkość, obniżając wartości podciągania, ale to oznacza, że węzły muszą się zatonąć więcej prądu, aby uzyskać niską logikę ... Lub możesz iść w drugą stronę, spowolnij magistralę, aby umożliwić użycie rezystorów podwyższających o wyższej wartości w celu zmniejszenia rozproszenia mocy (patrz na przykład magistrala PM).
Warto strzelić z lunety i zauważyć, że zbocze opadające na I2C jest DUŻO ostrzejsze niż wznoszące.
W przypadku zamierzonego zastosowania, w zasadzie czujników temperatury i małych urządzeń konfiguracyjnych w obrębie jednej płyty (lub co najwyżej pojedynczej obudowy), okazuje się, że trafia w dobre miejsce między złożonością wdrożenia, niską liczbą pinów i prostym sprzętem. Zamiarem projektu nie było „szybkie łącza danych na duże odległości”, a dla mnie, ogólnie rzecz biorąc, SPI jest łatwiejsze w obsłudze, I2C bardzo dobrze pasuje do zamierzonego zastosowania.
Gdy odległości się zwiększą, wtedy coś innego staje się lepiej dopasowane, ale na płytce ze skromnymi interfejsami konfiguracji eeprom / temperatura / urządzenie robi to całkiem dobrze (Warto zauważyć, że interfejs zarządzania PHY wygląda DUŻO jak I2C).
źródło
Różne wyniki są takie, ponieważ obwód sterownika jest inny dla każdej technologii.
I2C 100 kHz zwykle wykorzystuje rezystor podciągający, aby ustawić sygnał na wysokim poziomie, a sterowniki otwartego drenu, aby ustawić sygnał na niskim poziomie.
Rezystory podciągające mają zwykle kilka kilo omów. Im dłuższy kabel, tym większa będzie jego pojemność. Czas przejścia linii od 0 do 1 będzie proporcjonalny do całkowitej pojemności linii i wartości rezystora podciągającego. Gdzieś w przedziale około T = 2 * R * C byłoby w porządku.
Na przykład, jeśli masz 10-metrowy kabel, który miał 20pF na stopę pojemności i użyłeś rezystora podciągającego 10K, to przejście z niskiej na wysoką zajęłoby T = 2 * 20pF / ft * 10 stóp * 10K = 3,6us.
W tym przypadku oczywiście nie możesz mieć żadnych bitów po bicie zerowym o szerokości mniejszej niż 3,6us, więc Twoja szybkość transmisji byłaby ograniczona do 277 kHz.
W prawdziwym systemie I2C specyfikacja I2C dodatkowo nakazuje konfigurowanie i utrzymywanie czasów wokół przejść danych i zegara. Czasy te wynoszą setki nanosekund lub mikrosekund. Czas został specjalnie spowolniony celowo, aby można było tanio wdrożyć urządzenia (grosze) i zużywać bardzo mało energii (miliwaty).
Z drugiej strony Ethernet może działać szybciej pomimo pojemności kabla, ponieważ nie wykorzystuje rezystora podciągającego. Aktywnie wjeżdża albo wysoko, albo nisko do kabla. Sterownik ma niską impedancję i może bardzo szybko naładować dowolną pojemność linii. Oczywiście, że wszystko ma swoją cenę. Ethernet zwykle zużywa setki mW energii i kosztuje co najmniej kilka dolarów za port do wdrożenia.
Czy konfiguracja podobna do I2C działa szybciej, po prostu zmień podciągnięcie 10K na 100 omów, a teraz czas narastania do 10 stóp spadku kabla z 3,6us do 36ns. Prawdopodobnie mógłbyś wtedy pracować z częstotliwością około 10 MHz bez zbyt wielu problemów (poza tym, że zwykłe układy I2C nie potrafią mówić tak szybko).
źródło