ATMega8, SPI, AT45db041B
Masz problem? Zapytaj na forum elektroda.pl
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: ATMega8, SPI, AT45db041B
Date: Thu, 29 Apr 2004 00:35:29 +0200
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
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai
From: "Myler" <myler_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8, SPI, AT45db041B
Date: Thu, 29 Apr 2004 01:04:22 +0200
Chyba to nie będzie działać ;(
Użytkownik "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl> napisał w wiadomości
news:c6pbj6$7eb$1_at_nospam_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
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
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!not-for-mai
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ATMega8, SPI, AT45db041B
Date: Thu, 29 Apr 2004 17:12:18 +0200
Użytkownik "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl> napisał w wiadomości news:c6pbj6$7eb$1_at_nospam_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
--
Andrzej
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8, SPI, AT45db041B
Date: Thu, 29 Apr 2004 19:50:40 +0200
Użytkownik "Andy" <anokWYTNIJ_at_nospam_ceti.pl> napisał w wiadomości
news:c6r65s$kq2$1_at_nospam_srv.cyf-kr.edu.pl...
Użytkownik "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl> napisał w wiadomości
news:c6pbj6$7eb$1_at_nospam_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
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!not-for-mai
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ATMega8, SPI, AT45db041B
Date: Thu, 29 Apr 2004 20:13:52 +0200
Użytkownik "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl> napisał w wiadomości news:c6rf99$5dl$1_at_nospam_news.onet.pl...
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
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8, SPI, AT45db041B
Date: Sun, 2 May 2004 14:08:53 +0200
Ok juz wszystko dziala! Okazalo sie ze mialem zle podlaczony klucz
(zamienione MOSI z MISO)
Dzieki za pomoc
Krzysiek
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai