magistrala i2c - RESET

Feb 17, 2007 5 Replies

Witam



Buduję system złożony z kilku uC, komunikacja między nimi to szyna i2c. W systemie jest 1 master(zawsze ten sam), a reszta pracuje jako slave. Głowię się jak rozwiązać problem błędów w transmisji. Założenie mam takie, że w każdym urządzeniu określam "timeout" (np. 1s) po którym interfejs TWI jest resetowany. Niby całość działa ale nie do końca. W jaki sposób zrobić skuteczny RESET na i2c? Ma ktoś jakiś pomysł?



Pozdrawiam


U¿ytkownik "Luk@sz" snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:45d75ca1$0$13179$ snipped-for-privacy@mamut2.aster.pl...

Gdy pojawia sie bledy moze powtarzac ostatnia transmisjie ?

Co to znaczy "Niby calosc dziala ale nie do konca" ? Tzn. co nie dziala ?

Andy napisał(a):

Rozchodzi mi sie o to jak powinna wyglądać sekwencja RESET. Przykładowo, pojawiło się zakłócenie na szynie, master wysłał daną i nie dostał ACK od SLAVE. W tej sytuacji MASTER powinien zresetować magistrale i ponowić transmisję, natomiast SLAVE powinien zresetować sprzętowe TWI. Jakim rozkazem to zrobić?

Czy jeżeli jestem jako SLAVE i zechcę wysłać STOP to co się wydarzy?

Pozdro

Luk@sz snipped-for-privacy@o2.pl pisze:

Ja wysy³am po prostu STOP i u mnie dzia³a :-)

To musi staæ siê MASTERem. SLAVE zgodnie z za³o¿eniami tylko s³ucha.

U¿ytkownik "Patryk Sielski" snipped-for-privacy@elka-usun.pw.edu.pl> napisa³ w wiadomo¶ci news:39da9$45d77c61$57ceab2d$ snipped-for-privacy@news.chello.pl...

Jesli chodzi o AVR to pisza cos w dokumentacji, ze jesli w przypadku SLAVE ustawimy bit STO to nie generuje to sekwencji STOP na liniach TWI ale doprowadza maszyne stanow od TWI do stanu poczatkowego.

Spinacz biurowy, Luk@sz snipped-for-privacy@o2.pl!

Nie ma czegoś takiego jak sekwencja resetu na i2c. Do synchronizacji, czyli ustawienia stanu początkowego w automacie slave'a, służą sekwencje start/stop. Po prostu jeżeli coś poszło nie tak to robisz stop i ponawiasz transmisję.

Wysyłając stop.

Po otrzymaniu start.

Nie ma czegoś takiego. Od wysyłania poleceń jest master. Slave ma słuchać i ewentualnie wysłać acka albo dane (jeżeli są z niego czytane) w takt zegara mastera. Jeżeli slave stwierdzi, że coś mu się nie zgadza, to albo może nie wysłać acka, albo możesz zrobić jakiś rejestr kontrolny w slave, z którego czytasz np. kod błędu ostatniej operacji na magistrali, albo numer stanu w automacie stanowym slave'a (ale to raczej dotyczy wyższej warstwy niż datalink, np. ogólnej spójności prawidłowo przesłanych danych).

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required