
Magistrala I²C: połączenia, adresowanie i rezystory podciągające
Zbuduj niezawodną magistralę I²C: poznaj role SDA i SCL, adresy 7-bitowe, szybkości, pojemność magistrali, czas narastania i dobór rezystorów podciągających.
Opracowanie i przegląd techniczny:ElectroDesignForge Engineering Team
Zobacz proces redakcyjnyNajważniejsze: I²C łączy wiele układów scalonych dwiema wspólnymi liniami:
SDAprzesyła dane, aSCLsygnał zegarowy. Wyjścia zwykle mają otwarty dren: układ ściąga linię do stanu NISKIEGO, a rezystor podciągający przywraca stan WYSOKI. Dobór rezystorów musi spełnić zarówno ograniczenie prądu, jaki wyjście może odprowadzić przy stanie NISKIM, jak i ograniczenie czasu narastania wynikające z szybkości transmisji oraz całkowitej pojemności magistrali.
Szybkie zestawienie
| Tryb | Maksymalna częstotliwość SCL | Maksymalny czas narastania t_r (30–70%) | Pojemność odniesienia na linię |
|---|---|---|---|
| Tryb standardowy (Sm) | 100 kHz | 1000 ns | 400 pF |
| Tryb szybki (Fm) | 400 kHz | 300 ns | 400 pF |
| Tryb szybki Plus (Fm+) | 1 MHz | 120 ns | 550 pF |
Limity te pochodzą ze specyfikacji I²C. Najwolniejszy element może wymagać niższej szybkości. Nie wybieraj Fm+ tylko dlatego, że obsługuje go kontroler: każdy układ docelowy, konwerter poziomów i izolator także musi obsługiwać ten tryb.
SDA i SCL: wspólne linie
SDA przenosi adres, bit odczytu/zapisu, bajty danych i potwierdzenia. SCL wyznacza takt transmisji. W stanie spoczynku obie linie są w stanie WYSOKIM. Warunek START powstaje, gdy SDA opada przy SCL w stanie WYSOKIM; warunek STOP — gdy SDA narasta przy SCL w stanie WYSOKIM.
Podczas przesyłania danych SDA pozostaje stabilna, gdy SCL jest w stanie WYSOKIM. Kontroler wysyła osiem bitów, a w dziewiątym takcie zwalnia SDA; odbiornik ściąga SDA do stanu NISKIEGO w odpowiedzi ACK albo pozostawia ją w stanie WYSOKIM dla NACK.
+3.3 V +3.3 V
| |
[Rp] [Rp]
| |
SDA ──────────────+──── controller ── target A ── target B
SCL ──────────────+──── controller ── target A ── target B
GND ───────────────────── common to every device
Zapewnij jedną wypadkową rezystancję podciągającą dla SDA i jedną dla SCL. Kilka modułów może mieć własne rezystory, które wtedy łączą się równolegle. Dwa rezystory 4.7 kΩ dają 2.35 kΩ, a cztery — 1.18 kΩ. Przed dodaniem kolejnej pary sprawdź schematy modułów.
Dlaczego otwarty dren?
Układ nigdy aktywnie nie wymusza na magistrali stanu WYSOKIEGO: zwalnia linię albo ściąga ją do stanu NISKIEGO. Jeśli dwa układy działają jednocześnie, stan NISKI dominuje bez zwarcia między przeciwnie sterowanymi wyjściami. To zachowanie typu AND połączonego przewodowo umożliwia potwierdzanie, arbitraż wielu kontrolerów i rozciąganie taktu zegara.
W systemie z jednym kontrolerem i bez układów rozciągających takt SCL może czasem pracować jako wyjście przeciwsobne; taki wyjątek trzeba wyraźnie udokumentować. W magistrali I²C o szerokiej zgodności pozostaw SCL jako wyjście z otwartym drenem i rezystorem podciągającym.
Połączenia, masa i poziomy napięcia
Połącz wszystkie urządzenia równolegle: SDA z SDA, SCL z SCL i wspólną masę. Unikaj układu gwiazdy z długimi odgałęzieniami; nieużywane odcinki zwiększają pojemność, odbicia i podatność na zakłócenia. Na PCB prowadź sygnały krótko, nad ciągłą płaszczyzną masy i z dala od szybko przełączających się węzłów.
Napięcie, do którego podciągasz linie, wyznacza stan WYSOKI. Musi być zgodne z wejściami i wyjściami każdego układu, również mikrokontrolera bez zasilania. Nie podłączaj bezpośrednio elementu 1.8 V do podciągania 3.3 V, chyba że dopuszcza to jego dokumentacja. Użyj konwertera poziomów odpowiedniego do I²C, z rezystorami podciągającymi po obu stronach, jeśli wymaga ich układ konwertera.
Wewnętrzne rezystory podciągające mikrokontrolera często mają 20 to 100 kΩ: mogą wystarczyć przy bardzo małej szybkości i krótkiej ścieżce, ale zwykle są za słabe dla obciążonych magistral 100/400 kHz. Sprawdź rzeczywistą wartość.
Adresowanie: 7 bitów, nie 8 bitów
Większość układów używa 7-bitowego adresu urządzenia docelowego. Pierwszy bajt na magistrali ma postać:
[ A6 A5 A4 A3 A2 A1 A0 | R/W ]
Bit R/W dodaje się podczas transmisji; nie jest częścią 7-bitowego adresu podawanego bibliotece. Urządzenie o adresie 0x68 występuje na magistrali jako 0xD0 przy zapisie i 0xD1 przy odczycie. API oczekujące 0xD0 może stosować konwencję 8-bitową — sprawdź to przed ponownym przesunięciem adresu.
Piny ADDR, SA0 lub SDO w wielu czujnikach służą do wyboru adresu. Podłącz je do określonego poziomu i zapisz adresy na schemacie. Jeśli urządzenia ze stałym adresem kolidują, użyj multipleksera I²C, innego kontrolera albo odmiennej wersji elementu. Istnieje adresowanie dziesięciobitowe, ale jest rzadkie; adres wewnętrznego rejestru czujnika to nie adres I²C.
Szybkość, SCL i rozciąganie taktu
Częstotliwość SCL określa maksymalne tempo taktowania, a nie gwarantowaną szybkość danych użytkowych: adresy, rejestry, bity ACK/NACK, warunki START/STOP i wewnętrzne opóźnienia zmniejszają przepustowość. Transmisja wielu rejestrów przy 400 kHz trwa więc dłużej niż wynikałoby z podzielenia liczby bajtów przez 400 kbit/s.
Układ docelowy może utrzymywać SCL w stanie NISKIM po zwolnieniu jej przez kontroler — to rozciąganie taktu zegara. Kontroler musi odczytywać SCL i czekać na stan WYSOKI z uwzględnieniem limitu czasu urządzenia. Sprawdź zgodność, bo część sterowników obsługuje to źle. W układzie z wieloma kontrolerami ten, który zwolnił SDA, lecz odczytał stan NISKI, przegrywa arbitraż i przerywa nadawanie.
Pojemność magistrali i czas narastania
Każda linia stanowi obciążenie RC: sumują się pojemności wejść układów, ścieżek, kabli, sond, złączy i pojemności pasożytnicze. Gdy żaden układ nie ściąga linii do stanu NISKIEGO, rezystor podciągający stopniowo ładuje tę pojemność.
Przy pomiarze od 30% do 70% VDD:
t_r ≈ 0.8473 × R_p × C_bus
R_p,max ≈ t_r,max / (0.8473 × C_bus)
Stosuj omy, farady i sekundy. Wynik daje maksymalną rezystancję podciągającą; przy większej zbocze narasta zbyt wolno. Dla 400 kHz i C_bus = 100 pF:
R_p,max ≈ 300 ns / (0.8473 × 100 pF) ≈ 3.54 kΩ
Rezystor 4.7 kΩ pobiera niewielki prąd, lecz jest zbyt duży, aby spełnić limit 300 ns przy 100 pF. Lepszym punktem wyjścia jest 3.3 kΩ, o ile spełnia ograniczenie prądu w stanie NISKIM i potwierdzą to pomiary. Najlepiej zmierzyć pojemność gotowego układu; w przeciwnym razie zsumuj pojemności wejść, dane kabla (pF/m), złącza i zapas dla PCB. Sonda także zwiększa pojemność.
Dobór podciągania: przedział, a nie jedna uniwersalna wartość
Mniejsza rezystancja przyspiesza zbocze, ale zwiększa prąd, gdy układ wymusza stan NISKI. Dolna granica wynosi:
R_p,min ≈ (VDD − V_OL,max) / I_OL,max
Dla VDD = 3.3 V, V_OL,max = 0.4 V i I_OL,max = 3 mA:
R_p,min ≈ (3.3 − 0.4) / 3 mA ≈ 967 Ω
R_p,min ≤ R_p ≤ R_p,max
Wybrana rezystancja jest poprawna tylko wewnątrz tego przedziału. Jeśli taki przedział nie istnieje, zmniejsz pojemność, obniż szybkość, zastosuj odpowiedni bufor I²C albo układ obsługujący Fm+ o większym dopuszczalnym prądzie ściągania. Nie wybieraj wartości poniżej R_p,min tylko dlatego, że układ pozornie działa: poziom V_OL może stać się niejednoznaczny, a straty mocy wzrosną.
| Sytuacja | Punkt wyjścia | Co sprawdzić |
|---|---|---|
| Krótka ścieżka PCB, 3.3 V, 100 kHz | 4.7 to 10 kΩ | pojemność i istniejące rezystory podciągające |
| Krótka ścieżka PCB, 3.3 V, 400 kHz | 2.2 to 4.7 kΩ | t_r i I_OL każdego urządzenia docelowego |
| Kabel lub wiele modułów | wartość obliczona, często niższa | prąd ściągania, EMC i przebieg na końcu kabla |
Podane przedziały nie zastępują obliczeń dla konkretnego układu.
Pomiary i rozwiązywanie problemów
Obserwuj SDA i SCL przy urządzeniu najdalej od kontrolera. Zmierz t_r między 30% a 70% VDD i sprawdź V_OL, oscylacje oraz stabilność SDA, gdy SCL jest w stanie WYSOKIM.
| Objaw | Prawdopodobne przyczyny | Działania |
|---|---|---|
| Nie wykryto urządzeń docelowych | brak wspólnej masy, zły adres, zamienione SDA/SCL | sprawdź ciągłość, zasilanie i skan 7-bitowych adresów |
| Linie stale w stanie WYSOKIM | brak podciągania lub niewłaściwa szyna | sprawdź oba rezystory i ich zasilanie |
| Linia stale w stanie NISKIM | urządzenie docelowe w resecie, błąd połączeń, przerwana transakcja | odłączaj kolejno moduły i zresetuj odcinek magistrali |
| Losowe odpowiedzi NACK | wolne narastanie, zakłócenia, nadmierna pojemność lub szybkość | zmierz t_r, zmniejsz R_p, zwolnij magistralę |
| Błąd tylko przy wszystkich modułach | równoległe podciąganie jest zbyt silne lub sumaryczna pojemność jest za duża | oblicz rezystancję zastępczą i pojemność |
Typowa procedura odzyskiwania magistrali polega na zwolnieniu SDA, wygenerowaniu maksymalnie dziewięciu impulsów SCL, a następnie warunku STOP. Stosuj ją tylko wtedy, gdy dopuszczają to dokumentacje wszystkich układów; reset odcinka magistrali może być pewniejszy.
Lista kontrolna przed projektowaniem PCB
- Czy wszystkie układy mają wspólną masę i zgodne napięcie magistrali?
- Czy SDA i SCL mają po jednej wypadkowej rezystancji podciągającej, bez przypadkowego łączenia dodatkowych rezystorów równolegle?
- Czy adresy są unikatowe i zapisane w postaci 7-bitowej?
- Czy każde urządzenie docelowe, konwerter poziomów i izolator obsługują wybraną szybkość?
- Czy wybrana rezystancja mieści się między
R_p,minaR_p,max? - Czy czas narastania sprawdzono na płytce z rzeczywistą pojemnością?
Powiązany kalkulator
- Otwórz kalkulator rezystorów podciągających i ściągających, aby wyznaczyć przedział rezystancji na podstawie
VDD, prądu GPIO, progów logicznych, pojemności linii i limitu czasu narastania I²C.
Źródła
- NXP Semiconductors, UM10204 — specyfikacja i podręcznik magistrali I²C: protokół, poziomy elektryczne i parametry czasowe Sm/Fm/Fm+.
- Dokumentacje kontrolera, układów docelowych, konwerterów poziomów, buforów i izolatorów zastosowanych w projekcie: mają pierwszeństwo dla
I_OL,V_OL, pojemności wejściowej i obsługi rozciągania taktu.