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

[Atmega128][Dataflash] nie czyta z SPI (MMnet01)

mutexxx 17 Cze 2010 15:31 1356 5
REKLAMA
  • #1 8200105
    mutexxx
    Poziom 10  
    Witam,

    Mam problem i brak mi już pomysłów żeby go rozwiązać. Otóż, mam do Atmegi128 podłączoną pamięć DataFlash AT45DB041D, któŸa jest połączona w taki sposób (układ MMnet01):

    [Atmega128][Dataflash] nie czyta z SPI (MMnet01)

    SPI inicjalizuję w taki sposób:
    void spi_init(void)
    {
    	DDRB |= ( 1 << PB1 );  //SCK
    	DDRB |= ( 1 << PB2 );  //SI
    	DDRB |= ( 1 << PB5 );  //CS
    
    	SPCR = ( 1 << SPE ) | ( 1 << MSTR );
       SPSR = 0;
    
    }


    i próbuję odczytać status pamięci:

    spi_init();
    unsigned char status;
    
    PORTB &= ~( 1 << PB5 ); //CS ON
    
    //wysłanie
    SPDR = 0xd7;	
    while(!(SPSR & (1 << SPIF)));
    
    //odbiór
    SPDR = 0;	
    while(!(SPSR & (1 << SPIF)));  //<------ tutaj zatrzymuje sie program
    status = SPDR;
    
    PORTB |= ( 1 << PB5 ); //CS OFF 


    i nie wiem dlaczego w pętli while odczytującej, program się zatrzymuje, tzn nie chce wyjść z pętli.
    Próbowałem zainicjalizować SPI na wszystkie 8 częstotliwości, na wszystkich to samo.
    Proszę o pomoc.
  • REKLAMA
  • REKLAMA
  • #3 8200182
    mutexxx
    Poziom 10  
    Dzięki, ale nic się nie zmienia. pętla się kręci w kółko.
  • REKLAMA
  • REKLAMA
  • #5 8200563
    szelus
    Poziom 34  
    :arrow:mutexxx
    A co z PB0 tj. sygnałem SS? Nie widzę, żebyś konfigurował go jako wyjście. Jako wejście, będzie przełączał SPI w tryb slave, jeżeli będzie w stanie niskim. Gdzie masz go podłączonego? Poczytaj o trybie Master w rozdziale o SPI.
  • #6 8200615
    mutexxx
    Poziom 10  
    Tak, właśnie to nie dawało mi spokoju, dlaczego ten SS jest niewykorzystany, teraz działa, pamięć ładnie zapisuje i odczytuje.

    Dzięki serdeczne !!!!!!!!!!!
REKLAMA