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

Reply to
Luk
Loading thread data ...

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

Reply to
Luk
Reply to
Patryk Sielski

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

Reply to
Adam Wysocki

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.