logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega16 – jak podłączyć kilka urządzeń SPI (np. karta SD) na wspólnej magistrali?

smyku22 21 Gru 2007 08:06 6448 11
  • #1 4609705
    smyku22
    Poziom 16  
    Posty: 252
    Pomógł: 7
    Ocena: 9
    Witam.
    Mam pytanie natury zasadniczej. Mianowicie czy do uC (np. ATmega16) można podłączyć równolegle kilka urządzeń (np. Kartę SD i coś jeszcze). Oczywiście wyjście CS (czy CC jak ktoś woli) będzie osobne dla każdego urządzenia, a MOSI, MISO i SCK wspólne. Chodzi mi o to czy się nie będą gryzły bo z tego co mi wiadomo to wyjść urządzeń nie powinno się łączyć ze sobą. Wiem że na dowolnych nogach mikroprocka można sobie programowo zrobić SPI ale wykorzystanie istniejącego wyrzeźbionego w krzemie przez Atmela było by łatwiejsze. Robił ktoś kiedyś podobne eksperymenty?

    Pozdrawiam i czekam na odpowiedź.
  • #2 4609744
    Koriel
    Poziom 13  
    Posty: 113
    Pomógł: 4
    Ocena: 3
    Właśnie po to masz wejście CS w urządzeniach SPI żeby móc podłączyć równolegle kilka urządzeń.
    Nieaktywne urządzenia ustawiają wyjścia w stan wysokiej impedancji żeby nie gryzły się z aktywnym urządzeniem.
  • #3 4609763
    mieczotronix
    Poziom 16  
    Posty: 163
    Pomógł: 12
    Ocena: 4
    SPI to się chyba łączy szeregowo
    ... MOSI ) -> [MISO MOSI] -> [MISO MOSI] -> [MISO ...
  • #4 4609817
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    Podejrzewam ze połączenie SPI szeregowo działało by dosyć ciekawe tzn. tylko pierwsze urządzenie otrzyma prawidłowe dane a kolejne otrzymają odpowiedz z poprzedniego.
    Pozdrawiam
    Irek
  • #5 4609826
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Witaj
    jeśli ustawiasz zbiór I/O jako port komunikacyjny, to musisz sie martwić tylko propagacją sygnału, czyli jaśniej mówiąc pojemnościami przewodów doń podłączonych. CS jest właśnie do ignorowania wszystkiego jeśli jest w stanie niskim (czy też wysokim) To nie jest łącze szeregowe tak jak RS232 (tx, rx) tylko równoległe, tak jak i2c i możesz połączyć parę urządzeń do jednej magistrali
    Pozdrawiam
  • #6 4609955
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    szaro napisał:
    Podejrzewam ze połączenie SPI szeregowo działało by dosyć ciekawe tzn. tylko pierwsze urządzenie otrzyma prawidłowe dane a kolejne otrzymają odpowiedz z poprzedniego.
    Pozdrawiam
    Irek


    Połączenie w ring i wędrujący MASTER :?: Super. Trzeba by tylko napisać soft, który by zapanował nad tym krążącym strumieniem danych i wyciągał stosowne pakiety w odpowiednim miejscu ;) Już sobie wyobraziłem programistę z potarganym włosiem, który wyłapuje te bajty w biegu. Normalnie siatka na moty... , sorry na dane.

    Ch.M. napisał:
    To nie jest łącze szeregowe tak jak RS232 (tx, rx) tylko równoległe, tak jak i2c i możesz połączyć parę urządzeń do jednej magistrali
    W powszechnie obowiązującej nomenklaturze łącze po którym dane transmitowane są jedną linią bit po bicie nosi nazwę interfejsu czy łącza szeregowego i możliwość podłączenia równolegle kilku urządzeń nie ma nic do rzeczy.

    SPI=Serial Peripheral Interface

    http://en.wikipedia.org/wiki/Serial_interface
  • #7 4610374
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    Chyba zostałem źle zrozumiany ciekawie maiło być w cudzysłowiu chodziło mi o to ze tak nie będzie działać .
    Pozdrawiam
  • #8 4610417
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Jak najbardziej się rozumiemy. To było do kolegi, który zapodał taki projekt, ale bardziej mi pasowało zacytowanie Twojego postu. Sorry

    Wszystkim kolegom "cyfrowco mikrokomputerowcom" zdrowych, wesołych i pomyślniego nowego roku z wysypem miliarda bajtów.

    ATmega16 – jak podłączyć kilka urządzeń SPI (np. karta SD) na wspólnej magistrali?
  • #9 4611175
    deLux
    Poziom 12  
    Posty: 26
    Ocena: 4
    smyku22, dobrze piszesz tak można zrobić. pamiętaj żeby tylko jeden CS był aktywny - urządzenia pracujące na SPI odłączają wyjścia jeśli CS jest nieaktywne.
  • #10 4611588
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 569
    Spi pracuje tak że mozna podpinać prawie dowolna ilość urządzeń wybranie układu następuje przez odpowiedni stan na końcówce danego układu o nazwie CS inne układy ktore nie są aktywne i ich wyprowadzenia są w stanie wysokiej impedancji (czyt. w powietrzu) Taki stan nie obciąża magistrali co pozwala na znacznie szybszą transmisję niż w przypadku I2C której szyna działa w trybie OC .
  • #11 4611669
    smyku22
    Poziom 16  
    Posty: 252
    Pomógł: 7
    Ocena: 9
    I2C ma tą przewagę nad SPI że wystarczą dwa przewody i można podpiąć tyle odbiorników ile jest adresów a przy SPI przewodów jest generalnie 4 + 1 na każde nowe urządzenie.

    Dziękuje wszystkim za pomoc moje wątpliwości zostały ostatecznie rozwiane.
  • #12 4611680
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 569
    tyle ze i2c jest wolniejsze od spi nowe układy spi jedno kosztem drugiego więcej wyprowadzeń szybsza magistrala mniej wyprowadzeń wolniej bo więcej trzeba wyslać o wywołanie układu na i2c

Podsumowanie tematu

✨ Do mikrokontrolera ATmega16 można podłączyć równolegle kilka urządzeń SPI, takich jak karta SD i inne, korzystając ze wspólnej magistrali sygnałów MOSI, MISO i SCK oraz osobnych linii CS (Chip Select) dla każdego urządzenia. Linia CS służy do wyboru aktywnego urządzenia, a nieaktywne układy SPI ustawiają swoje wyjścia w stan wysokiej impedancji, co zapobiega konfliktom na magistrali. SPI jest interfejsem szeregowym, ale umożliwia podłączenie wielu urządzeń równolegle poprzez indywidualne sterowanie liniami CS. W praktyce ważne jest, aby tylko jedno urządzenie miało aktywny CS w danym momencie. W porównaniu do I2C, SPI wymaga więcej przewodów (4 podstawowe plus dodatkowe CS dla każdego urządzenia), ale oferuje szybszą transmisję dzięki wyjściom w stanie wysokiej impedancji i braku rezystorów podciągających jak w I2C. I2C natomiast pozwala na podłączenie wielu urządzeń na dwóch liniach dzięki adresacji, ale działa wolniej. Podsumowując, równoległe podłączenie wielu urządzeń SPI do ATmega16 jest standardową i poprawną praktyką, pod warunkiem prawidłowego zarządzania liniami CS.
Wygenerowane przez model językowy.
REKLAMA