RTV forum PL | NewsGroups PL

Problemy z obsługą pamięci Flash AT45db041B przez SPI w asemblerze na ATMega8

ATMega8, SPI, AT45db041B

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z obsługą pamięci Flash AT45db041B przez SPI w asemblerze na ATMega8

Krzy$
Guest

Wed Apr 28, 2004 9:35 pm   



Czesc!
Mam problem z obsługa zewnetrznej pamieci Flash przez ATMega8 za pomocą SPI.
Programik napisalem w asemblerze. A wyglada mniej wiecej tak:
........
ldi r17,(1<<spe)|(1<<mstr)|(1<<spr0)
out spcr,r17 ;wlaczenie SPI
cbi portd,cs ; cs=0
ldi dana,0x84 ;kod zapisu do bufora1
rcall transpi ;wyslij przez spi
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nieznaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres pod ktorym ma
rozpoczac zapis
rcall transpi ;wyslij
ldi dana,0x41 ;przykladowa dana
ktora chce zapisac
rcall transpi ;wyslij
ldi dana,0x12 ;kolejna przykladowa
dana
rcall transpi ;wyslij
sbi portd,cs ;cs=1
clr r17
out spcr,r17 ; wylacz SPI

transpi:
out spdr,dana
wait:
sbis spsr,spif
rjmp wait
ret
....
....
ldi r17,0x5c
out spcr,r20 ;wlacz spi
cbi portd,cs ;cs=0
ldi dana,0x54 ;instrukcja odczytu bufora1
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres od ktorego zaczynam czytac bufor
rcall transpi
ldi dana,0x00 ;wysylam kolejny nie znaczacy bajt
rcall transpi
in spdr,r20
i w tym momencie w rejestrze r20 powinna sie pojawic dana z pod adresu 0x00
? Czy moze powinienem w tym momencie zmienic ustawienia w rejestrze spcr na
Slave i dopiero ??:

odb:
in spdr,r20
sbis spsr,spif
rjmp odb



Prosilbym o pomoc bo jakos nie moge sobie z tym dac rady caly czas odczytuje
niby dane FF niezaleznie od tego co zapisze
(SS w ATmega mam ustawione jako wyjscie i jest w stanie wysokim)

Dzieki za pomoc
Krzysiek

Myler
Guest

Wed Apr 28, 2004 10:04 pm   



Chyba to nie będzie działać ;(



Użytkownik "Krzy$" <kchrisk1@poczta.onet.pl> napisał w wiadomości
news:c6pbj6$7eb$1@news.onet.pl...
Quote:
Czesc!
Mam problem z obsługa zewnetrznej pamieci Flash przez ATMega8 za pomocą
SPI.
Programik napisalem w asemblerze. A wyglada mniej wiecej tak:
.......
ldi r17,(1<<spe)|(1<<mstr)|(1<<spr0)
out spcr,r17 ;wlaczenie SPI
cbi portd,cs ; cs=0
ldi dana,0x84 ;kod zapisu do bufora1
rcall transpi ;wyslij przez spi
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nieznaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres pod ktorym ma
rozpoczac zapis
rcall transpi ;wyslij
ldi dana,0x41 ;przykladowa dana
ktora chce zapisac
rcall transpi ;wyslij
ldi dana,0x12 ;kolejna przykladowa
dana
rcall transpi ;wyslij
sbi portd,cs ;cs=1
clr r17
out spcr,r17 ; wylacz SPI

transpi:
out spdr,dana
wait:
sbis spsr,spif
rjmp wait
ret
...
...
ldi r17,0x5c
out spcr,r20 ;wlacz spi
cbi portd,cs ;cs=0
ldi dana,0x54 ;instrukcja odczytu bufora1
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres od ktorego zaczynam czytac bufor
rcall transpi
ldi dana,0x00 ;wysylam kolejny nie znaczacy bajt
rcall transpi
in spdr,r20
i w tym momencie w rejestrze r20 powinna sie pojawic dana z pod adresu
0x00
? Czy moze powinienem w tym momencie zmienic ustawienia w rejestrze spcr
na
Slave i dopiero ??:

odb:
in spdr,r20
sbis spsr,spif
rjmp odb



Prosilbym o pomoc bo jakos nie moge sobie z tym dac rady caly czas
odczytuje
niby dane FF niezaleznie od tego co zapisze
(SS w ATmega mam ustawione jako wyjscie i jest w stanie wysokim)

Dzieki za pomoc
Krzysiek




Andy
Guest

Thu Apr 29, 2004 2:12 pm   



Użytkownik "Krzy$" <kchrisk1@poczta.onet.pl> napisał w wiadomości news:c6pbj6$7eb$1@news.onet.pl...
Quote:
Czesc!
Mam problem z obsługa zewnetrznej pamieci Flash przez ATMega8 za pomocą SPI.
Programik napisalem w asemblerze. A wyglada mniej wiecej tak:
.......
ldi r17,(1<<spe)|(1<<mstr)|(1<<spr0)
out spcr,r17 ;wlaczenie SPI
cbi portd,cs ; cs=0
ldi dana,0x84 ;kod zapisu do bufora1
rcall transpi ;wyslij przez spi
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nieznaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres pod ktorym ma
rozpoczac zapis
rcall transpi ;wyslij
ldi dana,0x41 ;przykladowa dana
ktora chce zapisac
rcall transpi ;wyslij
ldi dana,0x12 ;kolejna przykladowa
dana
rcall transpi ;wyslij
sbi portd,cs ;cs=1
clr r17
out spcr,r17 ; wylacz SPI

transpi:
out spdr,dana
wait:
sbis spsr,spif
rjmp wait
ret
...
...
ldi r17,0x5c
out spcr,r20 ;wlacz spi


a co masz w r20 ? moze mialo byc r17


Quote:
cbi portd,cs ;cs=0
ldi dana,0x54 ;instrukcja odczytu bufora1

sprobuj ewentualnie 0xD4 zamiast 0x54

Quote:
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres od ktorego zaczynam czytac bufor
rcall transpi
ldi dana,0x00 ;wysylam kolejny nie znaczacy bajt
rcall transpi

tu jeszcze jeden nieznaczacy bajt !

Quote:
in spdr,r20
i w tym momencie w rejestrze r20 powinna sie pojawic dana z pod adresu 0x00
? Czy moze powinienem w tym momencie zmienic ustawienia w rejestrze spcr na
Slave i dopiero ??:

odb:
in spdr,r20
sbis spsr,spif
rjmp odb

...


nie musisz ciagle mieszac tym SPCR'em
wystarczy, ze raz go ustawisz
no chyba, ze masz cos jeszcze podpiete pod spi

jesli masz tylko procek i flasha
to procek ma byc caly czas master

--
Andrzej

Krzy$
Guest

Thu Apr 29, 2004 4:50 pm   



Użytkownik "Andy" <anokWYTNIJ@ceti.pl> napisał w wiadomości
news:c6r65s$kq2$1@srv.cyf-kr.edu.pl...
Quote:
Użytkownik "Krzy$" <kchrisk1@poczta.onet.pl> napisał w wiadomości
news:c6pbj6$7eb$1@news.onet.pl...
Czesc!
Mam problem z obsługa zewnetrznej pamieci Flash przez ATMega8 za pomocą
SPI.
Programik napisalem w asemblerze. A wyglada mniej wiecej tak:
.......
ldi r17,(1<<spe)|(1<<mstr)|(1<<spr0)
out spcr,r17 ;wlaczenie SPI
cbi portd,cs ; cs=0
ldi dana,0x84 ;kod zapisu do
bufora1
rcall transpi ;wyslij przez
spi
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nieznaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres pod ktorym
ma
rozpoczac zapis
rcall transpi ;wyslij
ldi dana,0x41 ;przykladowa dana
ktora chce zapisac
rcall transpi ;wyslij
ldi dana,0x12 ;kolejna
przykladowa
dana
rcall transpi ;wyslij
sbi portd,cs ;cs=1
clr r17
out spcr,r17 ; wylacz SPI

transpi:
out spdr,dana
wait:
sbis spsr,spif
rjmp wait
ret
...
...
ldi r17,0x5c
out spcr,r20 ;wlacz spi


a co masz w r20 ? moze mialo byc r17


cbi portd,cs ;cs=0
ldi dana,0x54 ;instrukcja odczytu bufora1

sprobuj ewentualnie 0xD4 zamiast 0x54

rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;nie znaczacy bajt
rcall transpi ;wyslij
ldi dana,0x00 ;adres od ktorego zaczynam czytac
bufor
rcall transpi
ldi dana,0x00 ;wysylam kolejny nie znaczacy bajt
rcall transpi

tu jeszcze jeden nieznaczacy bajt !

in spdr,r20
i w tym momencie w rejestrze r20 powinna sie pojawic dana z pod adresu
0x00
? Czy moze powinienem w tym momencie zmienic ustawienia w rejestrze spcr
na
Slave i dopiero ??:

odb:
in spdr,r20
sbis spsr,spif
rjmp odb

...


nie musisz ciagle mieszac tym SPCR'em
wystarczy, ze raz go ustawisz
no chyba, ze masz cos jeszcze podpiete pod spi

jesli masz tylko procek i flasha
to procek ma byc caly czas master

Wykorzystuje tylko procek i zewnetrznego flasha. Niestety nadal nie dziala!!
Chcialbym wogole sprawdzic czy dziala samo SPI i postanowilem sprawdzic
rejestr statutowy (bo to chyba najprosciej-nie trzeba adresowac tylko jedna
instrukcja)

Zrobilem to tak:
....
ldi r17,(1<<spe)|(1<<mstr)|(1<<spr0)
out spcr,r17
cbi portd,cs
ldi dana,0x57 ;adres rejestru statusu
rcall transpi ;wyslij
ldi dana,0xff ;nieznaczacy bajt
rcall transpi ;wyslij
in dana1,spdr ;laduj odebrany bajt do dana1
sbi portd,cs
rcall wyswietl ;wyrzuc na wyswietlacz
....
Z pdfa wynika ze powinienem otrzymac : MSB-> 100111XX a ja otrzymuje
caly czas FF nie wiem co jest grane, co jest z tym SPI moze w zlym momencie
odczytuje SPDR??? Nie wiem czy to ma jakies znaczenie ale pin SS mam
ustawiony jako wyjscie i go nie uzywam (caly czas jest w stanie 1)
prosze o pomoc bo juz nie mam sil do tego SPI

Dzieki
Krzysiek

Andy
Guest

Thu Apr 29, 2004 5:13 pm   



Użytkownik "Krzy$" <kchrisk1@poczta.onet.pl> napisał w wiadomości news:c6rf99$5dl$1@news.onet.pl...
Quote:

Wykorzystuje tylko procek i zewnetrznego flasha. Niestety nadal nie dziala!!
Chcialbym wogole sprawdzic czy dziala samo SPI i postanowilem sprawdzic
rejestr statutowy (bo to chyba najprosciej-nie trzeba adresowac tylko jedna
instrukcja)

...

sprawdz najpierw samo SPI bez flasha

zewrzyj po stronie procka MOSI z MISO i wyslij 1 bajt np AA
po czym odczytaj stan z SPDR

powinno wrocic to samo czyli AA

nastepnie sprawdz czy sie nie rabnales w podlaczeniach

procek / flash

MOSI -> SI
MISO <- SO
SCK -> SCK
CS -> CS

nastepnie sprawdz czy ustawiles jako wyjscia w rejestrze DDRB
pin SCK oraz MOSI oraz SS

/* w C */
DDRB |= BV(DD_MOSI) | BV(DD_SCK) | BV(DD_SS);

--
Andrzej

Krzy$
Guest

Sun May 02, 2004 11:08 am   



Ok juz wszystko dziala! Okazalo sie ze mialem zle podlaczony klucz
(zamienione MOSI z MISO)
Dzieki za pomoc
Krzysiek

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z obsługą pamięci Flash AT45db041B przez SPI w asemblerze na ATMega8

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map