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).