magistrala i2c - RESET
Luk@sz - 17-02-2007 22:45
magistrala i2c - RESET 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
Andy - 17-02-2007 22:45
Użytkownik "Luk@sz" <lkoasze@o2.pl> napisał w wiadomości
news:45d75ca1$0$13179$f69f905@mamut2.aster.pl...
> 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ł?
>
Gdy pojawia sie bledy moze powtarzac ostatnia transmisjie ?
Co to znaczy "Niby calosc dziala ale nie do konca" ?
Tzn. co nie dziala ?
--
Andrzej
Luk@sz - 17-02-2007 23:45
Andy napisał(a):
> Gdy pojawia sie bledy moze powtarzac ostatnia transmisjie ?
>
> Co to znaczy "Niby calosc dziala ale nie do konca" ?
> Tzn. co nie dziala ?
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
Patryk Sielski - 17-02-2007 23:45
Luk@sz <lkoasze@o2.pl> pisze:
> 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ć?
Ja wysyłam po prostu STOP i u mnie działa :-)
> Czy jeżeli jestem jako SLAVE i zechcę wysłać STOP to co się wydarzy?
To musi stać się MASTERem. SLAVE zgodnie z założeniami tylko słucha.
--
Pozdrawiam,
Patryk Sielski
Andy - 17-02-2007 23:45
Użytkownik "Patryk Sielski" <psielski-usun@elka-usun.pw.edu.pl> napisał w wiadomości
news:39da9$45d77c61$57ceab2d$25760@news.chello.pl. ..
> Luk@sz <lkoasze@o2.pl> pisze:
> > 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ć?
>
> Ja wysyłam po prostu STOP i u mnie działa :-)
>
> > Czy jeżeli jestem jako SLAVE i zechcę wysłać STOP to co się wydarzy?
>
> To musi stać się MASTERem. SLAVE zgodnie z założeniami tylko słucha.
>...
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.
--
Andrzej
Adam Wysocki - 18-02-2007 00:45
Spinacz biurowy, Luk@sz <lkoasze@o2.pl>!
> Rozchodzi mi sie o to jak powinna wyglądać sekwencja RESET.
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ę.
> pojawiło się zakłócenie na szynie, master wysłał daną i nie dostał ACK
> od SLAVE. W tej sytuacji MASTER powinien zresetować magistrale
Wysyłając stop.
> natomiast SLAVE powinien zresetować sprzętowe TWI.
Po otrzymaniu start.
> Czy jeżeli jestem jako SLAVE i zechcę wysłać STOP to co się wydarzy?
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).
--
Adam Wysocki * Warszawa *
http://www.chmurka.net/ * GSM: 514 710 213
FidoNet: 2:480/138, SWL: SP5-250730, QTH: KO02MF, CB: 19 Śródmieście
W razie wątpliwości opróżnij magazynek. (C) Jakub Krajewski amd3dnow
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl