pytanie o protokół I2C

Dec 01, 2006 19 Replies

Witam, nie trafiłem na odpowiedź na nurtujący mnie problem, mam nadzieję że Wy mi odpowiecie. Otóż w specyfikacji jest podany opis arbitrażu który polega na wykryciu sytuacji gdy dwa urządzenia master stwierdzają stan "bus free" (SDA = SCL = HI) i zaczynają nadawać warunek START (SDA HI->LO, a potem SCL HI->LO). Jednak już przy samej transmisji dla poszczególnych bitów danych (równych 1) zdarzają się stany SDA = SCL = HI czyli "bus free". Powiedzcie mi proszę czy każdy master przed rozpoczęciem transmisji musi badać stan linii SDA i SCL przez jakiś minimalny czas, zanim stwierdzi czy magistrala jest wolna? Inaczej wciąłby się w jakąś transmisję i jakiś bit danych (o wartości 1) zamieniłby w sygnał STARTu.



Mam specyfikację "THE I 2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000" ze strony PHILIPSA i jakoś nie znalazłem/albo pomijam niechcący odpowiedź na ten problem



MariuszC


Jeżeli inny master wykryje Start wtedy nie ma prawa nadawać do konca transmisji tj Stopu. Detekcja warunków: start, stop etc. jest robiona sprzeętowo.

Mister

Użytkownik "Mister" :

A co wtedy, gdy master, ktory nadal "start" zawiesil sie lub zresetowal ?

Heliogabal

Heliogabal napisał(a):

Warunki STAR i STOP sa generowane sprzętowo, gdy mamy kilku masterów to można zadbac o jakiś timeout dla danej transmisji. Jeśli driver linii sie powiesi i nie wymusi stałego "0" to magistrale możę przejąć dowolny inny master. Jeśli się powiesi i wymsui "1" to troche gorzej, bo masgistrala będzie ciągle zajęta.

Pozdro

Trzeba zrobić reset magistrali i2c.

Mister

Użytkownik "Mister":

Zalozmy, ze mamy dwoch masterow - Atmegi ze sprzetowa obsluga i2c i jeden slave - pcf8583. Jak powinien wygladac reset i2c ?

Heliogabal

Niestety gdzieś kiedyś wyczytałem że master inicjuje transmisje, generuje zegar, natomiast slave-y nasłuchują, dlatego wykluczyłem możliwość nasłuchiwania przez urządzenia master. Jednak powiedz mi, gdzie znalazłeś/przeczytałeś że tak jest faktycznie, skoro w opisie magistrali I2C nie mogę znaleść tej informacji?

Mariusz

Użytkownik "MariuszC" snipped-for-privacy@op.pl napisał w wiadomości news: snipped-for-privacy@newsgate.onet.pl...

Master musi nasłuchiwać sam siebie, i to aż do wykrycia kolizji. Kolizja niekoniecznie musi się kończyć resetem magistrali.

e.

Przecież to wynika z arbitrażu i tam to jest opisane.

Mister

arbitraż jest opisany pod kątem momentu gdy dwa mastery rozpoczynają transmisję sygnałem START. A mi chodzi o sytuację gdy jeden master jest w trakcie transmisji bitu adresu/danej 1 (Hi) - w tym momencie SDA = 1 i SCL = 1, więc jest spełniony warunek wolnej magistrali; teraz zakładając że inny master "wciąłby się" w tę transmisję sądząc żę magistrala jest wolna tak naprawdę wygenerowałby nowy sygnał START - wystawiając SDA = 0 linia ta faktycznie przyjęłaby 0, podobnie z linią SCL, więc ten pierwszy master który był w trakcie transmisji utraciłby kontrolę. No ale to byłoby bez sensu bo praktycznie każda transmisja mogłaby zostać anulowana przez nowe transmisje.

Mariusz

