Witam!
siedze i siedze i nie wiem dlaczego karta po inicjalizacji odpowiada inaczej niz powinna :
po podaniu 80 impulsow i CMD0 powinna odpowiedziec 1 a odpowiada 3
a po CMD 1 odpowiada 1 a powinna 0
bascom , oscylator 1 Mhz
moze ktos podpowie co robie zle ..... dzieki
siedze i siedze i nie wiem dlaczego karta po inicjalizacji odpowiada inaczej niz powinna :
$regfile = "M8def.dat" 'typ mikrokontrolera
Dim Temp As Byte 'zmienna pomocnicza
$hwstack = 64 'wartosc stosu
$swstack = 64 'wartosc stosu
$framesize = 64 'wartosc ramki
Config Pinc.1 = Output 'konfiguracja linii PC.1 jako wyjsciowej
Config Spi = Soft , Din = Pinc.3 , Dout = Portc.0 , Ss = Portc.1 , Clock = Portc.2
Declare Sub Res_mmc 'procedura zerowania karty MMC
Declare Sub Wysl_p_cykl(byval Ilosc As Byte) 'procedura wysylania zadanej ilosci pustych cykli
Declare Sub Wysl_kom(byval Kom As Byte , Byval Argh As Word , Byval Argl As Word) 'procedura wyslania komendy
Declare Sub Zak_kom 'procedura konczaca komunikacja z karta MMC
Dim I As Word 'zmienna licznikowa
Dim Odp As Byte 'zmienna przechowujaca odpowiedz z karty
Cs Alias Portc.1 'zapis aliasu CS do linii PB.2
Set Cs 'ustawienie linii cs
Spiinit 'inicjacja interfejsu SPI
Print "init"
Call Res_mmc 'wywolanie procedury zerowanie MMC
Print "Odczyt nazwy karty MMC"
'...... itd
Do 'nieskonczona
Loop 'petla
End 'koniec programu
Sub Res_mmc 'procedura zerowania karty MMC
Call Wysl_p_cykl(10) 'wyslanie 80 pustych cykli (8 * 10)
Call Wysl_kom(0 , 0 , 0) 'wyslanie komendy zerowania karty MMC (numer komendy 0)
Call Zak_kom
Print Odp 'tu powinna byc odpowiedz 1 a jest 3
If Odp.0 <> 1 Then 'jesli bit 0 zmiennej odpowiedzi Odb rozny od 1, (karta nie jest w stanie IDLE), to
Set Err 'ustawienie zmiennej err
Exit Sub 'wyjscie z procedury
End If
Do 'poczatek petli
Call Wysl_kom(1 , 0 , 0) 'wyslanie komendy inicjacji karty MMC (numer komendy 1)
Call Zak_kom
Print Odp ' a tu powinna byc odpowiedz 0 a jest 1
Loop Until Odp = 0 'petla wykonywana az odb rozne od 0 (brak zajetosci karty)
End Sub 'koniec procedury
Sub Wysl_p_cykl(byval Ilosc As Byte) 'procedura wyslania pustych cyklii do karty MMC
Do 'poczatek petli
Temp = Spimove(&Hff) 'wyslanie wartosci &HFF
Decr Ilosc 'mniejszenie wartosci Ilosc o jeden
Loop Until Ilosc <> 0 'petla wykonywana az Ilosc jest rozne od 8
End Sub 'koniec procedury
Sub Wysl_kom(byval Kom As Byte , Byval Argh As Word , Byval Argl As Word) 'procedura wyslania komendy
Reset Cs 'zerowanie linii cs
Temp = Kom + &H40 'dodanie do numeru wysylanej komendy wartosci &H40
Spiout Temp , 1 'wyslanie numeru komendy
Temp = High(argh) 'wyslanie bardziej znaczacej polowki argumentu argh
Spiout Temp , 1 'wyslanie argumentu 1
Temp = Low(argh) 'wyslanie mniej znaczacej polowki argumentu argh
Spiout Temp , 1 'wyslanie argumentu 2
Temp = High(argl) 'wyslanie bardziej znaczacej polowki argumentu argl
Spiout Temp , 1 'wyslanie argumentu 3
Temp = Low(argl) 'wyslanie mniej znaczacej polowki argumentu argl
Spiout Temp , 1 'wyslanie argumentu 4
Temp = &H95 'zapis sumy kontrolnej
Spiout Temp , 1 'wyslanie stałej dla komendy o numerze 0 sumy kontrolnej
For I = 1 To 10 'petla wykonywana 10 razy
Odp = Spimove(&Hff) 'odczyt odpowiedzi z karty
If Odp.7 = 0 Then 'jesli bit 7 zmiennej odp rowny 0, to brak zajetosci karty
Reset Err 'zerowanie err
Exit Sub 'wyjscie z procedury
End If
Next I 'zwiekszenie o jeden I
Set Err 'ustawienie zmiennej err
End Sub 'koniec procedury
Sub Zak_kom 'procedura zakonczenia komunikacji z karta MMC
Set Cs
Call Wysl_p_cykl(1) 'wyslanie do karty 8 cykli
End Sub 'koniec procedury
po podaniu 80 impulsow i CMD0 powinna odpowiedziec 1 a odpowiada 3
a po CMD 1 odpowiada 1 a powinna 0
bascom , oscylator 1 Mhz
moze ktos podpowie co robie zle ..... dzieki