Slave i2c blokuje magistralę....

Taka sytuacja: jest na magistrali tylko jeden master i jeden slave. Komunikacja potrafi działać kilka dni bez problemów po czym nagle master zgłasza bus collision. Okazuje się, że slave trwale ściąga do masy sda i tak trzyma. Podobno może się tak zdarzyc, np. slave dostał jakieś zakłócenia, nie zobaczył zegara i pozostał zawieszony na ack. Jest na to sposób polegający na "ręcznym" wygenerowaniu kilku taktów scl by slave się "odwiesił" i zwolnił magistralę. Niestety to w tym przypadku nie pomaga, pomaga jedynie off/on zasilania slave'a. Slave to ds2482, nie wiem czy to problem osobniczych w tego układu ale tak z ciekawości, czy to częsta przypadłość slave'ów i2c takie zawieszenie się?

Reply to
Marek
Loading thread data ...

W dniu 2018-10-31 o 21:24, Marek pisze:

Mam praktycznie zerowe doświadczenie z I2C, ale to co opisujesz wygląda jak latch-up pinu w scalaku.

Czy jest szansa, że na pinach pojawia się chwilowy stan poniżej -0,3V. To może spowodować latch-up. Przyczyną może być np. za duża indukcyjność połączenia między kondensatorem blokującym zasilanie scalaka i jego strukturą wewnętrzną, albo zła wartość lub typ (ESR) kondensatora. Np. obudowa przewlekana ma z natury większe impedancje połączeń zasilań do struktury bo do pinów jest dalej. Impuls prądu pobierany przez scalak w czasie zmiany stanu może na tych indukcyjnościach wydzielić impulsowe spadki napięcia. Potencjał GND scalaka skacze do góry (VCC w dół), gdy tymczasem inny scalak utrzymuje stan linii na poziomie GND i już wejście danego scalaka widzi napięcie poniżej jego GND, które może doprowadzić do latch-up-u struktur pasożytniczych pina. P.G.

Reply to
Piotr Gałka

Ten ds pracuje w trudnym elektrycznie środowisku (rozdzielnia elektryczna), ma podłączone 3 20m przewody z termometrami (każdy na osobnym kanale). Szanse na zbieranie ESD z okolicy ma bardzo duże. Jak się trochę w tym temacie poszpera to okazuje się, że problem z zatykającymi się slave'ami i2c występuje (ogólnie, nie tylko w tym szczególnymuklafzie, o którym mówimy). Niestety większoś układów slave i2c nie ma pina reset przydatnego w takich sytuacjach, zaleca się sztuczkę z generacja taktów zegara aż zwolni SDA (o ile nie jest to latchup, o którym piszesz a jedynie rozsynchronizowanie). Jeśli to nie pomaga a układowi często się to zdarza taki latchup to trzeba niestety zaimplementować slave'owi power reset....

Reply to
Marek

W dniu 2018-11-01 o 09:01, Marek pisze:

Poszukałem co to takiego ten DS2482. Rozumiem, że do niego masz bezpośrednio podłączone 20m kable.

Urządzenia normalnie bada się na odporność na ESD, burst i surge. ESD to w sumie symulacji dotknięcia urządzenia przez naelektryzowanego człowieka. Burst to symulacja różnych zjawisk związanych z przełączaniem prądów (np. iskrzenie na stykach przekaźników/styczników). Surge to symulacja uderzającego gdzieś w pobliżu pioruna lub jakichś awaryjnych zdarzeń w sieci energetycznej (włączenie/wyłączenie podsieci może skutkować zakłóceniami podobnymi do tych od pioruna).

Na tyle na ile zrozumiałem to to Twoje urządzenie raczej jest narażone na burst i surge.

