Pytanie:
Czy tylko master może zainicjować komunikację w SPI, podczas gdy w I2C slave może również zainicjować komunikację?
Prawn Hongs
2019-05-13 09:08:48 UTC
view on stackexchange narkive permalink

Czy slave może zainicjować komunikację w SPI?

Pomyślałem, że ze względu na wybór chipa, tj. funkcja NSS, tylko master może komunikować się.Jednak w I2C slave może również zainicjować komunikację poprzez zmianę flagi RW w komunikacji i2c.Czy to prawda?

Aby dodać do istniejących odpowiedzi, powszechnym podejściem do tego byłoby użycie oddzielnego pinu GPIO jako przerwania, które sygnalizuje masterowi, niż slave ma dane do odczytu.
@Prawn_Hongs, czy możesz wyjaśnić, co masz na myśli mówiąc „inicjować”?Myślę, że możesz się pomylić z odczytem / zapisem danych master / slave.
Pięć odpowiedzi:
TemeV
2019-05-13 09:39:58 UTC
view on stackexchange narkive permalink

W przypadku obu tylko master może zainicjować komunikację.I²C może jednak mieć wiele elementów nadrzędnych, a węzły mogą zmieniać role, więc jest nieco bardziej elastyczny.Ale stwierdzenie, że niewolnik może zainicjować komunikację, nadal nie jest poprawne.

Typowym sposobem wskazania przez slave'a, że chce komunikować się z masterem, jest użycie sygnału przerwania.Na wielu czujnikach i przetwornikach ADC są one nazywane „gotowymi do danych” lub podobnie.Po tym, jak slave potwierdził sygnał, master wie, że slave ma dostępne nowe dane.

user
2019-05-13 15:44:54 UTC
view on stackexchange narkive permalink

Zarówno SPI, jak i I2C pozwalają masterowi tylko na początkową komunikację.Jednak istnieje możliwość, że urządzenia slave zasygnalizują, że stało się coś, co zasługuje na komunikację z nimi za pośrednictwem pinu przerwania.

Piny przerwań są dość powszechne w układach scalonych z magistralami szeregowymi.Pin zmienia stan, aby wskazać, że wystąpiło jakieś zdarzenie, a master może wtedy obserwować pin, aby wiedzieć, kiedy powinien komunikować się ze slave, aby dowiedzieć się, co się stało.

Jednak nawet w tym przypadku to od mistrza zależy rozpoczęcie komunikacji i może on po prostu zignorować niewolnika, jeśli chce.

Justme
2019-05-13 09:37:17 UTC
view on stackexchange narkive permalink

Nie, w I2C tylko master może rozpocząć komunikację na magistrali, a wszystkie slave'y muszą podążać za masterem.Slave nie może zainicjować komunikacji, a zwłaszcza slave nie może w żaden sposób zmienić flagi RW.

CL.
2019-05-13 11:10:58 UTC
view on stackexchange narkive permalink

W przypadku SPI, linia MOSI zawsze przesyła dane od mastera do slave, a linia MISO zawsze przesyła dane ze slave'a do mastera.

W przypadku I²C istnieje tylko jedna linia danych dla obu kierunków.Bit R / W kontroluje, które urządzenie przesyła bajty danych, a wraz z urządzeniem przesyła bity ACK, ale sam bit R / W jest zawsze kontrolowany przez urządzenie główne.(Bit R / W można zmienić za pomocą warunku ponownego uruchomienia, ale tylko przez master).

A zegar jest zawsze kontrolowany przez mistrza.(Urządzenie podrzędne I²C może opóźniać cykle zegara z jego rozciąganiem, ale nie może generować nowych cykli zegara).

supercat
2019-05-14 00:19:08 UTC
view on stackexchange narkive permalink

W SPI każde urządzenie ma stałą rolę jako master lub slave. W I2C role urządzeń mogą się dynamicznie zmieniać. Każde urządzenie, które inicjuje transakcję na magistrali (w przeciwieństwie do nakłaniania do transakcji za pomocą jakichś środków poza magistralą) musi zachowywać się jak master dla tej transakcji, ale to urządzenie może zachowywać się jak slave dla transakcji inicjowanych przez inne urządzenia. Z wyjątkiem kilku szczegółów, I2C zakłada istnienie dokładnie jednego mastera i jednego slave'a dla każdej konkretnej transakcji:

  1. W przypadku używania dłuższych formatów adresowania wiele urządzeń może wstępnie działać jako slave, oczekując na pełny adres. W tym stanie jedyną rzeczą, jaką mogą zrobić niewolnicy, jest wskazanie panu, że niewolnik, którym pan jest zainteresowany, mógłby być gotowy do odpowiedzi.

  2. Wiele urządzeń może działać jednocześnie jako główne, jeśli wszystkie chcą wysyłać te same dane w tym samym czasie. Może to potencjalnie powodować problemy, jeśli np. dwa urządzenia żądają, aby urządzenie zwiększyło wartość licznika, a następnie jednocześnie żąda, aby urządzenie zmniejszyło jego wartość. Jeśli dwaj mistrzowie wyślą identyczne żądania bit po bicie, żaden z nich nie straci arbitrażu, a zatem każdy pomyśli, że jego żądanie zostało uwzględnione.

Większość systemów I2C zawiera tylko jedno urządzenie, które może kiedykolwiek działać jako urządzenie główne, ale protokół dopuszcza wiele urządzeń. O ile nie oczekuje się, że magistrala ma wiele modułów nadrzędnych, łatwiej jest zaimplementować urządzenie, które oczekuje, że będzie jedynym nadrzędnym, niż takie, które może współistnieć z innymi urządzeniami nadrzędnymi w magistrali.

Jak działa arbitraż autobusowy z I2C?Czy urządzenia peryferyjne I2C na MCU nie transmitują na ślepo bez nasłuchiwania kolizji?
@Navin: Każde urządzenie, które widzi opadającą krawędź na SCL, musi utrzymywać SCL nisko, dopóki nie określi, co, jeśli cokolwiek, musi zrobić z SDA, i za każdym razem, gdy master zwalnia SCL, musi czekać, aż faktycznie osiągnie wysoki poziom (wszyscy go wydali) przed kontynuowaniem.Jeśli dwóch masterów jednocześnie tworzy warunki początkowe, każdy może pomyśleć, że ma magistralę (którykolwiek z nich jest szybszy, będzie czekał, aż drugi zwolni SCL po każdym bicie), aż jeden spróbuje przesłać 1, a drugi 0, w którym to momencie 0wygrałby, a urządzenie, które próbowało przesłać 1, wypadłoby z autobusu.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...