Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega, SPI w trybie master i pin SS jako wyjście

al555 23 Cze 2007 01:08 4495 6
  • #1 23 Cze 2007 01:08
    al555
    Poziom 20  

    Czy ktoś miał problem z działaniem SPI w ATmega ( ja używam ATmega32) w trybie Master, gdy pin SS ustawiony jako wyjście w stanie 0.

    W dokumentacji pisze że jeśli pin SS w trybie MASTER jest ustawiony jako wyjście to nie ma to wpływu na interfejs SPI. Należy także uważać gdy pin SS ustawimy jako wejście a zewnętrzny układ ustawi stan tego wejścia na 0 - wtedy interfejs sam zmieni tryb z MASTER na SLAVE.

    Problem mój polega na tym że gdy ustawie pin SS jako wyjście w stanie 0

    Code:
    DDRB |=  (1<<PB4);   PORTB &= ~(1<<PB4);

    to wygląda że interfejs nie działa prawidłowo.

    Ktoś spotkał się z takim lub podobnym problemem ?

    Liczę na uwagi ...

    0 6
  • #2 23 Cze 2007 01:28
    szymtro
    Poziom 30  

    Dokumentacja rzeczywiście tak twierdzi ale ktoś kiedyś podawał linka do tekstu gdzie jednak było napisane że to nie działa właśnie - to chyba była jakaś errata.
    W sumie jak sie walnęli w układzie i pociągnęli ścieżki nie z tego miejsca to taki może być efekt.
    Ja na wszelki wypadek w projekcie zmieniłem nogi żeby nie było takiego problemu.

    0
  • #3 23 Cze 2007 12:25
    pubus
    Poziom 30  

    W ATmega128 i AT90USB1287 ustawiałem tak SPI i działa mi bez problemowo...
    Ale może to być wyjątek potwierdzający regułę...

    0
  • #4 24 Cze 2007 19:50
    al555
    Poziom 20  

    szymtro napisał:
    Dokumentacja rzeczywiście tak twierdzi ale ktoś kiedyś podawał linka do tekstu gdzie jednak było napisane że to nie działa właśnie - to chyba była jakaś errata.
    W sumie jak sie walnęli w układzie i pociągnęli ścieżki nie z tego miejsca to taki może być efekt.




    Spróbuj namierzyć tą errate - bo mi sie nie udało nic takiego znaleźć.

    0
  • #5 25 Cze 2007 21:42
    szymtro
    Poziom 30  

    dokumentacja atmega8, 2486L–AVR–10/03, strona 126 mniej więcej po środku

    Cytat:
    If SS is configured as an input, it must be held high to ensure Master SPI operation. If
    the SS pin is driven low by peripheral circuitry when the SPI is configured as a Master
    with the SS pin defined as an input, the SPI system interprets this as another Master
    selecting the SPI as a Slave and starting to send data to it. To avoid bus contention, the
    SPI system takes the following actions:
    1. The MSTR bit in SPCR is cleared and the SPI system becomes a Slave. As a
    result of the SPI becoming a Slave, the MOSI and SCK pins become inputs.
    2. The SPIF Flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in
    SREG is set, the interrupt routine will be executed.
    Thus, when interrupt-driven SPI transmission is used in Master mode, and there exists a
    possibility that SS is driven low, the interrupt should always check that the MSTR bit is
    still set. If the MSTR bit has been cleared by a Slave Select, it must be set by the user to
    re-enable SPI Master mode.

    Ale z tego jasno dalej nie mogę zrozumieć czy aby na pewno gdy jest jako wyjście to nie zakłóca pracy spi jako master. Z jakiegoś powodu zmieniłem na swojej płytce też właśnie ss na jakiś inny pin. I mam dziwne uczucie że na forum też coś takiego już było.

    0
  • #6 25 Cze 2007 22:17
    al555
    Poziom 20  

    Masz wprawdzie jakąś starą dokumentację ale zapewne zaraz powyżej tekstu który przytoczyłeś jest taki tekst:

    Cytat:

    If SS is configured as an output, the pin is a general output pin which does not affect the
    SPI system. Typically, the pin will be driving the SS pin of the SPI Slave.


    co oznacza ze wyjście SS ustawione jako wyjście nie powinno mieć wpływu na działanie SPI.

    0
  • #7 23 Gru 2010 01:38
    marek.kabala
    Poziom 1  

    Nie bez znaczenia jest kolejność inicjalizowanych rejestrów. Jeżeli najpierw zostanie skonfiguroany SPI jako master, a potem port jako wyjście, to w międzyczasie może przełączyć się na slave. Jeżeli inicjalizacja SPI/master zostanie wykonana po konfiguracji linii SS jako wyjścia, to wszystko działa ok :D

    0