Surge to impuls napięciowy 50us lub prądowy 20us (jak wyjście generatora się zewrze to prąd spada szybciej niż napięcie w nie obciążonym generatorze). Takie impulsy podaje się na linie zasilania AC urządzeń bo zakłada się że mogą się pojawić (piorun, przepięcia z sieci). Jeśli wychodzi (np. długie kable), że linie sygnałowe należy zbadać na odporność na surge to generator surge podłącza się nie bezpośrednio tylko przez układy redukujące jego moc (bo na linie sygnałowe surge dostaje się pośrednio, a nie prosto z sieci). Elementem ograniczającym prąd jest wtedy rezystor 40om. Według moich symulacji jak zerze się wyjście generator surge z podłączonym rezystorem 40om to uzyska się impuls prądu, który spada do połowy gdzieś po 47us. Typowym wymaganiem jest impuls Surge 1kV (1kV/40om = 25A).

Pierwszym na co bym patrzył w schemacie Twojego urządzenia to czy wejścia 1-wire wytrzymają impuls 25A/50us. Choć być może normy dla urządzeń pracujących w rozdzielniach elektrycznych specyfikują nie 1kV surge a może kilka razy więcej. P.G.

Reply to
Piotr Gałka

Jakie masz rezystory magistrali I2C? Może warto zmniejszyć?

Zastanawiam się też, czy (jeśli problemem jest latch-up) transil na linii

1wire nie rozwiązałby problemu...
Reply to
Queequeg

2.2k. Zmniejszenie ich pomoże na twardy latchup?

Zdaje się że jest już w strukturze ds2482, w końcu to 1w master.

Reply to
Marek

Jeśli to twardy latch-up, to nie. Nie doczytałem, że próbowałeś już zwolnić slave'a ręcznie generując mu zegar.

Znalazłem coś takiego:

formatting link
"Toggling the SCL pin 9 times, with SDA high, followed by a STOP cycle, would probably clear it."

Próbowałeś tak?

Reply to
Queequeg

Oczywiście ale to nie pomaga. Mocno niepokojący jest fakt, że slave ściąga również scl do masy, co jest bardzo dziwne bo scl dla tego slave to tylko wejście. Pomaga odpięcie mu zasilania na chwilę.

Reply to
Marek

W dniu 2018-11-04 o 11:17, Marek pisze:

W strukturze jeśli jest zabezpieczenie to tylko ESD, chyba, że scalak jest odpowiednio duży - na każdą linię 1w trzeba by dodać objętości jak SMB (transil 600W).

W latach 90-tych ubiegłego wieku myślałem, że jak zamiast 'normalnego' scalaka RS485 użyłem takiego z wbudowanym zabezpieczeniem ESD 16kV to jestem zabezpieczony. To się sprawdzało wtedy w ponad 100 instalacjach naszego systemu, ale w jednej się nie sprawdziło. Instalacja była na szczycie płaskowyżu. Raz, dwa razy do roku (zawsze po jakiejś burzy) system się zawieszał. Umówiłem się, aby nie resetowali tylko dali cynk. Rozebrałem urządzenie bez zdejmowania mu zasilania i mierząc mV spadki napięcia na GND odkryłem, że driver RS485 zwiera zasilanie. Potem doczytałem (w różnych papierach bo Googla jeszcze nie było) co to jest latchup i czym się różni ESD od surge i jak się od tego zabezpieczać. Po odpowiednich zmianach problemy już się nie powtórzyły. Trzeba tylko przy kolejnych projektach pamiętać, aby kiedyś nie zrezygnować ze szczepienia, bo skoro zachorowań nie ma to po co się zabezpieczać :)

Kilka lat później miałem do czynienia z urządzeniem (jakiejś brytyjskiej firmy), które czasem "się przegrzewa i zawiesza". Obejrzałem schemat i stwierdziłem, że ono na pewno się nie "przegrzewa i zwiesza" tylko "zawiesza i grzeje". Miało czytnik pastylek Dallasa (1w) podłączony bezpośrednio do nogi procesora, a już wtedy wiedziałem, że człowiek może z palca walnąć ESD nawet 25kV. Spotkałem też informację, że kobieta to nawet 30kV, ale bez uzasadnienia skąd różnica (może kobiety w jakiejś statystycznej próbie częściej miały jakieś elektryzujące się ciuchy). P.G.

Reply to
Piotr Gałka

