Witam,
Mam problem ze skomunikowaniem się z pamięcią AT25F2048 używającej interfejsu SPI. Stosuje interfejs SPI programowy.
- Zasilanie mam 3,3V wspólne dla pamięci i procesora, wszystko jest porządnie wyfiltrowane (osobno na procku i pamieci).
- Pamiec jest podlaczona bezposrednio do pinow procesora. Piny te nie sa uzywane do niczego innego. Linia SCK ma zapiety opornik 47k do masy.
Docelowo do pamięci chciałbym zapisywać ciąg liczb a następnie odczytywać je wszystkie po kolei. Na początek chciałem zapisać cokolwiek a następnie dla sprzwdzenia to odczytać - problem w tym, że odczytuję cały czas liczbę zero.
Fragment kodu:
Podprogram 'Mruganie' wykonuje blyski za pomoca LED x(Liczba+1). W ten sposób widzę jaką wartość ma Liczba. Widzę sekwencje:
x3 , x1 , x3 , x1 ...itd
Czyli zmienna Liczba po odczycie z pamieci ma zawsze wartosc zero.
Czyli na pewno coś robię nie tak. Jeśli ktoś wie co to proszę o pomoc, bo nie bardzo wiem gdzie szukac.
Aha -mam do dyspozycji oscyloskop analogowy, sprawdzilem, ze w momencie kiedy jest zapis/odczyt do pamieci na jej liniach cos sie dzieje, wiec pamiec (chyba) cos tam robi...
Z gory dzieki za udzial w dyskusji.
Dodano po 4 [godziny] 8 [minuty]:
Poczytałem trochę notę katalogową tej pamięci i widzę, że trzeba inaczej podejść do tematu. Przede wszystkim z noty katalogowej wynika, że z pamiecia trzeba sie komunikowac przez wyslanie odpowiedniej instrukcji a wtedy pamiec zwraca liczbe. W BASCOM, o ile sie nie myle, dokladnie to co trzeba powinna robic instrukcja Spimove.
W nocie katalogowej jest lista dostepnych instrukcji wraz z kodami. Powiedzmy ze chce wyslac instrukcje "Read Manufacturer and Product ID" i zobaczyc co dostane w odpowiedzi. Jej kod to 0001X101, gdzie X to cokolwiek. Jesli wszystko zadziala tak jak trzeba to powinienem dostac w odpowiedzi 2 bajty: 1FH oraz 63H.
Zrobiłem tak:
Podprogramik 'Mruganie' przerobiłem tak, ze teraz pokazuje kolejne bity zmiennej 'Liczba'. Niestety zmienna 'Liczba' zawiera same zera... Czy ktoś ma jakieś sugestie??
Mam problem ze skomunikowaniem się z pamięcią AT25F2048 używającej interfejsu SPI. Stosuje interfejs SPI programowy.
- Zasilanie mam 3,3V wspólne dla pamięci i procesora, wszystko jest porządnie wyfiltrowane (osobno na procku i pamieci).
- Pamiec jest podlaczona bezposrednio do pinow procesora. Piny te nie sa uzywane do niczego innego. Linia SCK ma zapiety opornik 47k do masy.
Docelowo do pamięci chciałbym zapisywać ciąg liczb a następnie odczytywać je wszystkie po kolei. Na początek chciałem zapisać cokolwiek a następnie dla sprzwdzenia to odczytać - problem w tym, że odczytuję cały czas liczbę zero.
Fragment kodu:
$regfile = "m48def.dat"
$crystal = 8000000
$noramclear
'--------- LINIE SPI -------------
Config Pind.2 = Output ' CS/
Cs Alias Portd.2
Config Pind.1 = Output ' SO
Config Pinc.5 = Input ' SI
Config Pinc.4 = Output ' SCK
Config Pinc.3 = Output ' HOLD/
Hold Alias Portc.3
Config Pind.0 = Output ' WP/
Wp Alias Portd.0
Set Hold 'stan H - normalnie
Set Wp 'stan H - bez blokady
'-----------------------------------
'... zmienne
'-----------------------------------
Config Spi = Soft , Din = Portc.5 , Dout = Portd.1 , Ss = Portd.2 , Clock = Portc.4
Spiinit
'-----------------------------------
Do
Liczba=2
Gosub Mruganie
A = 5
Spiout A , 1
Spiin Liczba , 1
Gosub Mruganie
Loop
End
Podprogram 'Mruganie' wykonuje blyski za pomoca LED x(Liczba+1). W ten sposób widzę jaką wartość ma Liczba. Widzę sekwencje:
x3 , x1 , x3 , x1 ...itd
Czyli zmienna Liczba po odczycie z pamieci ma zawsze wartosc zero.
Czyli na pewno coś robię nie tak. Jeśli ktoś wie co to proszę o pomoc, bo nie bardzo wiem gdzie szukac.
Aha -mam do dyspozycji oscyloskop analogowy, sprawdzilem, ze w momencie kiedy jest zapis/odczyt do pamieci na jej liniach cos sie dzieje, wiec pamiec (chyba) cos tam robi...
Z gory dzieki za udzial w dyskusji.
Dodano po 4 [godziny] 8 [minuty]:
Poczytałem trochę notę katalogową tej pamięci i widzę, że trzeba inaczej podejść do tematu. Przede wszystkim z noty katalogowej wynika, że z pamiecia trzeba sie komunikowac przez wyslanie odpowiedniej instrukcji a wtedy pamiec zwraca liczbe. W BASCOM, o ile sie nie myle, dokladnie to co trzeba powinna robic instrukcja Spimove.
W nocie katalogowej jest lista dostepnych instrukcji wraz z kodami. Powiedzmy ze chce wyslac instrukcje "Read Manufacturer and Product ID" i zobaczyc co dostane w odpowiedzi. Jej kod to 0001X101, gdzie X to cokolwiek. Jesli wszystko zadziala tak jak trzeba to powinienem dostac w odpowiedzi 2 bajty: 1FH oraz 63H.
Zrobiłem tak:
Const Rdid = &B00011101
Instrukcja = Rdid
Liczba = Spimove(instrukcja)
Gosub Mruganie
Podprogramik 'Mruganie' przerobiłem tak, ze teraz pokazuje kolejne bity zmiennej 'Liczba'. Niestety zmienna 'Liczba' zawiera same zera... Czy ktoś ma jakieś sugestie??