Ale jak pisałem wcześniej, ten drugi master sprzetowo wykrył, że ktoś wysłał START i został zablokowany aż do napotkania STOPu. Dlatego wręcz niemożliwe jest zrobienie masterów programowych.

Apropo resetu magistrali to niektóre slave wymagają pewnej sekwencji resetującej, odsyłam do dokumentacji; jeżeli chodzi o mastery to tego jeszcze nie ćwiczyłem.

Nikomu się nie zdarzyło sie, że w pewnym momencie układy przestawały się komunikować po i2c :)? Miedzy innymi dlatego magistrala nie jest stosowana w przemyśle.

Mister

No tak, tylko napisałeś wcześniej że brak wcinania się innego mastera w bieżące transmisje gdy akurat jest wystawiony bit o wartości 1 wynika z arbitrażu, a to wynika z tego iż wszystkie mastery jednoczesnie nasłuchują linie i gdy wykryja start to albo przelaczaja sie w tryb slave (niektore mastery tez moga sie komunikowac miedzy soba) albo juz tylko czekaja na sygnal stop wstrzymujac swoje transmisje. Tylko wlasnie nie znalazlem takiej informacji w specyfikacji magistrali I2C.

Pewnie mało kto używa wielu masterów w jednym systemie.

Mariusz

Jest cos takiego SMBus. Niby to samo co I2C, a jednak w specyfikacji wstawiono czasy maksymalne.

Inna sprawa ze jak sie ktorys uklad wscieknie, to zejdzie w stan L na stale i zablokuje magistrale. No ale to grozi w wielu magistralach, w RS485 tez.

J.

Driver linii interfejsu I2C umie wymusić conajwyżej '0' i 'Z' (stan wysokiej impedancji). Jeśli zawiesi się w stanie 'Z' to nic się nie stanie, może być problem w stanie '0'. Generalnie dopóki nie symulujemy I2C na poziomie programowym, takie ryzyko jest minimalne, a jeśli już występuje - układ jest po prostu zepsuty.

Paweł

Że co proszę? Pokaż mi współczesny telewizor bez takiej szyny.

A ja "gdzieś" wyczytałem że slave (np. pamięć szeregowa) może wstrzymywać komunikację na szynie na czas przetwarzania informacji (np. fizycznego zapisu do pamięci EEPROM) poprzez przytrzymanie zegara w stanie niskim.

Paweł

Może pusta transakcja START+STOP?

Telewizor to nie sterownik przemysłowy :)

Mister

Tak mają np. mikrokontrolery PIC. Linia zegarowa jest sciągana do masy tak długo dopóki nie zostanie ustawiony bit w rejestrze kontrolnym. Zastanawiam sie tylko co w takim przypadku powinien robic master (dostawca zegara). Teoretycznie powinien poczekac na przejscie linii zegarowej w stan wysoki a nastepnie linia ta powinna pozostac w stanie wysokim przez pól okresu (np. w przypadku linii 100kHz bedzie to 5us). Zmierzam do tego czy w momencie zwalniania linii nie dochodzi czasem do skrócenia pierwszego impulsu zegarowego przez co pierwszy bit moze zostac błednie odebrany?

Tak mają (powinny mieć) wszystkie mikrokontrolery. Swoją drogą I2C jest znakiem zastrzeżonym Philipsa, inni nazywają ten sam interfejs inaczej, np. Atmel w AVR-ach nazywa to TWI (Two-Wire Interface).

A czemu pierwszy bit miałby być źle odebrany? Przecież sam bit w tym przypadku trwa znacznie dłużej. Jeśli chodzi natomiast o obserwacje linii zegarowej to slave (i master) próbkuje obydwie linie z częstotliwością kilkakrotnie większą niż częstotliwość sygnału na SCL (podobny patent stosuje się np. w UART). Kolejna sprawa, podejrzewam że master odmierza odpowiedni czas trwania stanu wysokiego SCL "po zauważeniu", że SCL jest już wysoki, zatem skrócenie nie powinno mieć miejsca.

Paweł

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required