Popularne transile SMB jakie testowałem mają pojemności około 1 nF co je dyskwalifikuje do zastosowania na długich linii 1W z kilkoma slave'ami. Jeśli znasz jakieś smb o pojemności ponizej 100pF dużej mocy to zaproponuj, chętnie zastosuje.

Reply to
Marek

Czyli latchup :(

Na pewno tylko wejście? Nie ma clock stretching? (nie mówię że włącza wtedy clock stretching, tylko że może jest jakiś tranzystor do tego celu, który się blokuje tak jak ten na SDA)

formatting link

Reply to
Queequeg

W dniu 2018-11-05 o 11:40, Marek pisze:

Daj diodę na transil i drugą na masę. Ja bym dążył do tego, aby diody wytrzymywały impuls rzędu 50A (prostownicze 1A), ale w Twojej sytuacji może nie jest to konieczne, a słabsze to zapewne mniejsza pojemność.

Jeśli na linii 1w (nie pamiętam jak działa) przez większość czasu jest napięcie zbliżone do VCC to pojemność transila będzie cały czas naładowana i nie będzie przeszkadzać. Jeśli nie to można 'zasilić' transila jakimś rezystorem 100k..1M - będzie całkowicie niewidoczny podczas normalnego działania.

Między tym zabezpieczeniem a scalakiem koniecznie musi być jakaś separacja - np. rezystor 10om (lub więcej zależnie co 1w akceptuje). To co pojawi się za tym rezystorem zabezpieczenie w sclaku powinno łyknąć. Bez tego rezystora nie ma pewności jak podzieli się energia impulsu między transil i zabezpieczenie w scalaku.

Impedancja połączeń wewnętrznych transila powoduje, że mimo, że potrafi dobrze ograniczyć surge (bo to powolny impuls) to przy ESD napięcie na transilu może chwilowo osiągnąć 200V (takie wyniki podawał w którymś z Tidbitów

formatting link
Aby ograniczyć stromość ESD na wejściu (między te 20m kabla a diody) wstawiłbym koralik ferrytowy - jakiś 0603 1k. Nie mogłem z danych wyczytać czy koralik wytrzyma więc osobiście potraktowałem go impulsami 50A 100us - ten, który miałem wytrzymał.

Koralik można, zamiast na wejściu, dać w szereg z tym rezystorem 10om. Zaleta - koralik nie jest narażony bezpośrednio na surge. Wada - przy ESD przepływa przez naszą płytkę (przez transil) prąd o większym dI/dt niż gdy koralik jest na wejściu. Duże dI/dt indukuje prądy w pobliskich obwodach. Nigdy nie wiadomo czy nie zrobi gdzieś kuku dlatego ja daję koraliki bezpośrednio na wejściu, ale nie takie sygnałowe, tylko takie do zasilań (nie na 200mA tylko na

800mA).

Drugi drut 1w zapewne łączy się do GND. Tego też bym podłączył przez taki koralik. Jak tędy przyleci jakiś impuls to po co duże dI/dt ma hulać po mojej masie!

Wyobraź sobie, że od płytki w dwie strony odchodzą długie druty połączone do GND płytki po obu jej stronach. Jeśli na płytce biegają jakieś sygnały cyfrowe to prądy powrotne biegają po GND wywołując jakieś spadki napięć. Takie dwa druty to idealna antena do emitowania tych sygnałów. To również idealna antena do odbierania jakichś zakłóceń i przepuszczania ich przez płytkę. Wstawienie koralików 1k w te linie znakomicie pogorszy parametry tej anteny. P.G.

Reply to
Piotr Gałka

Fragment z datasheet:

"Because the DS2482 uses SCL only as input (no clock stretching) the master can drive SCL either through an open- drain/collector output with a pullup resistor or a push-pull output.".

Myślę o dodaniu transili na liniach 1W ale czy dać też na i2c? Akurat na tych liniach i2c nie dawałem transili, uznałem że są krótkie (max

10cm master-slave) i obejdzie się.
Reply to
Marek

Nie bardzo rozumiem - masz na myśli tzw steering diode jako dodatek do transila? Tak jak proponują w tym pdf str 5 środkowy rysunek:

formatting link
Trochę komplikuje , myślę że zacznę od dodania klasycznego transila o niskiej pojemności. Tylko pytanie czy zabezpieczyć poza linią 1W też linie i2c...

Reply to
Marek

W dniu 2018-11-05 o 14:55, Marek pisze:

Jeśli te 10cm to ścieżka na PCB nie ma potrzeby (zakładam dobrze zaprojektowaną PCB - ze świadomością, że każdemu sygnałowi przesyłanemu ścieżką towarzyszy prąd powrotny w GND). Jeśli te 10cm to kabelek łączący dwie płytki to trzeba się zastanowić jakie prądy (od zakłóceń) mogą tym kabelkiem przepływać i jakie mogą być tego skutki. P.G.

Reply to
Piotr Gałka

W dniu 2018-11-05 o 15:04, Marek pisze:

Tak, tylko ja na to nie patrzę jak na dodatek do transila tylko na ograniczanie sygnału dwiema diodami, każda oparta o coś odpowiedniego - jedna o transil druga o GND. Dal RS485 stosuję mostek oparty o dwa transile - inny dla plusa i inny dla minusa bo typowy dopuszczalny zakres jest -7 do +12. Gdyby zastosowany scalak nie tolerował jeszcze zbyt dużej różnicy napięć to dałbym jeszcze transil w przekątną mostka. P.G.

Reply to
Piotr Gałka

Po co gdy są transile bidi?

Reply to
Marek

W dniu 2018-11-05 o 18:13, Marek pisze:

Nie kojarzę, czy są niesymetryczne, a jak są to czy są łatwo dostępne i czy były dostępne 10 lat temu jak podejmowałem tę decyzję.

Poza tym zapewne pomnożyłem pojemność transila przez 100 (bo do 100 urządzeń na magistrali) i podłączyłem takie kondensatory do linii i widocznie musiałem nie być zadowolony.... P.G.

Reply to
Piotr Gałka

W dniu 2018-11-05 o 18:33, Piotr Gałka pisze:

Są, i na dodatek pod RS485 (-7V do +12V) - SM712.

formatting link

Reply to
Elektrolot

W dniu 2018-11-06 o 09:14, Elektrolot pisze:

Rozmiar nie wzbudza mojego zaufania. Podają 19A 8/20us. W TME akurat nie ma (wkrótce będą). Ciekawe, że SM712 SEMTECH jest gorszy (12A 8/20us) a droższy.

Generator 61000-4-5 jest tak zdefiniowany, że daje impuls napięciowy ?/50us lub to prądowy 8/20us. Generatora nie przestawia się na 50us czy na 20us. To się dzieje samo na skutek szybszego rozładowania pojemności gdy wyjście jest zwarte (impuls prądowy). Ale jak ten generator słabiej obciążyć (wstawiając rezystor

40om) to impuls prądowy będzie prawie tak długi jak napięciowy. Dlatego przyjąłem, że moje wejścia mają wytrzymywać 25A (1kV/40) 50us, czyli 30% więcej prądu i 150% dłużej niż ten littelfuse.

W moim podejściu jest też pewna naleciałość historyczna. W 2004 roku jak byłem pierwszy raz w labie EMC to oni mieli rezystor 40om a nie mieli odpowiednich kondensatorów przez które podłącza się surge (być może te kondensatory tak dobrane aby impuls prądowy skrócić do tych 20us - nie zastanawiałem się). W każdym razie nie mieli, powiedzieli, że oni swoje wejścia (lab przy firmie produkcyjnej) traktują przez ten rezystor bez kondensatora więc i moje tak sprawdziliśmy, a ja przyjąłem sobie takie wymagania już na stałe.

Jakbym gdzieś miał totalnie 0 miejsca to rozważyłbym te littelfuse, ale to jest działanie w stylu - nie ma problemów to dajmy tańsze a słabsze zabezpieczenie. P.G.

Reply to
Piotr Gałka

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.