pytanie o protokół I2C

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

Reply to
MariuszC
Loading thread data ...

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

Reply to
Mister

Użytkownik "Mister" :

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

Heliogabal

Reply to
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

Reply to
Luk

Trzeba zrobić reset magistrali i2c.

Mister

Reply to
Mister

Użytkownik "Mister":

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

Heliogabal

Reply to
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

Reply to
MariuszC

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.

Reply to
entroper

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

Mister

Reply to
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

Reply to
MariuszC

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

Reply to
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

Reply to
MariuszC

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.

Reply to
J.F.

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ł

Reply to
invalid unparseable

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

Reply to
invalid unparseable

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ł

Reply to
invalid unparseable

Może pusta transakcja START+STOP?

Reply to
invalid unparseable

Telewizor to nie sterownik przemysłowy :)

Mister

Reply to
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?

Reply to
yogi

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ł

Reply to
invalid unparseable

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.