Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 gru 2024, o 10:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 6 gru 2024, o 21:22 
Offline
Nowy

Dołączył(a): 30 sie 2020
Posty: 4
Pomógł: 0

Witam wszystkich forumowiczów.
Próbuję zgłębić zasady komunikacji przez SPI i jedna rzecz nie daje mi spokoju. Z dokumentacji mikrokontrolera ATMega 328p (przeczytałem wiele razy)wynika że tylko master inicjuje transmisję i tylko w czasie transmisji do układu slave następuje transmisja zwrotna do układu master. Załóżmy że wysyłam bajt danych do slave który ma spowodować że slave ma odesłać jakieś dane w zalezności od tego co dostał. Ale skąd slave ma wiedzieć co dostanie skoro jeszcze tego nie dostał ? czy to oznacza że slave w czasie pierwszej transmisji odeśle jakieś przypadkowe dane. Na tym nie koniec , czy to oznacza również że aby otrzymać od slave odpowiedż w drugim kroku muszę wysłać do slave jakieś przypadkowe dane np same zera żeby uzyskać odpowiedż. Sprawa się komplikuje jeśli transmisja od mastera do slave to jeden bajt a slave ma odesłać 20 bajtów i żeby było ciekawiej nie wiadomo ile tych bajtów będzie. Będę wdzięczny za oświecenie mnie w tej materii. W bluebooku też na ten temat nic nie znalazłem.
Jeśli umieściłem ten post w niewłaściwym miejscu przepraszam i pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2024, o 00:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1032
Lokalizacja: Trójmiasto
Pomógł: 190

Aby zrozumieć zagadnienie komunikacji, obojętnie czy SPI czy innej, musisz zacząć odróżniać interfejs od protokołu.
Tak jak w komunikacji międzyludzkiej, możesz porozumiewać się np. w mowie lub w słowie pisanym - to są interfejsy, natomiast ludzkość porozumiewa się w różnych językach np. polskim, angielskim itd. - to są odpowiedniki protokołu. To tak obrazowo.
Interfejs SPI jest tylko układem do jednoczesnego, dwukierunkowego przesyłania 2 bajtów danych (po jednym bajcie w każdym kierunku), gdzie komunikacja jest 1 do 1 w trybie master-slave czyli jednocześnie mogą wymieniać dane 2 urządzenia, z czego zawsze jedno jest tym sterującym transmisją czyli masterem.
I teraz, gdy chcesz skomunikować 2 urządzenia, to Ty jako konstruktor/programista musisz opracować sposób porozumiewania się poprzez SPI (oczywiście jeśli jesteś twórcą tych urządzeń, bo jeśli nie, to jego twórca zapewne o to zadbał i opisał to w stosownym dokumencie datasheet).
A pomysłów na to jest wiele. Ale zasady są takie:
Jeśli master zagada do slava, a ten jeszcze nie wie co master od niego chce, to po prostu nic nie umieszcza w rejestrze danych i master zassie same zera, ale przecież nie musi tak być, bo np. możesz chcieć by np. slave odesłał np swój id, albo status, a gdy otrzyma już właściwe zapytanie, dopiero zestaw danych. A tu z kolei albo ustalasz, że ten zestaw zawiera zawsze np. 20 bajtów, wówczas master po nadaniu rozkazu, inicjuje 20 razy przesłanie bajta by odczytać całość (wówczas np. nadaje do slave same zera lub też inne informacje), lub ustalasz, że rozkaz zawiera informację ile bajtów ma odesłać slave, albo sam rozkaz determinuje długość odpowiedzi. Możesz też ustalić specyficzną wartość bajtu wysyłanego przez slave, która przez mastera będzie odbierana jako end of transmission.
Dodatkowo możesz też wybrać inny sposób komunikacji, master do mastera. Wówczas na obu urządzeniach ustawiasz tryb master z nasłuchem, a pin SS ustawiasz jako wejście. Dopóki SS jest w stanie wysokim master nasłuchuje, lub gdy ma potrzebę inicjuje transmisje wystawiając do drugiego mastera stan niski na SS, wówczas drugi master przestawia się w tryb slave.
Musisz jeszcze zapamiętać że:
- slave wymaga obsługi pinu SS, i nadzoruje go sprzętowo, czyli gdy na pinie stan wysoki, slave resetuje całą logikę SPI i czeka w uśpieniu, a gdy pojawi się stan niski to aktywuje SPI i odbiera/umieszcza dane w buforze w odpowiednich momentach determinowanych przez takty SCK.
- master w trybie master do slava, SS ustawione jako wyjście, które sprzętowo NIE jest obsługiwane przez moduł SPI, jak coś chcesz nadać, sam musisz zadbać by ten pin ustawić na stan niski, a na koniec wysoki.
- master do mastera, pin SS ustawiony jako wejście, trzeba je "ręcznie" przestawić na wyjście w stanie niskim do nadawania.
- w trybie master do mastera, gdy na masterze zostanie wymuszony odbiór danych w trybie slave (czyli na jego wejściu SS pojawi się stan niski) taki master automatycznie przestawia się w tryb slave, po zakończeniu wymiany danych trzeba "ręcznie" przestawić go ponownie w tryb master.
- jeśli masz mastera i kilka slavów, master musi mieć osobne wyjście SS dla każdego ze slavów. Jako że tryb master do slava sprzętowo nie obsługuje SS, to tym pinem może być każdy sterowalny pin uC, czyli programista/konstruktor ustala sobie ilość pinów jako SS, tożsamą z ilością układów slave, każdy ustawiony jako wyjście w stanie wysokim, wszystkie slavy połączone równolegle liniami SCK, MOSI, MISO, plus każdy ma osobną linię SS. Na masterze wybierasz z którym slavem chcesz gadać, poprzez ustawienie właściwego pinu SS na stan niski.

To tyle, napisane tak na szybko, mam nadzieję że zrozumiale.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2024, o 13:20 
Offline
Nowy

Dołączył(a): 30 sie 2020
Posty: 4
Pomógł: 0

Dzięki Xentis
Tak to właśnie sobie mniej więcej wyobrazałem ale potrzebowałem potwieredzenia. Teraz muszę sobie to wydrukować i jeszcze kilka razy przeczytać żeby wszystko dobrze zrozumieć i zapamiętać a potem napisać jakiś testowy program z wykorzystaniem tej wiedzy. Jeszcze raz dziękuję . Życzę miłego weekendu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO