RTV forum PL | NewsGroups PL

Slave i2c blokuje magistralę....

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Slave i2c blokuje magistralę....

Goto page 1, 2  Next

Marek
Guest

Wed Oct 31, 2018 9:24 pm   



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ę?

--
Marek

Piotr Gałka
Guest

Wed Oct 31, 2018 10:31 pm   



W dniu 2018-10-31 o 21:24, Marek pisze:
Quote:
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ę?


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.

Marek
Guest

Thu Nov 01, 2018 9:01 am   



On Wed, 31 Oct 2018 22:31:43 +0100, Piotr
Gałka<piotr.galka_at_cutthismicromade.pl> wrote:
Quote:
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.

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

--
Marek

Piotr Gałka
Guest

Fri Nov 02, 2018 12:33 pm   



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

Quote:
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....


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.

Queequeg
Guest

Sun Nov 04, 2018 2:50 am   



Marek <fake_at_fakeemail.com> wrote:

Quote:
ma podłączone 3 20m przewody z termometrami (każdy na osobnym kanale).

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

--
https://www.youtube.com/watch?v=9lSzL1DqQn0

Marek
Guest

Sun Nov 04, 2018 11:17 am   



On Sun, 4 Nov 2018 00:50:53 +0000 (UTC), queequeg_at_trust.no1
(Queequeg) wrote:
Quote:
Jakie masz rezystory magistrali I2C? Może warto zmniejszyć?

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

Quote:
Zastanawiam się też, czy (jeśli problemem jest latch-up) transil na
linii
1wire nie rozwiązałby problemu...

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

--
Marek

Queequeg
Guest

Sun Nov 04, 2018 7:50 pm   



Marek <fake_at_fakeemail.com> wrote:

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

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

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:

https://www.microchip.com/forums/m76835.aspx

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

Próbowałeś tak?

--
https://www.youtube.com/watch?v=9lSzL1DqQn0

Marek
Guest

Mon Nov 05, 2018 9:32 am   



On Sun, 4 Nov 2018 17:50:19 +0000 (UTC), queequeg_at_trust.no1
(Queequeg) wrote:
Quote:
"Toggling the SCL pin 9 times, with SDA high, followed by a STOP
cycle,
would probably clear it."
Próbowałeś tak?

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

--
Marek

Piotr Gałka
Guest

Mon Nov 05, 2018 11:18 am   



W dniu 2018-11-04 o 11:17, Marek pisze:
Quote:
On Sun, 4 Nov 2018 00:50:53 +0000 (UTC), queequeg_at_trust.no1 (Queequeg)
wrote:
Jakie masz rezystory magistrali I2C? Może warto zmniejszyć?

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

Zastanawiam się też, czy (jeśli problemem jest latch-up) transil na
linii 1wire nie rozwiązałby problemu...

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


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.

Marek
Guest

Mon Nov 05, 2018 11:40 am   



On Mon, 5 Nov 2018 11:18:54 +0100, Piotr
Gałka<piotr.galka_at_cutthismicromade.pl> wrote:
Quote:
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).

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.

--
Marek

Piotr Gałka
Guest

Mon Nov 05, 2018 1:01 pm   



W dniu 2018-11-05 o 11:40, Marek pisze:
Quote:
On Mon, 5 Nov 2018 11:18:54 +0100, Piotr
Gałka<piotr.galka_at_cutthismicromade.pl> wrote:
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).

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.


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 www.emcesd.com). 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.

Queequeg
Guest

Mon Nov 05, 2018 1:44 pm   



Marek <fake_at_fakeemail.com> wrote:

Quote:
Oczywiście ale to nie pomaga.

Czyli latchup :(

Quote:
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.

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)

https://www.i2c-bus.org/clock-stretching/

--
https://www.youtube.com/watch?v=9lSzL1DqQn0

Marek
Guest

Mon Nov 05, 2018 2:55 pm   



On Mon, 5 Nov 2018 11:44:28 +0000 (UTC), queequeg_at_trust.no1
(Queequeg) wrote:
Quote:
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,

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

--
Marek

Marek
Guest

Mon Nov 05, 2018 3:04 pm   



On Mon, 5 Nov 2018 13:01:44 +0100, Piotr
Gałka<piotr.galka_at_cutthismicromade.pl> wrote:
Quote:
Daj diodę na transil i drugą na masę. Ja bym dążył do tego, aby
diody

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

https://www.tme.eu/pl/Document/fd325a3a83bf5ac797a3404f569aebba/SL05.TCT.pdf

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


Quote:
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ć.

--
Marek

Piotr Gałka
Guest

Mon Nov 05, 2018 3:06 pm   



W dniu 2018-11-05 o 14:55, Marek pisze:
Quote:
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ę.

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.

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Slave i2c blokuje magistralę....

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map