Próbuję uruchomić Data-Flash AT45DB041B pod Basomem, niestety nic nie chce działać.
Na podstawie materiałow znalezionych w sieci poskładałem taki program:
Kod: Zaznacz cały
$crystal = 14745900
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Pinb.0 = Output
Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = None , Clock = Portb.1 'konfiguracja interfejsu SPI
Declare Sub Zap_eeprom(byval Adres As Long , Byval Dana As Byte) 'procedura zapisu danej do pamieci
Declare Sub Odc_eeprom(byval Adres As Long , Dana As Byte) 'procedura odczytu danej z pamieci
Dim Adres As Long 'zmienna adresu komorki pamieci
Dim Dana As Byte 'zmienna zmienna na odczytana lub zapisana dana do pamieci
Dim I As Long 'zmienna licznikowa
Dim Temp As Byte 'zmienna pomocnicza
Dim Temp1 As Byte 'zmienna pomocnicza
Dim Temp2 As Byte 'zmienna pomocnicza
Dim Temp3 As Byte 'zmienna pomocnicza
Dim Zm_pom As Word 'zmienna pomocnicza
Dim Temp4 As Long 'zmienna pomocnicza
Dim J As Byte 'zmienna licznikowa
Dim Adres2 As Long
Dim Danemoje As Byte
Dim Danemoje2 As Byte
Sck Alias Portb.1
Cs Alias Portb.0
Danemoje2 = 0
Do
Spiinit 'inicjacja interfejsu SPI
Set Cs 'ustawienie linii Cs
Reset Sck
Waitms 200
Adres2 = 1000
Danemoje = 123 'zerowanie linii Sck
Call Zap_eeprom(adres2 , Danemoje)
Wait 2
Call Odc_eeprom(adres2 , Dana)
Lcd Dana
Wait 2
Cls 'koniec programu
Loop
Sub Zap_eeprom(byval Adres As Long , Byval Dana As Byte) 'procedura zapisu danej do EEPROM
Temp4 = Adres / 264 'obliczenie adresu strony
Zm_pom = Temp4 'przepisanie adresu strony
Temp1 = 0 'wyzerowanie Temp1
Temp1.1 = Zm_pom.8 'zapis do bitu 1 zmiennej Temp1 bitu 8 zmiennej Zm_pom
Temp1.0 = Zm_pom.7 'zapis do bitu 0 zmiennej Temp1 bitu 7 zmiennej Zm_pom
Adres = Adres Mod 264 'obliczenie adresu w stronie
Shift Zm_pom , Left , 1 'przesuniecie wartosci w zm_pom o jedna pozycje w lewo (mnozenie przez 2)
Temp2 = Low(zm_pom) 'przepisanie do Temp2 mniej znaczacej wartosci zmiennej zm_pom
Temp2.0 = Adres.8 'zapis do bitu 0 zmiennej Temp2 bitu 8 zmiennej Adres
Zm_pom = Adres 'przepisanie wartosci z Adres do Zm_pom
Temp3 = Zm_pom 'przepisanie wartosci z zm_pom do Temp3
Set Sck 'ustawienie linii Sck
Reset Cs 'zerowanie linii Cs
Temp = &H53 'kod rozkazu odczytu strony do bufora pamieci
Spiout Temp , 1 'wyslanie rozkazu
Spiout Temp1 , 1 'wyslanie adresu
Spiout Temp2 , 1 'wyslanie adresu
Spiout Temp3 , 1 'wyslanie adresu
Set Cs 'ustawienie linii Cs
Delay 'opoznienie
Set Sck 'ustawienie linii Sck
Reset Cs 'zerowanie linii Cs
Temp = &H82 'kod rozkazu zapisu strony do pamieci EEPROM (poprzez bufor)
Spiout Temp , 1 'wyslanie rozkazu
Spiout Temp1 , 1 'wyslanie adresu
Spiout Temp2 , 1 'wyslanie adresu
Spiout Temp3 , 1 'wyslanie adresu
Spiout Dana , 1 'wyslanie zapisywanej danej
Set Cs 'ustawienie linii Cs
Waitms 28 'opoznienie 28 ms
End Sub 'koniec procedury
Sub Odc_eeprom(byval Adres As Long , Dana As Byte) 'procedura odczytu danej do EEPROM
Temp4 = Adres / 264 'obliczenie adresu strony
Zm_pom = Temp4 'przepisanie adresu strony
Temp1 = 0 'wyzerowanie Temp1
Temp1.1 = Zm_pom.8 'zapis do bitu 1 zmiennej Temp1 bitu 8 zmiennej Zm_pom
Temp1.0 = Zm_pom.7 'zapis do bitu 0 zmiennej Temp1 bitu 7 zmiennej Zm_pom
Adres = Adres Mod 264 'obliczenie adresu w stronie
Shift Zm_pom , Left , 1 'przesuniecie wartosci w zm_pom o jedna pozycje w lewo (mnozenie przez 2)
Temp2 = Low(zm_pom) 'przepisanie do Temp2 mniej znaczacej wartosci zmiennej zm_pom
Temp2.0 = Adres.8 'zapis do bitu 0 zmiennej Temp2 bitu 8 zmiennej Adres
Zm_pom = Adres 'przepisanie wartosci z Adres do Zm_pom
Temp3 = Zm_pom 'przepisanie wartosci z zm_pom do Temp3
Reset Sck 'zerowanie linii Sck
Reset Cs 'zerowanie linii Cs
Temp = &H52 'kod rozkazu odczytania danej z pamieci pod wybranym adresem
Spiout Temp , 1 'wyslanie rozkazu
Spiout Temp1 , 1 'wyslanie adresu
Spiout Temp2 , 1 'wyslanie adresu
Spiout Temp3 , 1 'wyslanie adresu
Temp = 0 'zrowanie wartosci Temp
Spiout Temp , 4 'wyslanie 4 bajtow o wartosci 0
Spiin Dana , 1 'odczyt danej z pamieci EEPROM
Set Cs 'ustawienie linii Cs
End Sub
Program najpierw zapisuje do pamięci wartość a potem odczytuje, lecz mi zawsze zwraca 0.
Czy ktoś próbował obsłużyć tą pamieć w BASOMIE?