logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sprytny sposób na uniknięcie problemów z I2C

ghost666 16 Maj 2017 17:48 4587 9
  • Jeśli pisałeś kiedyś jakikolwiek program to z pewnością znasz uczucie ulgi, gdy po skończonym kodowaniu program działa bez błędów za pierwszym razem. Na studiach, na pracowni komputerowej, nie było to takie trudne; niestety w realnym życiu takie sytuacja zdarzają się już rzadziej, ale z drugiej strony daje nam to możliwość analizowania i poprawiania naszych błędów, co jest doskonałą okazją do nauki.

    Weźmy za przykład projektowanie interfejsu Inter-Integrated Circuit, czyli popularnego I²C. Wielu projektantów docenia ten interfejs z uwagi na jego prostotę, ale to nie znaczy, że można zapominać o tym, że nadal stoi za nim ponad 60 stronicowa specyfikacja. Więc jeśli w prototypie jaki właśnie uruchamiamy I²C nie chce działać tak jak powinno, nie załamujmy się, tylko przystąpmy do debugowania i nauki. W poniższym, artykule zidentyfikujemy dwie podstawowe bolączki, tego interfejsu, które najczęściej powodują, że nie funkcjonuje on poprawnie. Oczywiście, oprócz identyfikacji problemów zajmiemy się także analizie jak mu zaradzić.

    Problem pierwszy - niedopasowane poziomy napięć.

    Urządzenie slave wysyła do mastera sieci sygnał, gdy ma dane, które chce przesłać. Robi to ściągając linię danych do stanu niskiego. Jest to problemem, szczególnie wtedy gdy stan niski (VOL) jednego urządzenia, nie jest "dostatecznie niski", aby zarejestrowały go inne układy w sieci. Próg stanu niskiego interfejsu I²C definiowany jest przez specyfikację jako wartość równą 30% napięciu zasilania. Z kolei wszystko powyżej 70% napięcia zasilającego układ traktowane jest jako stan wysoki. Graficzna reprezentacja tych poziomów napięć pokazana jest na rysunku 1.

    Sprytny sposób na uniknięcie problemów z I2C
    Rys.1. Poziomy napięć zdefiniowane dla interfejsu I²C.


    W idealnym przypadku chcielibyśmy, aby nasze napięcie VOL było możliwie bliskie 0 V. Niestety nie zawsze jest to możliwe - pasożytnicze potencjały, czy rezystancje w torze interfejsu powodują, że VOL wzrasta powyżej zera. Dotychczasowo produkowane bufory interfejsu I²C posiadają zdefiniowany na sztywno offset napięciowy stanu VOL równy około 0,5 V. Teraz jednakże Texas Instruments opracowało nową architekturę tego typu statycznego offsetu, co sprawia że efektywny offset dla tego bufora kształtuje się na poziomie około 0,2 V dla np. układu TCA9802.

    Problem drugi - nieodpowiednie czasy narastania

    Zaletą I²C jest to, że na jednej linii elektrycznej układ może komunikować się z wieloma urządzeniami - tak długo, jak pojemność sieci jest nie większa od 400 pF. Jednakże, nawet jeśli pojemność jest mniejsza to istnieje szereg innych czynników które mogą ograniczyć stosowanie naszego interfejsu w urządzeniu. Często spowodowane jest to faktem, że czasy narastania przebiegów cyfrowych są zbyt duże. Może to być spowodowane zbyt dużą ilością urządzeń w sieci, nadmierną pojemnością ale też np. zbyt małym prądem drivera lub zbyt wolnym czasem narastania na jego wyjściu.

    Nowy driver, opracowany przez TI, charakteryzuje się zupełnie inną architekturą (patrz rysunek 2). W układzie tym do sterowania siecią wykorzystano zintegrowane źródło prądowe, zamiast podciągnięcia do zasilania poprzez opornik.

    Sprytny sposób na uniknięcie problemów z I2C
    Rys.2. Architektura (a) tradycyjnego bufora I²C oraz (b) bufora TCA980X


    Sterowanie sieci źródłem prądowym pozwala na uzyskanie szybszego narastania napięcia na wyjściu, jak i bardziej kontrolowanego opadania napięcia. Dzięki temu otrzymujemy driver zapewniający o wiele lepszą a integralność sygnału.

    Na rysunku 3 widzimy porównanie przebiegów na wyjściu klasycznego drivera (niebieski) i nowego, opartego na źródle prądowym (zielony) dla obciążonej sieci. Jak widać na oscylogramie nowy sterownik interfejsu zapewnia o wiele lepszą kontrolę nad zboczami jak i eliminuje drgania napięcia.

    Sprytny sposób na uniknięcie problemów z I2C
    Rys.3. Różnica czasów narastania dla bufora TCA980x i konkurencyjnych driverów I²C


    Nowa architektura drivera, zaproponowana przez TI, rozwiązuje częste problemy z interfejsami I²C, jakie obserwuje się w bardziej rozbudowanych sieciach. Wykorzystanie układów z rodziny TCA980X pozwala uprościć projektowanie jak i uruchamianie urządzeń wykorzystujących interfejs I²C.

    Żródło: Link

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #3 16480228
    ghost666
    Tłumacz Redaktor
    oskar777 napisał:
    To znaczy, że dzięki temu można zwiększyć zasięg I2C?


    Zasięg tylko pośrednio - chodzi o pojemność sieci, którą steruje driver. Można oczywiście wykorzystać go jak swoisty repeater, wtedy i zasięg się zwiększy.
  • #4 16480294
    tronics
    Poziom 38  
    oskar777 napisał:
    To znaczy, że dzięki temu można zwiększyć zasięg I2C?

    Jeśli chcesz duży zasięg to się stosuje inne układy, które z jednej strony mają poziomy logiczne, ale na linii komunikacyjnej napięcie do którego są podciągane linie jest znacznie wyższe. Przez to pojemności przeładowują się szybko więc nie ma problemu ani z poziomami, ani ze stromością, ani poziomiem zakłóceń. Wadą jest to, że do każdego urządzenia i2c jest taki scalak potrzebny. Jeśli chcemy umiarkowanie długie odległości na i2c to przede wszystkim dobry kabel (ekranowana skrętka, SDA+GND w pierwszej parze, SCL+GND w ostatniej) oraz jeśli to nie pomoże redukcja prędkości.
  • #5 16480966
    oskar777

    Poziom 26  
    tronics możesz podać takie układy i tak by koszt nie był jakiś porażający o ile się da?
  • #6 16481028
    tronics
    Poziom 38  
    Np. NXP P82B96DP
    Rózni producenci oferują tego typu rozwiązania, podejrzewam, że bez problemu znajdzie kolega kosztujące kilka PLN.
    Osobiście przy 50kHz i ekranowanej skrętce mam bezbłędną transmisję I2C 3V3 (raspberry pi i węzły pick 2 light) na odległości rzędu 4m bez jakichkolwiek dodatkowych układów. Podejrzewam, że stosując bufor i używając na linii podciągnięcia do 5V bezproblemowo działałoby na 100kHz.
  • #7 16481394
    Atos30
    Poziom 14  
    PCA9600 to nowsza wersja P82B96, NXP ma na stronie notę techniczną na temat używania buforów i I2C z długością kabla sięgającą kilkadziesiąt metrów.
  • #8 16482516
    matti0010
    Poziom 11  
    ghost666 napisał:
    Próg stanu niskiego interfejsu I²C definiowany jest przez specyfikację jako wartość równą 20% napięciu zasilania.


    Poprawcie mnie, bo może jakoś źle patrzę/interpretuję ale w tekście napisano 20% a na rysunku wyraźnie zaznaczono 0.3 x Vcc czyli wychodzi na to, że 30% VCC. Nie czepiam się, ale szkoda by potem były jakieś niejasności :) warto uzgodnić jedną wersję.
  • #10 16486131
    ghost666
    Tłumacz Redaktor
    W tekście omyłkowo napisano, że 20% :) prawdziwą wartością jest 30% - to była literówka.
REKLAMA