-         

Ergebnis 1 bis 3 von 3

Thema: Probleme SD Karte lesen und schreiben

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2007
    Ort
    Wolfsburg
    Alter
    36
    Beiträge
    23

    Probleme SD Karte lesen und schreiben

    Anzeige

    Hallo zusammen,

    bin grade dabei ein bissl mit ner sd karte zu experimentieren. Reset und initialisierung funktionieren auch, aber das lesen und schreiben will einfach nicht funktionieren. mache folgendes:

    cs der karte auf low
    &H51 über spi senden
    dann adresse als long senden
    &HFF senden und auf &H00 als Antwort warten

    Da hab ich schon das erste problem. Ich bekomme meistens &HFF als antwort. wenn ich dann mal 00 kriege warte ich auf das Starttoken &HFE.
    Aber das bekomme ich garnicht. Woran kann das liegen??

    Liegt es vielleicht an der Adresse?Mache da folgendes:

    Dim Bereich as Long
    Bereich = 1
    Bereich = Bereich * 512

    Ich weiß das es dafür die MMC.LIB gibt und habe damit auch schon erfolgreich die karte beschrieben und gelesen, doch ich würd es halt auch gern ohne die schaffen.

    Nutze den Hardware SPI mit 1/16 Taktfrequenz..

    Bin für jede Hilfe dankbar....

    mfg
    Matze

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2007
    Ort
    Wolfsburg
    Alter
    36
    Beiträge
    23
    Das Problem mit dem lesebefehl hat sich erledigt....
    Wenn ich Bereich = 2 setze dann bekomme ich ein FE aber bei allen anderen bereichen bekomme ich 00 oder FF. Hat einer ne Ahnung was der Fehler sein könnte????

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2007
    Ort
    Wolfsburg
    Alter
    36
    Beiträge
    23
    So. Lesen und schreiben funktioniert fast.
    Hab einen Block auf die Karte geschrieben und dann zurück gelesen. Die gelesenen Werte stimmen auch mit dem überein was ich geschrieben habe, bis auf zwei Byte.

    das 4. und 5. byte enthalten werte die ich mir nicht erklären kann. vielleicht hat ja einer von euch ne ahnung wie dass zu stande kommen könnte.


    Code:
    $regfile = "m128103.dat"
    $crystal = 7372800
    $baud = 9600
    
    Config Portd.0 = Output : Set Portd.0                       'Pin für die Displaybeleuchtung
    Config Portd.2 = Output
    
    Cskarte Alias Portd.2 : Set Cskarte
    
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 0 , Interrupt = Off
    
    Spiinit
    
    '*********** Variablen *********************************************************
    Dim Cmdbyte As Byte
    Dim Cnt As Byte
    Dim Fktcnt As Byte
    Dim Cntword As Word
    Dim Antwortr1 As Byte
    Dim 512byteblock(512) As Byte
    '********* Sektornummer bestimmen **********************************************
    Dim Sektor As Byte
    Dim Adresse As Long
    
    
    'Adresse bestimmen
    Adresse = Sektor * 512
    
    '************** FUNKTIONEN *****************************************************
    
    
    '************ Kartenreset ******************************************************
    Kartenreset:
    Do
       Cnt = 0
       Set Cskarte
    
       Cmdbyte = &HFF
       For Cnt = 1 To 10
       Spiout Cmdbyte , 1
       Next Cnt
       Cnt = 0
    
       Reset Cskarte
       Cmdbyte = &H40
       Spiout Cmdbyte , 1
    
       Cmdbyte = &H00
       For Cnt = 1 To 4
       Spiout Cmdbyte , 1
       Next Cnt
       Cnt = 0
    
       Cmdbyte = &H95
       Spiout Cmdbyte , 1
    
       Cmdbyte = &HFF
    
       Do
       Spiout Cmdbyte , 1
       Spiin Antwortr1 , 1
       Incr Cnt
       Loop Until Cnt = 255 Or Antwortr1 = &H01
    Incr Fktcnt
    Loop Until Antwortr1 = &H00 Or Fktcnt = 255
    
       Set Cskarte
    Return
    
    
    '************ Karte initialisieren *********************************************
    Karteninit:
    Do
       Cnt = 0
       Reset Cskarte
    
       Cmdbyte = &H41
       Spiout Cmdbyte , 1
    
       Cmdbyte = &H00
       For Cnt = 1 To 4
       Spiout Cmdbyte , 1
       Next Cnt
       Cnt = 0
    
       Cmdbyte = &HFF
       Spiout Cmdbyte , 1
    
       Do
    
       Spiin Antwortr1 , 1
       Incr Cnt
       Loop Until Cnt = 255 Or Antwortr1 = &H00
    Incr Fktcnt
    Loop Until Antwortr1 = &H00 Or Fktcnt = 255
    
       Set Cskarte
    Return
    
    '************ Reset und Initialisierung zusammen *******************************
    Karteaktivieren:
       Gosub Kartenreset
       Gosub Karteninit
    Return
    
    '************ 512 Byte Block lesen *********************************************
    Blocklesen:
       Cnt = 0
       Reset Cskarte
    
       Cmdbyte = &HFF
       For Cnt = 1 To 5
       Spiout Cmdbyte , 1
       Next Cnt
    
       Cmdbyte = &H51
       Spiout Cmdbyte , 1
    
       Spiout Adresse , 4
    
       Cmdbyte = &HFF
    
    
       Do
       Spiout Cmdbyte , 1
       Spiin Antwortr1 , 1
       Incr Cnt
       Loop Until Cnt = 255 Or Antwortr1 = &H00
       Cnt = 0
    
       Do
       Spiout Cmdbyte , 1
       Spiin Antwortr1 , 1
       
       Incr Cntword
       Loop Until Cntword = &HFFFFFFFF Or Antwortr1 = &HFE
    
       If Antwortr1 < &HFE Or Antwortr1 > &HFE Then
       Return
       End If
    
       Spiin 512byteblock(1) , 512
    
       Spiin Antwortr1 , 1
       Spiin Antwortr1 , 1
    
       Set Cskarte
    
    Return
    
    
    '************ Block schreiben **************************************************
    Blockschreiben:
       Cnt = 0
       Reset Cskarte
    
       Cmdbyte = &HFF
       For Cnt = 1 To 10
       Spiout Cmdbyte , 1
       Next Cnt
    
       Cmdbyte = &H58
       Spiout Cmdbyte , 1
       Spiout Adresse , 4
    
       Cmdbyte = &HFF
    
       Do
       Spiout Cmdbyte , 1
       Spiin Antwortr1 , 1
       Incr Cnt
       Loop Until Cnt = 255 Or Antwortr1 = &H00
    
    
       Cnt = 0
       Do
       Spiout Cmdbyte , 1
       Waitms 1
       Incr Cnt
       Loop Until Cnt = 100
    
       Cmdbyte = &HFE
       Spiout Cmdbyte , 1
    
       Spiout 512byteblock(1) , 512
    
       Cmdbyte = &HFF
       Spiout Cmdbyte , 1
       Spiout Cmdbyte , 1
    
       Cnt = 0
    
       Do
       Spiout Cmdbyte , 1
       Spiin Antwortr1 , 1
       Incr Cnt
       Loop Until Antwortr1 = 5 Or Cnt = 255
    
       Waitms 50
    
       Set Cskarte
    
    Return

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •