Czy istnieje poprawna wartość rezystancji dla rezystorów I2C?


72

Arkusz danych EEPROM 24LC256 stwierdza, że:

Magistrala SDA wymaga rezystora podciągającego do VCC (typowo 10 kΩ dla 100 kHz, 2 kΩ dla 400 kHz i 1 MHz).

Myślałem, że każdy rezystor o wartości kΩ wykona zadanie (i wydaje się, że moja pamięć EEPROM działa dobrze na różnych częstotliwościach z rezystorem 10 kΩ).

Moje pytania to:

  • czy istnieje poprawna wartość dla rezystorów podciągających?
  • czy istnieje prawo / reguła określająca tę wartość?
  • jak różne wartości rezystancji wpływają na magistralę danych I²C?

Odpowiedzi:


66

Prawidłowa rezystancja podciągania dla magistrali I 2 C zależy od całkowitej pojemności magistrali i częstotliwości, na której ma być obsługiwana magistrala.

Formuła z arkusza danych ATmega168 (który moim zdaniem pochodzi z oficjalnej specyfikacji I 2 C) to:

Freq<100kHzRmin=Vcc0.4V3mA,Rmax=1000nsCbus

Freq>100kHzRmin=Vcc0.4V3mA,Rmax=300nsCbus

Microchip 24LC256 określa maksymalną pojemność pinów wynoszącą 10 pF (co jest dość typowe). Policz liczbę urządzeń podłączonych równolegle do magistrali i użyj powyższego wzoru, aby obliczyć zakres wartości, które będą działać.

Jeśli wyłączysz baterie, użyłbym wartości, które znajdują się w górnej części zakresu. Jeśli nie ma limitów mocy dla źródła zasilania lub problemów z rozpraszaniem mocy w układach scalonych, użyłbym wartości w dolnej części zakresu.

Sprzedaję niektóre zestawy z I 2 C RTC (DS1337). Do zestawu dołączam oporniki 4K7, co dla większości użytkowników wydaje się rozsądnym kompromisem.


Zazwyczaj wyobrażam sobie, że autobus jest bezczynny (odznaczony) przez większość czasu, więc w przypadku zastosowania baterii są ważniejsze problemy do rozwiązania niż próba zoptymalizowania podciągnięć I2C po prostu: P
Nick T

5
Jedyne, co chciałbym dodać, to bufor powyżej zsumowanej pojemności urządzeń w magistrali. Sam ślad, a także złącza lutowane od padów do szpilek również będą miały pewną impedancję. W dłuższych magistralach pojemność ścieżki / drutu może być większa niż pojemność styków urządzeń. Projektując płyty produkcyjne, zwykle nie określam ostatecznej wartości podciągania, dopóki nie mam w ręku prototypu i mogę objąć magistralę różnymi wartościami.
Mark

14

Sensowne jest, że wyższe częstotliwości wymagają podciągania niższego oporu: niższy opór spowoduje szybsze ładowanie / rozładowywanie pojemności kabla, co prowadzi do bardziej stromych krawędzi. Przy szerszych impulsach o niższych częstotliwościach mniej stroma krawędź nie wpłynie tak bardzo na kształt impulsu.

Dlatego specyfikacja I2C podaje maksymalne wartości rezystorów podciągających w funkcji pojemności magistrali dla trzech klas prędkości:

wprowadź opis zdjęcia tutaj

Minimalne wartości są określone w funkcji napięcia magistrali i powinny ograniczać prąd przez sterowniki.


3
3 lata później Texas Instruments napisał notatkę aplikacyjną, która ma bardzo zbliżone znaczenie do tej odpowiedzi.
Nick Alexeev

Artykuł EDN: Obliczenia projektowe dla niezawodnej komunikacji I2C . [Po prostu gromadzę materiały referencyjne.]
Nick Alexeev

11

Istnieje prawidłowy zakres wartości, jednak trudno dokładnie opisać, jaki jest ten zakres. Ogólnie działa 10k.

Wyjścia cyfrowe mają określoną zdolność do pozyskiwania lub pochłaniania prądu. Jeśli twój sygnał wyjściowy może spaść do 5 mA, a sygnał wyjściowy jest podłączony do podciągnięcia do 5 V, a następnie ustawiony na 0, potrzebujesz rezystancji co najmniej 1k. Jeśli użyjesz mniej niż 1k, wyjście nie będzie w stanie pochłonąć wystarczającej ilości prądu, aby wyciągnąć pin całkowicie do 0 V. Jeśli użyjesz większej wartości, na przykład 10k, wtedy pin musi tylko zatopić 0,5 mA, co jest znacznie mniejsze niż jego ocena.

Wejścia cyfrowe mają określony prąd upływu. Jest to trochę jak ilość prądu potrzebna do „utrzymania” wartości 0 lub 1 na wejściu. Jeśli Twój rezystor podciągający jest zbyt duży, nie będzie w stanie pokonać prądu upływowego. Jeśli tylko ledwo przezwycięży prąd upływowy, wówczas każdy szum w obwodzie może wystarczyć do zmiany wejścia.

Podczas korzystania z wyjść cyfrowych, które mogą tonąć i pobierać prąd („sterownik totem-biegun”, „push-pull driver”), możesz ulec pokusie, aby nie używać rezystorów podwyższających lub obniżających. Jednak bardzo ważne jest, aby wejścia CMOS nie mogły się unosić lub mogły pobierać nadmierny prąd ... i bardzo łatwo jest zapomnieć, że dwukierunkowe piny MCU zwykle pojawiają się jako wejścia!


I2C i inne podobne protokoły używają wyjść „otwarty odpływ” (lub „otwarty kolektor”). Zamiast mieć wyjścia, które można podciągać i opuszczać, a wyjścia z otwartym odpływem mogą tylko opuszczać. Dlatego wymagany jest zewnętrzny rezystor podciągający. Istnieją teraz dodatkowe ograniczenia dotyczące zakresu rezystorów podciągających; wartość pull-up utworzy obwód RC z pojemnością magistrali. Zbyt mała wartość po raz kolejny zapobiegnie opadaniu przez sterowniki wyjściowe wystarczającej ilości prądu, aby wyciągnąć pin całkowicie do 0. Jednak zbyt duża wartość zajmie zbyt długo, aby naładować pojemność magistrali.

Jeśli istnieją czasy ustawienia / wstrzymania, których nie wolno naruszać, pomogą one ustalić stałą czasową RC. Pojemność magistrali jest w dużej mierze determinowana przez układ płytki drukowanej, więc możesz następnie wybrać wartość R, która łączy się z C, aby zapewnić wartość, która jest wygodnie w czasie ustawiania / utrzymywania dla wejścia cyfrowego.


7

Niskie wartości podciągania (niższy opór) mogą poprawić krawędzie przejść sygnału, ale czasami mogą być zbyt sztywne - jeśli urządzenia w magistrali nie mogą pochłonąć prądu podciągania, logika jest „niska”, co nie jest tak niskie , co może powodować błędy komunikacji (i dużo bólu).

Wybrałbym najwyższy opór podciągania, który zapewnia niezawodną komunikację.


5

W przypadku niskich częstotliwości wartość tak naprawdę nie ma znaczenia, ale w przypadku wysokich częstotliwości może mieć efekt filtrujący sygnał w połączeniu z innymi pojemnościami w obwodzie, dlatego zalecają różne wartości dla różnych prędkości.


2

Problem, o którym jeszcze nie wspominałem, to zużycie energii. Jeśli ktoś używa zasilania o napięciu 3,3 V, rezystor o masie 3,3 K do ziemi będzie marnował 1 mA prądu (3,3 mW mocy), ilekroć moc wyjściowa jest niska. Zastosowanie rezystora 10K zmniejszyłoby zarówno prąd, jak i moc trzy razy. Jeśli na magistrali I2C będzie dużo komunikacji, to zużycie energii może być znaczącą częścią całkowitego zużycia energii, szczególnie jeśli magistrala może pozostawać nisko przez dłuższy czas. Na przykład, jeśli ktoś odczytuje 100 bajtów / sekundę, ale po odczytaniu każdego bajtu, magistrala pozostaje z urządzeniem wysyłającym pierwszy bit następnego bajtu, a większość z tych bajtów ma wyczyszczony MSB, magistrala może wydać 90% czas z niskim SCL i SDA. W zależności od tego, co jeszcze robi system, może to znacznie zwiększyć pobór mocy.

Aby oszczędzać energię, pomocne może być podłączenie rezystora „pull-up” do styku we / wy zamiast do VDD. Chociaż nie widziałem sprzętowych implementacji I2C, które obsługują to, posiadanie danych wyjściowych master na oddzielnym pinie I / O, który jest podłączony do magistrali za pomocą rezystora, zamiast używania sterownika z otwartym kolektorem i stałego rezystora podciągającego pozwoli uniknąć marnowanie prądu, gdy master chce wyprowadzić „0”. Ponadto, jeśli master ma zamiar pozostawić SCK na niskim poziomie przez jakiś czas, nie troszcząc się o to, co jest na SDA, master może wyłączyć podciąganie, dopóki nie będzie gotowy do dalszej komunikacji. Jeśli żadne z urządzeń nie musi używać rozciągania zegara, urządzenie nadrzędne może po prostu użyć bezpośredniego wyjścia dla SCK i nie zawracać sobie głowy podciąganiem tego drutu.

Jeśli używasz oprogramowania do bitowania z szybkim procesorem i chcesz uzyskać dobrą wydajność pomimo dużej pojemności magistrali, powyższe podejście można połączyć z wykorzystaniem wbudowanych słabych podciągnięć procesora. Podczas odczytywania danych włącz bardzo silne podciągnięcie, krótko po każdym opadającym zboczu SCK, a następnie przełącz na słabe podciąganie. Silne podciągnięcie pociągnie wysoko linię pomimo pojemności, a gdy linia zostanie podniesiona wysoko, słabe podciągnięcie będzie w stanie utrzymać ją na wysokim poziomie. Nawet jeśli urządzenie miałoby problemy z pociągnięciem linki w dół w stosunku do silnego podciągania, byłoby w stanie to zrobić po wyłączeniu silnego podciągania.


1

Minimalna wartość rezystora zależy od możliwości prowadzenia dwóch stron autobusu. Na przykład pobudzają 10 mA, więc wartość rezystora powinna być większa niż . To nie jest dokładna wartość rezystora, zależy to od pojemności twojej magistrali. Możesz sprawdzić wartość rezystora, czy jest poprawna, czy nie, mierząc czas narastania i czas opadania impulsów magistrali. Możesz znaleźć te wartości czasu w poniższym linku:Vbus10 mA

http://www.cypress.com/knowledge-base-article/rise-and-fall-time-specifications-scl-and-sda-lines-i2c


-1

Oto przebiegi dla 400 kiloBitów na sekundę (przebieg 200 KHz 101010). RC ma wartość 4,7 K i 212 pF. Wartość RC pozwala na rozliczenie 2 TAU.

wprowadź opis zdjęcia tutaj


Ta odpowiedź jest po prostu zła. Zegar 200 kHz daje 200 kb / s, a nie 400. Rezystancja podciągania wpływa tylko na wznoszące się krawędzie. Fabuły wyglądają na mylące, prawie tak, jakby miała miejsce pewna modulacja. Wielkości fizyczne i ich jednostki są zapisane spacją (lub cienką spacją) pomiędzy nimi. Tau jest symbolem, a nie skrótem.
venny

@venny Jest to typowy przebieg dla autobusu jadącego zbyt szybko przez czas osiadania. Przy ustaleniu tylko 2 TAU, nie ma płaskiego wierzchołka dla przebiegów, stąd „pewien rodzaj modulacji”; gdyby był to pseudolosowy wzór, zmienność osadnictwa byłaby bardzo oczywista; czytaj w „oku danych”. Wreszcie zegar 200 kHz ma wysoki dla 2,5uS, a następnie niski dla 2,5uS; okres 2,5uS to dokładnie dane 400 kHz, o których wspomniałem.
analogsystemsrf
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.