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

[Avr][C] zewnętrzna pamięć SRAM szeregowa przez SPI, JAK?

Petros 19 Maj 2009 19:20 2255 4
REKLAMA
  • #1 6549878
    Petros
    Poziom 20  
    Witam

    posiadam bardzo ciekawe Pamięci SRAM SPI - 23k256
    chce do niej zapisać jakąś wartość a potem ją odczytać.
    Czytałem katalog pamięci i niestety cały czas odczytuje wartość 255
    Jak zaprogramować Atmege8 aby ta pamięć zadziałała?

    http://fribotte.free.fr/bdtech/Terminal/23A256.pdf
    napisałem coś takiego:
    
    
    
    void SPIInit(void)
    {
    /* Set MOSI and SCK output, all others input */
    DDRB |= (1<<PB3)|(1<<PB5);
    
    
    // włącz SPI, MASTER, zegar podziel przez 128
    SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); 
    }
    
    
    void SPIWyslij(void)
    {
    
    SPDR = 0b00000010;		// wysyłaj dane komenda
    
    while(!(SPSR & (1<<SPIF))) //czekaj
    ;
    
    SPDR = 0b00000000;			//adres pierwsza polowa
    
    while(!(SPSR & (1<<SPIF)))   //czekaj
    ;
    SPDR = 0b00000000;			//adres druga polowa
    
    while(!(SPSR & (1<<SPIF)))   //czekaj
    ;
    
    SPDR = 209;    //wyslij przykladaowa liczbe
    
    while(!(SPSR & (1<<SPIF)))
    ;
    }
    
    
    uint8_t SPICzytaj(void)
    {
    
    SPDR = 0b00000011;		// czytaj dane komenda
    
    while(!(SPSR & (1<<SPIF))) //czekaj
    ;
    
    SPDR = 0b00000000;			//adres pierwsza czesc
    
    while(!(SPSR & (1<<SPIF)))   //czekaj
    ;
    SPDR = 0b00000000;			//adres druga czesc
    
    while(!(SPSR & (1<<SPIF)))  //czekaj
    ;
    	
    
    return SPDR; // odczytaj wartosc !!
    }
    
    
    
    


    mam połączone SI z MOSI
    SO - MISO
    SCL - SCL
    CC w pamięci od masy
    HOLD do plusa
  • REKLAMA
  • Pomocny post
    #2 6550418
    hose2
    Poziom 17  
    Witam,

    To może ze strony 11 wzmiankowanego pdf-a:
    Cytat:
    "The 23X256 powers on in the following state:
    The device is in low-power Standby mode (/CS= 1)
    A high-to-low-level transition on CS is required to
    enter active state"

    Jeśli masz /CS cały czas do masy to warunek nie jest spełniony.
  • REKLAMA
  • Pomocny post
    #3 6550437
    michalko12
    Specjalista - Mikrokontrolery
    Przeczytaj dokladnie datasheeta i skup sie na obsłudze pinu CS

    Podpowiem jeszcze że CS musi być sterowany z procesora
  • REKLAMA
  • #4 6550558
    Petros
    Poziom 20  
    hose2 napisał:
    Witam,

    To może ze strony 11 wzmiankowanego pdf-a:
    Cytat:
    "The 23X256 powers on in the following state:
    The device is in low-power Standby mode (/CS= 1)
    A high-to-low-level transition on CS is required to
    enter active state"

    Jeśli masz /CS cały czas do masy to warunek nie jest spełniony.


    czyli jeśli mam pin /CS na stałe połązony z masą to nie zadziała nic?
    z cytatu wynika że /CS=1 powoduje tryb czuwania i aby go wyłączyć trzeba zmianić stan na 0.

    Trzeba przed wysłaniem instrukcji zminić stan /CS z 1 na 0?
    Można to robić za pomocą pinu /SS w ATmedze
  • Pomocny post
    #5 6550609
    michalko12
    Specjalista - Mikrokontrolery
    [quote="Petros"]
    hose2 napisał:

    Trzeba przed wysłaniem instrukcji zminić stan /CS z 1 na 0?
    Można to robić za pomocą pinu /SS w ATmedze


    SS służy do czego innego, w tym przypadku nie przydatny.
    Wszystkie dane należy wysyłać/odbierać przy niskim stanie CS,
    każda transmisja musi byc zakończona wysokim stanem CS
REKLAMA