ElectroDesignForgeElectroDesignForge
Sygnały i interfejsyElementyProjektowanie PCB

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 redakcyjny

Najważniejsze: I²C łączy wiele układów scalonych dwiema wspólnymi liniami: SDA przesyła dane, a SCL sygnał 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

TrybMaksymalna częstotliwość SCLMaksymalny czas narastania t_r (30–70%)Pojemność odniesienia na linię
Tryb standardowy (Sm)100 kHz1000 ns400 pF
Tryb szybki (Fm)400 kHz300 ns400 pF
Tryb szybki Plus (Fm+)1 MHz120 ns550 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ą.

SytuacjaPunkt wyjściaCo sprawdzić
Krótka ścieżka PCB, 3.3 V, 100 kHz4.7 to 10 kΩpojemność i istniejące rezystory podciągające
Krótka ścieżka PCB, 3.3 V, 400 kHz2.2 to 4.7 kΩt_r i I_OL każdego urządzenia docelowego
Kabel lub wiele modułówwartość obliczona, często niższaprą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.

ObjawPrawdopodobne przyczynyDziałania
Nie wykryto urządzeń docelowychbrak wspólnej masy, zły adres, zamienione SDA/SCLsprawdź ciągłość, zasilanie i skan 7-bitowych adresów
Linie stale w stanie WYSOKIMbrak podciągania lub niewłaściwa szynasprawdź oba rezystory i ich zasilanie
Linia stale w stanie NISKIMurządzenie docelowe w resecie, błąd połączeń, przerwana transakcjaodłączaj kolejno moduły i zresetuj odcinek magistrali
Losowe odpowiedzi NACKwolne narastanie, zakłócenia, nadmierna pojemność lub szybkośćzmierz t_r, zmniejsz R_p, zwolnij magistralę
Błąd tylko przy wszystkich modułachrównoległe podciąganie jest zbyt silne lub sumaryczna pojemność jest za dużaoblicz 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

  1. Czy wszystkie układy mają wspólną masę i zgodne napięcie magistrali?
  2. Czy SDA i SCL mają po jednej wypadkowej rezystancji podciągającej, bez przypadkowego łączenia dodatkowych rezystorów równolegle?
  3. Czy adresy są unikatowe i zapisane w postaci 7-bitowej?
  4. Czy każde urządzenie docelowe, konwerter poziomów i izolator obsługują wybraną szybkość?
  5. Czy wybrana rezystancja mieści się między R_p,min a R_p,max?
  6. Czy czas narastania sprawdzono na płytce z rzeczywistą pojemnością?

Powiązany kalkulator

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